Implement Phase 12 feedback, Phase 13 Semantic Chunker, Phase 13-B Reranker, Bug 5 thinking fix

- Phase 12: FeedbackRepository + td_feedback 테이블, Gradio 👍/👎 이벤트, run_id 추적, LangSmith create_feedback() 연동
- Phase 13: 커스텀 _SemanticSplitter 제거 → langchain_experimental.SemanticChunker 교체, buffer_size/threshold_type 환경변수 적용
- Phase 13-B: RerankService (Cross-Encoder), RetrieverService.search()에 reranker 통합, tools.py as_retriever() → search() 전환
- Bug 5: mlx_chat_model enable_thinking 런타임 오버라이드, agent_service stream_mode=["messages","custom"] 이중 스트림, thinking 토큰 custom 이벤트로 emit
- ROADMAP: LLM 모델명 8B 반영, RAG에 Reranker 추가, 추천 진행 순서 갱신

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
sal
2026-05-29 17:41:36 +09:00
parent e1d7e9cc21
commit 145b0cc96f
13 changed files with 469 additions and 143 deletions
+9 -1
View File
@@ -13,6 +13,8 @@ class RetrieverService:
qdrant_url: str,
collection_name: str,
top_k: int,
reranker=None,
rerank_fetch_k: int = 10,
):
self._client = QdrantClient(url=qdrant_url)
self._collection_name = collection_name
@@ -22,12 +24,18 @@ class RetrieverService:
embedding=embeddings,
)
self._top_k = top_k
self._reranker = reranker
self._rerank_fetch_k = rerank_fetch_k
def as_retriever(self):
return self._store.as_retriever(search_kwargs={"k": self._top_k})
def search(self, query: str) -> list[Document]:
return self._store.similarity_search(query, k=self._top_k)
fetch_k = self._rerank_fetch_k if self._reranker else self._top_k
docs = self._store.similarity_search(query, k=fetch_k)
if self._reranker:
docs = self._reranker.rerank(query, docs, top_k=self._top_k)
return docs
def list_documents(self) -> list[str]:
"""Qdrant에 저장된 고유 파일 경로 목록을 반환한다."""