35 lines
1.4 KiB
Python
35 lines
1.4 KiB
Python
import json
|
||
from typing import List
|
||
|
||
from langchain_huggingface import HuggingFaceEndpointEmbeddings
|
||
|
||
from app.chat_qa_query.query_context import QueryQAContext
|
||
from app.chat_qa_query.query_graph import qa_graph
|
||
from app.chat_qa_query.query_qa_state import QueryQAState
|
||
from app.core.log import logger
|
||
from app.repository.archive_messages_repository import ArchiveMessagesRepository
|
||
from app.repository.milvus.message_qa_repository import QARepository
|
||
|
||
|
||
class QueryQAService:
|
||
def __init__(self, archive_mysql_repository: ArchiveMessagesRepository,
|
||
qa_milvus_repository : QARepository):
|
||
self.archive_mysql_repository = archive_mysql_repository
|
||
self.qa_milvus_repository = qa_milvus_repository
|
||
|
||
async def query(self, query:str, history:List[str]=[])-> str:
|
||
state: QueryQAState = QueryQAState(original_query=query, history=history)
|
||
|
||
context = QueryQAContext(archive_mysql_repository=self.archive_mysql_repository,qa_milvus_repository=self.qa_milvus_repository)
|
||
try:
|
||
res= await qa_graph.ainvoke(input=state, context=context, stream_mode="custom")
|
||
logger.info(f"QA服务结果:{res}")
|
||
|
||
if isinstance(res, list) and len(res) == 1 and isinstance(res[0], list):
|
||
res = res[0]
|
||
|
||
return res
|
||
|
||
except Exception as e:
|
||
logger.info(f"QA服务错误:{e}")
|
||
return "" |