From 6dba4142d56536c8ece92c6b91f850247c2be4fd Mon Sep 17 00:00:00 2001 From: chentianrui Date: Tue, 24 Jun 2025 10:19:39 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=20src/prompt=5Fmanager.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/prompt_manager.py | 111 ------------------------------------------ 1 file changed, 111 deletions(-) delete mode 100644 src/prompt_manager.py diff --git a/src/prompt_manager.py b/src/prompt_manager.py deleted file mode 100644 index 17e395e..0000000 --- a/src/prompt_manager.py +++ /dev/null @@ -1,111 +0,0 @@ -# src/prompt_manager.py - -from dataclasses import dataclass -from langchain.prompts import ChatPromptTemplate -from langchain.schema import SystemMessage, HumanMessage - -@dataclass -class CodeExecutorPrompts: - understand_prompt: ChatPromptTemplate - code_gen_prompt: ChatPromptTemplate - code_fix_prompt: ChatPromptTemplate - rewrite_prompt_template: ChatPromptTemplate - cypher_conversion_prompt: ChatPromptTemplate # 新增Cypher转换提示模板 - -class PromptManager: - def __init__(self): - self.prompts = self._init_prompts() - - def _init_prompts(self) -> CodeExecutorPrompts: - understand_prompt = ChatPromptTemplate.from_template( -""" -你是一名电力造价业务专家,请基于以下工程文件业务结构,将用户自然语言问题改写成专业查询语句: - -**工程文件业务结构**: -{business_structure} - -**改写规则**: -1. **定位目标对象**:从业务结构中识别核心对象(如 `ProjectDivisionTree`→项目划分树、`FeeScheduleItem`→费用表)。 -2. **提取条件**:从用户输入中解析关键条件(如名称、量、类型),用【】标注变量。 -3. **构建专业语句**:格式为:`在[目标对象]中查找【条件】的项。` - - 使用业务术语(如“项目划分项”而非“项目”)。 - - 条件需明确属性(如【名称】、【量】、【类型】)。 -4. **精确映射结构**:若用户查询层级(如“叶节点”),需在条件中体现。 - -**用户输入**:{user_input} -**改写输出**:(仅输出改写后的语句) -""") - - code_gen_prompt = ChatPromptTemplate.from_template(""" -你是一个专业的Python工程师。我会给你一个用户问题,你需要将其转换为对应的Python代码 - -用户问题: -{user_request} - -上下文信息: -{context} - -工程数据访问库: -{bowei_api_docs} - -# 工作流程 -1. 从用户问题中提取关键信息(节点路径、节点类型、节点名称等) -2. 根据"用户问题"和"上下文信息"选择最匹配的"工程数据访问库"中的方法 -3. 生成可直接执行的Python代码 - -# 代码模板(必须严格遵循) -def neo4j_find_function(): - project = ProjectBuilder.build() - status, data, error, helper_info = project.[SELECTED_METHOD]([PARAMETERS]) - return status, data, error, helper_info - -# 执行规则 -- 参数必须从用户问题或上下文信息中提取 -- 必须确保生成的代码可以直接执行 -- 禁止修改代码模板结构 -- 禁止添加任何注释或解释 - -# 输出格式 -def neo4j_find_function(): - project = ProjectBuilder.build() - status, data, error, helper_info = project.[SELECTED_METHOD]([PARAMETERS]) - return status, data, error, helper_info -""") - - code_fix_prompt = ChatPromptTemplate.from_messages([ - SystemMessage(content="你是一个专业的Python开发者。下面是之前生成的代码和执行时出现的错误,请修复代码中的错误,确保代码语法正确且能完成访问博微造价工程数据的任务。只输出修复后的Python代码,不要添加解释。"), - HumanMessage(content="原始代码:\n{code}\n\n错误信息:\n{error}\n") - ]) - - rewrite_prompt_template = ChatPromptTemplate.from_template( - """你是一个专业的工程业务助理,结合以下工程业务结构信息和相关知识: -{business_structure} - -相关知识内容: -{context} - -请根据用户的问题,结合上述信息,理解并改写成一个针对工程数据的访问请求(简洁明了的描述)。 -请只输出改写后的访问请求文本,不要多余解释。""" - ) - - cypher_conversion_prompt = ChatPromptTemplate.from_template( - """ -你是一个Neo4j专家。请将用户的自然语言问题转换成一个有效的Cypher查询语句,查询知识图谱中相关信息。 -只返回Cypher语句,不要任何解释,最多返回5条。 - -业务结构信息: -{business_structure} - -用户问题: -{user_input} -Cypher查询语句: -""" - ) - - return CodeExecutorPrompts( - understand_prompt=understand_prompt, - code_gen_prompt=code_gen_prompt, - code_fix_prompt=code_fix_prompt, - rewrite_prompt_template=rewrite_prompt_template, - cypher_conversion_prompt=cypher_conversion_prompt, - )