refs #732: polish HMM report title and response

This commit is contained in:
devmrko
2026-08-10 16:06:17 +09:00
parent b13b913939
commit 66fcb5d149
6 changed files with 247 additions and 5 deletions

View File

@@ -13,6 +13,8 @@ DB를 다시 조회하거나 자연어를 해석하지 않는다.
- 입력은 질문·답변 근거·조회 행으로 구성된 허용 JSON 계약이며, Oracle DB 함수는 템플릿에만 매핑한다.
- 선사 실적 조회 MCP가 VPD를 적용한 데이터 접근 경계이고, 리포트 MCP는 표현 경계다.
- 승인된 HTML 템플릿은 DB CLOB으로 버전 관리하고, 생성 HTML은 MCP 응답의 `html` 속성으로만 반환한다.
- 제목은 질문 전체 문장을 복사하지 않는다. 포털의 제목 생성 지침이 요청 대상과 업무 범위만 남긴 짧은 보고서 제목을 만들고 renderer에 전달한다.
- HTML artifact가 반환되면 일반 답변은 HTML 표나 코드를 반복하지 않고 생성 완료와 조회 건수만 안내한다. 실제 표현은 `생성된 리포트` 영역 하나에서 담당한다.
## 전체 흐름

View File

@@ -54,6 +54,24 @@ Tool 이름, 사용자 코드나 예상 행 수를 조건으로 사용하지 않
`generatedAt`, `requestedBy`, `question`, `answer`, `execution`, `evidence`, `limitation`
넣는다. 행에는 담당자·선사 식별자와 최신 KPI만 넣는다.
`report.title`은 사용자 질문 원문이 아니다. 포털이 모델에 다음 제목 계약을 지시해 만든 짧은
업무 제목이다.
- `HTML로 보여줘`, `리포트로 만들어줘`와 같은 출력 형식·행동 문구는 제거한다.
- 사용자·팀·업무 대상처럼 범위를 구분하는 식별자는 유지한다.
- 문장형 답변이 아니라 화면 머리글에 맞는 명사형 제목으로 만든다.
- 템플릿이 붙이는 고정 부제와 같은 문구를 반복하지 않는다.
제목 생성이 실패하면 전체 질문을 제목으로 사용하지 않고 짧은 일반 업무 제목으로 안전하게
대체한다. 이 규칙은 특정 사용자 코드나 조회 행 수를 조건으로 사용하지 않는다.
## 포털 표시 계약
renderer 응답에 유효한 `html` 또는 `rendered_html`이 있으면 HTML artifact가 최종 표현물이다.
포털의 일반 답변 생성 지침은 HTML 태그, Markdown 표, 업무 행 전체를 다시 만들지 않고 제목과
조회 건수, 아래 리포트 확인 안내만 반환한다. 포털은 같은 조건을 출력 후에도 검사해 모델이
HTML을 반환하더라도 안전한 짧은 안내문으로 정규화한다.
서버는 JSON 크기, 행 수, 문자열 길이, 숫자 형식을 제한하고, 템플릿에 주입할 JSON에서
`</script>`를 이스케이프한다. payload는 저장하지 않는다.

View File

@@ -34,6 +34,9 @@
3. 실행 상세에서 첫 단계가 데이터 조회이고 두 번째 단계가 HTML 렌더링인지 확인한다.
4. 결과 영역에 `생성된 리포트` iframe이 표시되고, 막대·상세 표가 첫 단계 `items`와 일치하는지
확인한다.
5. 일반 답변에는 `<table>`, `<div>` 또는 Markdown 표가 반복되지 않고, 생성 완료·제목·조회 건수만
표시되는지 확인한다.
6. 리포트 머리글이 질문 전체 문장이 아니라 출력 형식 문구를 제거한 짧은 업무 제목인지 확인한다.
대표 E1001 팀장 질의의 운영 회귀 기준은 현재 8건이다. 이 숫자는 검증 기준일 뿐 코드나 Tool
인수에 고정하지 않는다. 첫 단계 원본에 행이 있는데 `reportJson.rows`가 0건이면 순차 실행 성공이

View File

@@ -35,6 +35,31 @@
**해결**: DB 템플릿 활성 상태와 custom Agent Tool의 반환 형식을 확인한다. 포털은 유효한 `html`
또는 `rendered_html`만 sandboxed iframe으로 표시한다.
## 일반 답변에 HTML 표가 반복되거나 글자가 잘 보이지 않음
**원인**: 최종 답변 모델이 사용자의 `HTML로 보여줘`를 artifact 생성이 아니라 답변 본문 형식
요청으로 해석해 `<table>` 또는 Markdown 표를 다시 작성했다.
**확인**: MCP 마지막 응답에 유효한 `html`이 있으면서 저장된 `answer`에도 HTML 태그나 표 행이
있는지 확인한다.
**해결**: 최종 답변 지침에 HTML artifact 우선 규칙을 적용하고, 출력 후 검사에서 일반 답변을
생성 완료·제목·조회 건수 안내로 정규화한다. iframe CSS나 조회 Tool은 변경하지 않는다.
**재발 방지**: renderer가 반환된 시나리오에서 일반 답변에 `<table>`과 Markdown 표가 없는지
회귀 테스트한다.
## 리포트 제목에 질문 전체 문장이 표시됨
**원인**: `report.title`에 사용자 질문을 그대로 복사했다.
**확인**: renderer 호출의 `reportJson.report.title``question`이 완전히 같은지 확인한다.
**해결**: 제목 생성 지침으로 출력 형식·행동 문구를 제거한 짧은 명사형 제목을 만들고,
`report.question`에는 원문을 유지한다.
**재발 방지**: 제목과 원문 질문이 역할상 분리되고 제목 길이 제한이 적용되는지 검증한다.
## 리포트는 생성됐지만 행이 0건임
**원인**: 다음 둘 중 하나다.