mirror of
https://github.com/hwanny1128/HGZero.git
synced 2025-12-06 10:16:24 +00:00
**문제점**: - AI가 회의 내용에 없는 제안사항을 생성 (Hallucination) - 프롬프트의 예시를 실제 회의 내용으로 혼동 - 제안사항 추출 개수가 적음 **해결 방안**: 1. 프롬프트 구조 재설계 - 500+ 줄 예시 → 90줄 핵심 지침으로 간소화 - system_prompt에 패턴만 정의 - user_prompt는 실제 회의 내용만 포함 - "오직 제공된 회의 내용만 분석" 명령 4번 반복 강조 2. Hallucination 방지 장치 - "추측, 가정, 예시 내용 절대 금지" - "불확실한 내용은 추출하지 않기" - 회의 내용과 분석 지침을 시각적으로 분리 (━ 구분선) 3. 추출 개선 - max_tokens: 4096 → 8192 (2배 증가) - confidence 임계값: 0.7 → 0.65 (완화) - 새 카테고리 추가: 🔔 후속조치 - 패턴 인식 확장 (제안/진행상황/액션 아이템) **변경 파일**: - ai-python/app/prompts/suggestions_prompt.py (대폭 간소화) - ai-python/app/config.py (max_tokens 증가) - ai-python/app/services/claude_service.py (confidence 임계값 완화) **예상 효과**: - Hallucination 90% 이상 감소 - 제안사항 추출 개수 30-50% 증가 - 품질 유지 (신뢰도 필터링 유지) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
AI Service (Python)
실시간 AI 제안사항 서비스 - FastAPI 기반
📋 개요
STT 서비스에서 실시간으로 변환된 텍스트를 받아 Claude API로 분석하여 회의 제안사항을 생성하고, SSE(Server-Sent Events)로 프론트엔드에 스트리밍합니다.
🏗️ 아키텍처
Frontend (회의록 작성 화면)
↓ (SSE 연결)
AI Service (Python)
↓ (Redis 조회)
Redis (실시간 텍스트 축적)
↑ (Event Hub)
STT Service (음성 → 텍스트)
🚀 실행 방법
1. 환경 설정
# .env 파일 생성
cp .env.example .env
# .env에서 아래 값 설정
CLAUDE_API_KEY=sk-ant-... # 실제 Claude API 키
2. 의존성 설치
# 가상환경 생성 (권장)
python3 -m venv venv
source venv/bin/activate # Mac/Linux
# venv\Scripts\activate # Windows
# 패키지 설치
pip install -r requirements.txt
3. 서비스 시작
# 방법 1: 스크립트 실행
./start.sh
# 방법 2: 직접 실행
python3 main.py
4. 서비스 확인
# 헬스 체크
curl http://localhost:8087/health
# SSE 스트림 테스트
curl -N http://localhost:8087/api/v1/ai/suggestions/meetings/test-meeting/stream
📡 API 엔드포인트
SSE 스트리밍
GET /api/v1/ai/suggestions/meetings/{meeting_id}/stream
응답 형식 (SSE):
event: ai-suggestion
data: {
"suggestions": [
{
"id": "uuid",
"content": "신제품의 타겟 고객층을 20-30대로 설정...",
"timestamp": "00:05:23",
"confidence": 0.92
}
]
}
🔧 개발 환경
- Python: 3.9+
- Framework: FastAPI
- AI: Anthropic Claude API
- Cache: Redis
- Event: Azure Event Hub
📂 프로젝트 구조
ai-python/
├── main.py # FastAPI 진입점
├── requirements.txt # 의존성
├── .env.example # 환경 변수 예시
├── start.sh # 시작 스크립트
└── app/
├── config.py # 환경 설정
├── models/
│ └── response.py # 응답 모델
├── services/
│ ├── claude_service.py # Claude API 서비스
│ ├── redis_service.py # Redis 서비스
│ └── eventhub_service.py # Event Hub 리스너
└── api/
└── v1/
└── suggestions.py # SSE 엔드포인트
⚙️ 환경 변수
| 변수 | 설명 | 기본값 |
|---|---|---|
CLAUDE_API_KEY |
Claude API 키 | (필수) |
CLAUDE_MODEL |
Claude 모델 | claude-3-5-sonnet-20241022 |
REDIS_HOST |
Redis 호스트 | 20.249.177.114 |
REDIS_PORT |
Redis 포트 | 6379 |
EVENTHUB_CONNECTION_STRING |
Event Hub 연결 문자열 | (선택) |
PORT |
서비스 포트 | 8087 |
🔍 동작 원리
- STT → Event Hub: STT 서비스가 음성을 텍스트로 변환하여 Event Hub에 발행
- Event Hub → Redis: AI 서비스가 Event Hub에서 텍스트를 받아 Redis에 축적 (슬라이딩 윈도우: 최근 5분)
- Redis → Claude API: 임계값(10개 세그먼트) 이상이면 Claude API로 분석
- Claude API → Frontend: 분석 결과를 SSE로 프론트엔드에 스트리밍
🧪 테스트
# Event Hub 없이 SSE만 테스트 (Mock 데이터)
curl -N http://localhost:8087/api/v1/ai/suggestions/meetings/test-meeting/stream
# 5초마다 샘플 제안사항이 발행됩니다
📝 개발 가이드
Claude API 키 발급
- https://console.anthropic.com/ 접속
- API Keys 메뉴에서 새 키 생성
.env파일에 설정
Redis 연결 확인
redis-cli -h 20.249.177.114 -p 6379 -a Hi5Jessica! ping
# 응답: PONG
Event Hub 설정 (선택)
- Event Hub가 없어도 SSE 스트리밍은 동작합니다
- STT 연동 시 필요
🚧 TODO
- Event Hub 연동 테스트
- 프론트엔드 연동 테스트
- 에러 핸들링 강화
- 로깅 개선
- 성능 모니터링