유전 알고리즘을 통한 RAG 파이프라인의 진화: MCP 서버 구현
정적 프롬프트를 사용하는 RAG 시스템은 쿼리가 변함에 따라 효율성이 떨어집니다. 통제된 진화를 구현하면 LLM을 사용하여 '게놈'—파이프라인 구성—의 변형을 생성할 수 있습니다. 판단 평가자는 샘플 쿼리로 이를 테스트하며, 최상의 후보는 관리자의 수동 확인을 위해 pending_approval 상태로 이동합니다. 이는 세 가지 계층—postprocess, routing, cache_policy—을 가진 MCP 서버 documents1c(1C 문서용 RAG)에 적용되었습니다.
진화는 자율적이지 않으며 관리자 패널의 실험실 루프 내에서 작동합니다. 초점은 1C 문서 도메인에서 후처리 및 캐싱 정책을 위한 시스템 프롬프트를 개선하는 데 있으며, 재무, 회계, 법률 분야로 확장 가능합니다.
세 계층 파이프라인의 아키텍처
docsearch 파이프라인은 쿼리를 순차적으로 처리합니다:
- 의미론적 청크 검색(필요 시 하이브리드).
- 라우팅: 분류기가 query_type(factual_lookup, explanation, bsl_help)을 결정하고 프로필을 활성화하여 system_prompt, depth_budget, format을 설정합니다.
- 후처리: LLM이 활성 게놈을 기반으로 계약(답변, 핵심 포인트, 출처, 경고)에 따라 응답을 조립합니다.
- 캐시 정책: 캐시에 쓰기 전 입장 제어(min_sources_count, block_if_warnings).
| 계층 | 진화 대상 | 영향 |
|------|-----------------|---------|
| 후처리 | system_prompt, chunk_count, max_tokens | 텍스트 응답 품질 |
| 라우팅 | classifier_prompt, profiles | 쿼리 유형 적응 |
| 캐시 정책 | 입장 임계값(min_supportedness) | 캐시 필터링 |
후처리와 라우팅은 실시간으로 응답을 수정하는 반면, 캐시 정책은 저장에만 영향을 미칩니다.
게놈 및 평가를 위한 데이터 모델
게놈은 evolution_genome 테이블에 JSONB로 저장되며, 필드: layer, status(candidate → evaluated → pending_approval → active), genome, score.
class EvolutionGenome(Base):
layer = Column(String(32), nullable=False, index=True)
status = Column(String(32), nullable=False, default="candidate", index=True)
genome = Column(JSONB, nullable=False)
score = Column(Float, nullable=True)
eval_results = relationship("EvolutionEvalResult", back_populates="genome")
각 eval_result는 쿼리, 응답(최대 2000자), judge_score(0–10), LLM 판단자의 judge_reasoning을 기록합니다.
class EvolutionEvalResult(Base):
genome_id = Column(Integer, ForeignKey("evolution_genome.id"), nullable=False)
query = Column(Text, nullable=False)
response = Column(Text, nullable=True)
judge_score = Column(Float, nullable=True)
judge_reasoning = Column(Text, nullable=True)
라우팅의 경우 eval_seed_prompt가 생성됩니다—에이전트+MCP의 테스트 세션.
진화 사이클: 변이에서 프로덕션까지
사이클: generate_mutations() → eval_genome() → promote_best() → 수동 승인.
- 생성: 기본 게놈(활성 또는 DEFAULT_GENOMES) + MCP documents1c 캐시의 N개 쿼리-응답 쌍. LLM이 N개의 JSON 변형 {"genome": {...}, "notes": "..."}을 생성합니다.
- 평가: 판단자(rag_postprocess_model)가 기준—완전성, 정확성, 출처, 간결성—에 대해 검사합니다. 샘플 전체 평균 점수.
- 승격: 최상의 후보가 pending_approval로 이동합니다.
- 활성화: 관리자가 UI에서 확인합니다.
계층별 변이 생성
후처리: system_prompt(응답 조립 지침, 클라이언트/서버 컨텍스트 고려), system_prompt_reduce(중복 없이 병합), chunk_count(15–20), max_tokens(4096–8192), citation_policy(always/inline), verbosity(adaptive/comprehensive)의 변이.
후처리 게놈 예시:
{
"verbosity": "adaptive",
"max_tokens": 4096,
"chunk_count": 15,
"system_prompt": "당신은 1C 전문가입니다. 답변할 때 항상 실행 컨텍스트(씬 클라이언트, 웹 클라이언트, 서버, 모바일 앱)를 고려하세요. 러시아어로 응답하세요. 출처를 인용하세요.",
"citation_policy": "always",
"system_prompt_reduce": "응답을 결합하고, 다른 실행 컨텍스트에 대한 권장 사항을 명확히 구분하세요. 중복을 제거하세요."
}
라우팅: classifier_prompt + query_type별 프로필(system_prompt, depth_budget, format).
캐시 정책: min_supportedness, require_sources, min_sources_count, block_if_warnings, confidence_key_points_min.
실제 대화가 생성기 컨텍스트에 추가되어 약점을 분석합니다.
평가 및 판단 지표
판단자는 4가지 지표(0–10)를 기반으로 평가합니다:
- 완전성: 쿼리 커버리지.
- 정확성: 청크와의 일치.
- 출처: 인용의 존재/품질.
- 간결성: 불필요한 내용 부재.
평균 점수가 승격을 결정합니다. Eval_judge_response는 원시 LLM 출력을 저장합니다.
핵심 포인트
- 계층 진화는 독립적: 후처리는 텍스트를 개선하고, 캐시 정책은 캐시 품질을 향상시킵니다.
- 수동 승인은 프로덕션에서의 퇴보를 방지합니다.
- 실제 캐시의 컨텍스트는 변이 관련성을 높입니다.
- SQLAlchemy 모델은 eval_results의 계단식 삭제를 지원합니다.
- 다중 도메인(1C + 재무 + 코딩)으로 확장 가능합니다.
확장 및 모범 사례
확장: 도메인별 계층 추가(재무: 참조 데이터를 고려한 system_prompt; 코딩: BSL 구문). 캐시의 10–20개 쿼리로 테스트. 승인을 위해 점수 >8.5를 모니터링. 과적합 방지—사이클당 변이 제한.
— Editorial Team
아직 댓글이 없습니다.