- 7-8월 초기 구축 문서 12개를 _archive/troubleshooting/2025_07-08_initial_setup/로 이동 - book/300_architecture/390_human_in_the_loop_intent_learning.md를 journey/research/intent_classification/로 이동 (개발 여정 문서) - 빈 폴더 제거 (journey/assets/*)
4.8 KiB
4.8 KiB
rb8001 콜드메일 요약: 밸류에이션 고정 표기 및 UNKNOWN 라우팅 개선
날짜: 2025-10-23
작성자: admin
관련 파일: rb8001/app/services/startup_valuation.py:433-456, rb8001/app/services/workflows/coldmail_workflow.py:124-127, rb8001/app/services/coldmail_processor.py:444-452, rb8001/app/brain/decision_engine.py:105-120
문제 상황
-
콜드메일 요약 메시지에 “IR자료: 30.0억원 (신뢰도 60%)”로 표기되어 밸류에이션이 ‘고정’처럼 인지됨.
- 증거:
rb8001/logs/rb8001.log:66827-66830— seed prior(30)만으로 Posterior 산출, IR 지표 없음 →Insufficient IR metrics; ... HOLD로 기록. - 원인:
startup_valuation.py:433-456— 증거 0개면 DB 저장을 보류(HOLD)하되 결과 수치 자체는 prior 기반으로 남음. 요약 메시지(workflows/coldmail_workflow.py:124-127)는 HOLD/근거 부재를 표시하지 않음.
- 증거:
-
스레드 후속 질문(“지에프 솔루션 … 설명해줘”, “30억 고정 이유”)이 UNKNOWN 의도로 처리되어 일반 답변으로 하향.
- 증거:
rb8001/logs/rb8001.log:66861, 66916, 66920— DecisionEngine UNKNOWN. - 원인:
decision_engine.py:114-120— 웹검색/설명 패턴에.*대해서.*설명은 있으나 “에 대해 설명해줘”/“설명해줘”/“이유”/“기업가치|밸류에이션|30억” 조합이 부재.
- 증거:
해결 방안
-
표시 개선(오해 방지)
coldmail_processor.py:444-452: 반환 dict에valuation_result.metadata의 핵심 키를 포함하도록 확장:status(hold),missing_fields,prior_components.stage_prior.median등.workflows/coldmail_workflow.py:124-127: HOLD이면 “초안(HOLD·사전값 seed 30)”로 라벨링하고 범위(하한~상한)와 누락지표를 함께 표기. 예)- 지에프솔루션: 초안(HOLD·seed 30) [필요: revenue, growth_rate, team_size].
-
라우팅 보강(의도 인식 향상)
decision_engine.py:114-120(WEB_SEARCH) 및/또는decision_engine.py:105-109(DOCUMENT_ANALYSIS) 패턴에 다음 추가:.*에 대해.*설명해줘,설명해줘,이유,(기업가치|밸류에이션|valuation|30억)
- 선택: 별도 Intent(예:
valuation_explain)를 도입해 최근 평가 메타데이터를 근거로 “왜 30억인가(HOLD·seed prior)”를 설명하도록 연결.
-
데이터 수집 루프(정확도 개선)
- HOLD 시 누락 지표(revenue, growth_rate, team_size, tech_advantage)를 안내하고 입력(또는 파일 보강) 후 재평가를 트리거. Slack 버튼/모달은 향후 작업으로 분리 문서화.
재현/검증 절차
- HOLD 확인:
rb8001/logs/rb8001.log에서Insufficient IR metrics검색.- 예:
rg -n "Insufficient IR metrics" rb8001/logs/rb8001.log
- 예:
- UNKNOWN 확인: 동일 로그에서
의도 매칭 실패 - UNKNOWN검색.- 예:
rg -n "의도 매칭 실패 - UNKNOWN" rb8001/logs/rb8001.log
- 예:
- 코드 기준선:
- HOLD 라벨 미표시:
workflows/coldmail_workflow.py:124-127 - 설명/이유 패턴 부재:
decision_engine.py:114-120
- HOLD 라벨 미표시:
검증(테스트)
- 테스트 위치:
rb8001/tests/test_coldmail_display_and_routing.py— 기존 동작 재현(UNKNOWN, HOLD=seed 30, 요약에 HOLD 미표시)test_acceptance_proposed_improvements.py— 개선 기대 동작(요약 HOLD/누락지표 표기, 설명/이유/밸류/30억 질의 UNKNOWN 아님)
- 실행 명령:
cd rb8001 && pytest -q tests/test_coldmail_display_and_routing.py tests/test_acceptance_proposed_improvements.py - 결과: 5 passed
- 표시 개선: HOLD/누락지표 표기 확인
- 라우팅 보강: “설명/이유/밸류/30억” 질의가 UNKNOWN이 아닌 적절 라우팅으로 분류 확인
배포/사후 점검
- 서비스 코드 변경:
app/services/workflows/coldmail_workflow.py: HOLD(초안) 라벨·누락지표 표기 추가app/brain/decision_engine.py: 설명/이유/밸류/30억 패턴 추가(UNKNOWN 방지)app/services/coldmail_processor.py: processed_results에valuation_result.metadata포함 (HOLD/누락지표 전달)
- 커밋:
c8026b1,d166743(main) — Gitea Actions 자동 배포 트리거 - 서비스 헬스체크:
curl -sf http://192.168.219.52:8001/health→ healthy 확인- 서버 내 점검 가이드(51124):
curl -sf http://localhost:8001/health,docker compose ps,docker logs rb8001 --tail 100
- 서버 내 점검 가이드(51124):
교훈
- 지표 부재(HOLD) 상태의 수치 표기는 ‘초안’/‘사전값’/‘근거’와 함께 명시해 오해를 방지해야 한다.
- 사용자 표현(“설명해줘/이유/30억/밸류에이션”)을 패턴에 반영하지 않으면 의도 인식 실패로 품질이 하락한다.
- 로그 근거(KST, 파일/라인)와 코드 기준선을 함께 정리하면 재현/수정/검증 사이클이 빨라진다.