优化意图识别示例,更新文档相关性判断逻辑,增强Excel数据验证功能,改进日志记录,调整参数以提升代码可读性和灵活性。
This commit is contained in:
@@ -28,7 +28,7 @@ from rag2_0.tool.ModelTool import OpenAiLLM
|
||||
load_dotenv()
|
||||
|
||||
# 示例查询
|
||||
examples_query = """主网电力建设计价通软件, 35kV的软件 土质比例不能一起设置吗"""
|
||||
examples_query = """ PE2211PK0801是什么软件"""
|
||||
conversation_context=""
|
||||
chat_history=[
|
||||
{
|
||||
@@ -100,27 +100,23 @@ class QueryRewriteProcessor:
|
||||
"relevance_score": 0.0
|
||||
}
|
||||
|
||||
# 构建文档内容
|
||||
doc_contents = []
|
||||
for i, doc in enumerate(retrieved_doc[:3]): # 只取前3个文档进行判断
|
||||
content = doc.get("content", "")
|
||||
title = doc.get("title", "")
|
||||
doc_contents.append(f"文档{i+1}标题: {title}\n文档{i+1}内容: {content}")
|
||||
|
||||
doc_text = "\n\n".join(doc_contents)
|
||||
doc_text_list = json.dumps(retrieved_doc, ensure_ascii=False, indent=2)
|
||||
class TempModel(BaseModel):
|
||||
is_relevant: bool = Field(description="是否与用户提问相关")
|
||||
can_solve_problem: bool = Field(description="是否能解决用户问题")
|
||||
relevance_score: int = Field(description="相关性评分,0-100分")
|
||||
explanation: str = Field(description="解释各个文档与提问的相关性或不相关性")
|
||||
explanation: str = Field(description="解释文档是否能解决(回答)提问")
|
||||
|
||||
parser = PydanticOutputParser(pydantic_object=TempModel)
|
||||
class most_relevant_document(BaseModel):
|
||||
most_relevant_document: TempModel = Field(description="最相关的文档的判断结果")
|
||||
|
||||
parser = PydanticOutputParser(pydantic_object=most_relevant_document)
|
||||
# 构建提示词
|
||||
prompt = f"""请判断以下检索文档是否与用户提问相关,并给出相关性评分(0-100分)。
|
||||
prompt = f"""请判断以下检索文档列表中是否与用户提问相关,能够解决用户的问题,并给出相关性评分(0-100分)。输出最相关的文档的判断结果。
|
||||
|
||||
用户提问: {query}
|
||||
|
||||
检索文档:
|
||||
{doc_text}
|
||||
检索文档列表:
|
||||
{doc_text_list}
|
||||
|
||||
请按照以下JSON格式返回结果:
|
||||
{parser.get_format_instructions()}
|
||||
@@ -131,10 +127,10 @@ class QueryRewriteProcessor:
|
||||
llm = OpenAiLLM(api_key=self.api_key, base_url=self.base_url, model="deepseek-ai/DeepSeek-R1", response_format={"type": "json_object"})
|
||||
response = llm.invoke(prompt)
|
||||
|
||||
result = parser.parse(response.content)
|
||||
result = parser.parse(response.content).most_relevant_document
|
||||
|
||||
return {
|
||||
"is_relevant": result.is_relevant,
|
||||
"is_relevant": result.can_solve_problem,
|
||||
"relevance_score": result.relevance_score,
|
||||
"explanation": result.explanation
|
||||
}
|
||||
@@ -418,9 +414,6 @@ def main():
|
||||
# 在调试模式下使用完整的参数
|
||||
print(json.dumps(processor.process_query(
|
||||
query,
|
||||
conversation_context=conversation_context,
|
||||
chat_history=chat_history,
|
||||
previous_slots=previous_slots,
|
||||
enable_retrieval=enable_retrieval
|
||||
), ensure_ascii=False, indent=2))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user