2ea5185cd6
- /weekly: 차주 날짜 입력→금주 자동 역산, Google Tasks 기반 금주/차주 보고서. 버킷팅은 코드(예측 가능), 포맷팅만 LLM. 신규 weeklyPrompt.ts + coordination.ts runWeekly. - 기존 CEO /weekly 리뷰 카드(dashboards.ts) 제거 — 이름 충돌 해소, /weekly 일원화. - /meet: 액션아이템에 '작업 상세' 열 추가, 캘린더 notes 가 실제 작업 내용을 담도록 재구성. - /meet: 발언자 추적 복원 + 비선형 회의 재조립 + 근거/할루시네이션 억제 규칙으로 오귀속 감소. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
87 lines
5.2 KiB
TypeScript
87 lines
5.2 KiB
TypeScript
/**
|
|
* 회의 녹취 텍스트 → 사실 기반 구조화 회의록(Actionable Minutes) LLM 프롬프트.
|
|
* 사용자 정의 규칙: Fact/Discussion/Decision/Risk/Action 분류, 메타데이터 우선.
|
|
*/
|
|
export function buildMeetPrompt(transcript: string, metadata: string): string {
|
|
const metaBlock = metadata.trim()
|
|
|| '(메타데이터 미입력 — 녹취록 내용에서 추론하거나 "확인 불가"로 표기)';
|
|
return `# 임무 (Objective)
|
|
제공된 회의 녹취 텍스트와 메타데이터를 기반으로, 외부 지식 없이 사실 기반의
|
|
구조화된 회의록(Actionable Minutes)을 생성한다.
|
|
|
|
# 역할 (Role)
|
|
- Fact Extractor: 녹취록에 명시적으로 존재하는 사실만 추출
|
|
- Attribution Tracker: 누가 무엇을 말했는지 발언 주체를 끝까지 추적해 오귀속을 방지
|
|
- Decision Tracker: 결정 여부 구분
|
|
- Action Organizer: 실행 항목 구조화
|
|
- Context Filter: 불필요한 발언(잡담) 제거
|
|
|
|
# 데이터 우선순위 (Data Priority)
|
|
1순위: 메타데이터 / 2순위: 녹취록 내용. 충돌 시 반드시 메타데이터를 사용한다.
|
|
|
|
# 처리 절차 (Processing Flow)
|
|
1. Speaker Tracking — 발언자 ID/이름을 끝까지 유지한다. **누가 한 말인지를 절대 임의로 바꾸거나 합치지 말 것.**
|
|
2. Topic Reclustering — 이 녹취록은 비선형이다(A→B→Z→다시 A 식으로 주제가 튄다). 녹취록 전체를 훑어 **흩어진 발언을 주제별로 다시 묶은 뒤** 정리한다. 녹취록상 앞뒤로 붙어 있다는 이유만으로 두 발언을 인과·연결 관계로 엮지 말 것(**인접 ≠ 연결**).
|
|
3. Deconstruction — 잡담을 제거하고 의미 단위로 분해하되, 각 단위에 발언 주체를 보존한다.
|
|
4. Classification — 모든 내용을 Fact / Discussion / Decision / Risk / Action 으로 분류한다.
|
|
5. Decision Logic
|
|
- 명확한 합의 표현 → Decision
|
|
- 실행 주체 + 행동 → Action
|
|
- 제안/의견 → Discussion
|
|
- 조건 부족 / 합의 불명확 → Open Issue
|
|
6. Structuring — 중복 제거, 핵심만 유지, 짧고 명확한 문장을 사용한다.
|
|
|
|
# 근거·정확성 규칙 (Grounding Rules — 반드시 준수, 할루시네이션 방지)
|
|
- **녹취록에 명시된 내용만 적는다.** 추론으로 빈칸을 메우거나, 별개의 발언을 하나의 인과 사슬로 합성하지 말 것.
|
|
- **발언 주체가 불명확하면 추측하지 말 것.** 누가 말했는지 확실하지 않으면 이름을 붙이지 말고 "(발언 주체 불명확)"으로 표기하거나 "~라는 의견이 제시됨"처럼 주체 없이 중립적으로 서술한다. 어떤 발언자의 말을 다른 발언자의 결론으로 옮기는 것은 가장 심각한 오류다.
|
|
- **녹취록에 없는 숫자·날짜·금액·고유명사·제품명을 만들어내지 말 것.** 불확실하면 "확인 필요"로 둔다.
|
|
- 어떤 항목의 근거가 녹취록에서 약하거나 모호하면, 지어내지 말고 해당 항목 끝에 "(확인 필요)"를 붙인다.
|
|
- Decision은 명시적 합의 표현이 있을 때만 '결정됨'이다. 합의가 불명확하면 '논의 중' 또는 오픈 이슈로 둔다.
|
|
|
|
# 출력 검증 (Validation)
|
|
출력 전 내부적으로 점검한다: ① 각 발언이 올바른 주체에게 귀속됐는가 ② 인접 발언을 임의로 연결하지 않았는가 ③ Decision은 실제 합의인가 ④ 녹취록에 없는 정보를 추가하지 않았는가 ⑤ Action은 실행 가능한가.
|
|
단, 검증 과정·체크 로그는 출력하지 말 것. 최종 회의록만 출력한다.
|
|
|
|
[메타데이터]
|
|
${metaBlock}
|
|
|
|
[회의 녹취록]
|
|
\`\`\`
|
|
${transcript}
|
|
\`\`\`
|
|
|
|
# 출력 형식 (Output Format — 정확히 이 구조를 유지)
|
|
|
|
# [회의 제목]
|
|
|
|
- **날짜**: [YYYY년 MM월 DD일 | 확인 불가]
|
|
- **참석자**: [메타데이터 기준 | 없을 경우: 논의 참여 주체]
|
|
- **주제 요약**: [한 문장 요약]
|
|
|
|
## 🔹 요약 보고
|
|
핵심 논의 요약 3~5개를 글머리표로 작성.
|
|
|
|
## 1. 주요 논의 사항
|
|
각 안건마다 아래 구조로:
|
|
### [안건 제목]
|
|
- **현황**:
|
|
- **핵심 논의**: 쟁점이 되거나 주체가 중요한 발언은 "OOO: ~" 형태로 발언자를 밝힌다. 주체가 불명확하면 이름을 붙이지 말 것.
|
|
- **결론**: [결정됨 / 논의 중 / 보류]
|
|
|
|
## 2. 리스크 및 이슈
|
|
|
|
## 3. 결정 사항
|
|
|
|
## 4. 오픈 이슈
|
|
|
|
## 5. 액션 아이템
|
|
각 행은 반드시 녹취록 근거로 작성한다. 표 셀 안에서는 줄바꿈과 \`|\` 문자를 쓰지 말 것.
|
|
| 담당 | 작업 내용 | 작업 상세 | 기한 |
|
|
| --- | --- | --- | --- |
|
|
|
|
- **작업 내용**: 한 줄짜리 작업명. 캘린더 일정 제목으로 그대로 쓰이므로 그 자체로 무슨 일인지 식별되게 작성한다. ("검토", "확인" 같은 단독 동사 금지)
|
|
- **작업 상세**: 이 작업이 **무엇이고, 왜 필요하며, 구체적으로 무엇을 수행해야 하는지**를 2~3문장으로 적는다(배경·목적·수행 범위·산출물). 녹취록에서 언급된 대상·수치·조건을 그대로 인용한다. 근거가 부족하면 "추가 확인 필요: …" 형태로 무엇을 확인해야 하는지 명시한다. 단순히 작업명을 반복하지 말 것.
|
|
|
|
위 형식을 정확히 따르고, 모든 내용은 한국어로 작성하시오.`;
|
|
}
|