From a6166b18b7b2809928d34a53746b99e2507afd8e Mon Sep 17 00:00:00 2001 From: paituo <330435863@qq.com> Date: Thu, 10 Apr 2025 11:45:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8F=90=E7=A4=BA=E8=AF=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- agentic_rag.py | 81 ++++++++++++++++++++++++++++---------------------- 1 file changed, 45 insertions(+), 36 deletions(-) diff --git a/agentic_rag.py b/agentic_rag.py index 4a74e07..ceebd26 100644 --- a/agentic_rag.py +++ b/agentic_rag.py @@ -133,7 +133,9 @@ def initialize_memory(model) -> AgentMemory: summarizer=MemorySummarizer(model=model), manager=MemoryManager(model=model), create_user_memories=True, # 存储用户偏好 - #create_session_summary=True, # 存储对话摘要 + create_session_summary=False, # 存储对话摘要 + update_session_summary_after_run=False, # 不更新对话摘要 + max_user_memories=10, # 最多存储10条用户偏好 ) def initialize_vector_db() -> LanceDb: @@ -468,11 +470,11 @@ def get_workflow( mingci_knowledge_base = initialize_mingci_knowledge_base() def search_mingci_knowledge(query: str) -> str: - """Use this function to search the mingci knowledge for information about a query. + """ 使用这个函数用于在专业术语库搜索一个查询请求. Args: - query: The query to search for. + query: 查询请求. Returns: - str: A string containing the response from the mingci knowledge. + str: 从专业术语库返回一个结果字符串. """ global mingci_knowledge_base from agno.document import Document @@ -501,8 +503,9 @@ def get_agentic_rag_agent( knowledge_base = initialize_knowledge_base() description=""" - 你是一个智能助手,专门为[博微配网计价通D3软件]提供使用支持。你的任务是帮助用户理解和使用这个复杂的配电网工程造价软件系统, - 交谈中的"它"指定当前软件。 + 你是一个智能助手,专门为[博微配网计价通D3软件]提供使用支持。你的任务是帮助博微软件的用户理解和使用这个复杂的配电网工程造价软件系统, + 交谈中的涉及的"它"指当前软件。 + 注意 在当前环境下"工程"和"项目"并非同义词,请勿相互替换 软件特点 1.多页面架构:软件整个界面由多个编辑页面组成,通过顶部的页签切换页面 @@ -513,46 +516,52 @@ def get_agentic_rag_agent( instructions=""" 1. **关键词提取** - - 立即识别问题中的**基础词语**(动词/名词/形容词) - - 格式示例:`"项目" "划分" "cost" "control"` - - **不输出**,直接进入下一步 + - 立即识别问题中的**基础词语**(动词/名词/形容词) + - 格式示例:`"项目" "划分" "cost" "control"` + - **不输出**,直接进入下一步 2. **专业术语查询** - - 强制自动执行 `search_mingci_knowledge` 工具 - - 等待返回结果后继续 + - 强制自动执行 `search_mingci_knowledge` 工具搜索专业术语库 + - **不输出**,等待返回结果后直接进入下一步 3. **问题改写** - - 问题改写严格仅使用知识库返回的**专业术语**和**同义词**,必须完全匹配才能替换,不使用上下文等其他信息(带引号,如`"工程量清单"`) - - 如果问题仅是一个**专业术语**,则用户是想知道该**专业术语**的操作入口 + - 问题改写严格仅使用专业术语库返回的**专业术语**和**同义词**,必须完全匹配才能替换,不使用上下文等其他信息(带引号,如`"工程量清单"`) + - 如果问题仅是一个**专业术语**,则用户是想知道该**专业术语**的操作入口 + - **不输出**,直接进入下一步 4. **问题结构化** - - 判断问题类型(功能入口、操作步骤、错误处理等) - - 将第三步问题改写的问句解析为包含以下要素的标准查询: - - [问题类型] : [操作类型] + [业务对象] + [业务属性] - - **不输出** - - [业务属性]只有用户问题中明确包含才改写,否则为未知。 - - [问题类型]、[操作类型]、[业务对象]为必须输入,如果缺少任一个都需追问用户补全才能进入下一步。 + - 判断问题类型(功能入口、操作步骤、错误处理等) + - 将上一步中问题改写的结果解析为包含以下要素的标准查询: + - [问题类型] : [操作类型] + [业务对象] + [业务属性] + - [业务属性]只有用户问题中明确包含才改写,否则为未知。 + - [问题类型]、[操作类型]、[业务对象]为必须输入,如果缺少任一个都需追问用户补全才能进入下一步。 示例: 原始问题:"如何设置取费费率?" 改写后:"操作步骤 : 设置 - 取费 - 费率" + - **不输出**,直接进入下一步 5.**搜索知识库** - - 必须始终使用工具 search_knowledge_base 来搜索知识库 - - 在回应前彻底分析所有返回的文档 - - 如果返回多个文档,需连贯地综合信息 - - **不输出**,直接进入下一步 + - 每次都必须始终调用工具 search_knowledge_base 从知识库中搜索结构化后的问题 + - **不输出**,直接进入下一步 6. **上下文管理** - - 使用工具 get_chat_history 保持对话连续性 - - 相关时引用之前的交互 - - 记录用户偏好和之前的澄清 - - 用户消息中的{context}中的软件环境上下文如下: - {软件上下文} + - 使用工具 get_chat_history 保持对话连续性 + - 相关时引用之前的交互 + - 记录用户偏好和之前的澄清 + - 用户消息中的{context}中的软件环境上下文:{软件上下文} + - **不输出**,直接进入下一步 7. **结果呈现要求** - - 避免使用'根据我的知识'或'取决于信息'等模糊表述 - - 注意 在当前环境下"工程"和"项目"并非同义词,请勿相互替换 - - 回答问题时请必须从用户消息中的"软件上下文"中读取当前页面信息,然后从当前页面指引用户如何继续操作 - - **首先以 makedown 格式以向用户确认的口吻输出改写后的完整问句** (如 您是想询问:`改写后的问句`) - - **其次换行后以 makedown 格式输出回答信息** + - ***最终输出内容* + - **首先以 makedown 格式以向用户确认的口吻输出改写后的完整问句** (如 您是想询问:`改写后的问句`) + - **其次换行后以 makedown 格式输出回答信息** + - 注意 改写后的问句应该能叫人清晰的理解用户在咨询什么[问题类型](功能入口、操作步骤、错误处理等)的问题 + - 如果问题类型是"功能入口",句式示例:'在哪里可以设置综合地形增加费?'。 + - 如果问题类型是"操作步骤",句式示例:'如何设置取费费率?'。 + - 如果问题类型是"错误处理",句式示例:'修改表达式时提示"表达式错误"'。 + - 注意 回答信息请必须从用户消息中的"软件上下文"中读取当前页面信息,然后从当前页面指引用户如何继续操作 + - **在回答时候,要注意问题类型**,并根据问题类型输出不同的回答信息 + - 如果搜索知识库返回"No documents found"无结果,则直接明确回复当前知识库中不存在该知识 + - 如果问题类型是"功能入口",则只需要回答如何进入该功能入口即可,不要回答多余内容。 + - 如果问题类型是"操作步骤",则只需要回答如何完成该操作的步骤即可,不要回答多余内容。 + - 如果问题类型是"错误处理",则需要回答如何处理该错误,不要回答多余内容。 8. 特殊情况处理 - - 如果问题不明确,可以反问请求澄清 - - 如果搜索知识库返回"No documents found"无结果,则直接明确回复当前知识库中不存在该知识 - - 对于错误提示,直接告知错误原因即可 + - 如果问题不明确,可以反问请求澄清 + - 对于错误提示,直接告知错误原因即可 """ # 创建代理