| """ | |
| 总结服务类:用户提问,搜索参考资料,将提问和参考资料提交给模型,让模型总结回复 | |
| """ | |
| from langchain_core.documents import Document | |
| from langchain_core.output_parsers import StrOutputParser | |
| from rag.vector_store import VectorStoreService | |
| from utils.prompt_loader import load_rag_prompts | |
| from langchain_core.prompts import PromptTemplate | |
| from model.factory import chat_model | |
| def print_prompt(prompt): | |
| print("="*20) | |
| print(prompt.to_string()) | |
| print("="*20) | |
| return prompt | |
| class RagSummarizeService(object): | |
| def __init__(self): | |
| self.vector_store = VectorStoreService() | |
| self.retriever = self.vector_store.get_rerank_retriever() | |
| self.prompt_text = load_rag_prompts() | |
| self.prompt_template = PromptTemplate.from_template(self.prompt_text) | |
| self.model = chat_model | |
| self.chain = self._init_chain() | |
| def _init_chain(self): | |
| chain = self.prompt_template | print_prompt | self.model | StrOutputParser() | |
| return chain | |
| def retriever_docs(self, query: str) -> list[Document]: | |
| return self.retriever.invoke(query) | |
| def rag_summarize(self, query: str) -> str: | |
| context_docs = self.retriever_docs(query) | |
| context = "" | |
| counter = 0 | |
| for doc in context_docs: | |
| counter += 1 | |
| context += f"【参考资料{counter}】: 参考资料:{doc.page_content} | 参考元数据:{doc.metadata}\n" | |
| return self.chain.invoke( | |
| { | |
| "input": query, | |
| "context": context, | |
| } | |
| ) | |
| if __name__ == '__main__': | |
| rag = RagSummarizeService() | |
| print(rag.rag_summarize("小户型适合哪些扫地机器人")) | |