Commit 5c16c92c by tinywell

rate agent 提示词修改

parent 8fbe5bc5
...@@ -70,15 +70,12 @@ app.add_middleware( ...@@ -70,15 +70,12 @@ app.add_middleware(
base_llm = ChatOpenAI( base_llm = ChatOpenAI(
openai_api_key='xxxxxxxxxxxxx', openai_api_key='xxxxxxxxxxxxx',
openai_api_base='http://192.168.10.14:8000/v1', openai_api_base='http://192.168.10.14:8000/v1',
model_name='Qwen/Qwen2-7B-Instruct', model_name='Qwen2-7B',
verbose=True verbose=True
) )
# rag_query = RagQuery(base_llm=base_llm,_faiss_db=vecstore_faiss,_db=TxtDoc(k_db)) # rag_query = RagQuery(base_llm=base_llm,_faiss_db=vecstore_faiss,_db=TxtDoc(k_db))
@app.post('/api/login') @app.post('/api/login')
def login(phone_request: PhoneLoginRequest): def login(phone_request: PhoneLoginRequest):
phone = phone_request.phone phone = phone_request.phone
...@@ -258,7 +255,14 @@ def re_generate(chat_request: ReGenerateRequest, token: str = Header(None)): ...@@ -258,7 +255,14 @@ def re_generate(chat_request: ReGenerateRequest, token: str = Header(None)):
def rate(chat_request: GeoAgentRateRequest, token: str = Header(None)): def rate(chat_request: GeoAgentRateRequest, token: str = Header(None)):
agent = new_rate_agent(base_llm,verbose=True) agent = new_rate_agent(base_llm,verbose=True)
try:
res = agent.exec(prompt_args={"input": chat_request.query}) res = agent.exec(prompt_args={"input": chat_request.query})
except Exception as e:
print(f"处理请求失败, 错误信息: {str(e)},请重新提问")
return {
'code': 500,
'data': str(e)
}
return { return {
'code': 200, 'code': 200,
'data': res 'data': res
......
...@@ -18,33 +18,33 @@ from src.agent.tool_rate import RegionRateTool,RankingRateTool,NationalTrendTool ...@@ -18,33 +18,33 @@ from src.agent.tool_rate import RegionRateTool,RankingRateTool,NationalTrendTool
from src.agent.fake_data_rate import MockDBConnection from src.agent.fake_data_rate import MockDBConnection
from src.agent.tool_monitor import MonitorPointTool from src.agent.tool_monitor import MonitorPointTool
def create_rate_agent(llm, tools: List[BaseTool],prompt: PromptTemplate = None, # def create_rate_agent(llm, tools: List[BaseTool],prompt: PromptTemplate = None,
tools_renderer: ToolsRenderer = render_text_description_and_args, # tools_renderer: ToolsRenderer = render_text_description_and_args,
verbose: bool = False,**args): # verbose: bool = False,**args):
missing_vars = {"tools", "tool_names", "agent_scratchpad"}.difference( # missing_vars = {"tools", "tool_names", "agent_scratchpad"}.difference(
prompt.input_variables + list(prompt.partial_variables) # prompt.input_variables + list(prompt.partial_variables)
) # )
if missing_vars: # if missing_vars:
raise ValueError(f"Prompt missing required variables: {missing_vars}") # raise ValueError(f"Prompt missing required variables: {missing_vars}")
prompt = prompt.partial( # prompt = prompt.partial(
tools=tools_renderer(list(tools)), # tools=tools_renderer(list(tools)),
tool_names=", ".join([t.name for t in tools]), # tool_names=", ".join([t.name for t in tools]),
) # )
if stop_sequence: # if stop_sequence:
stop = ["\nObservation"] if stop_sequence is True else stop_sequence # stop = ["\nObservation"] if stop_sequence is True else stop_sequence
llm_with_stop = llm.bind(stop=stop) # llm_with_stop = llm.bind(stop=stop)
else: # else:
llm_with_stop = llm # llm_with_stop = llm
agent = ( # agent = (
RunnablePassthrough.assign( # RunnablePassthrough.assign(
agent_scratchpad=lambda x: format_log_to_str(x["intermediate_steps"]), # agent_scratchpad=lambda x: format_log_to_str(x["intermediate_steps"]),
) # )
| prompt # | prompt
| llm_with_stop # | llm_with_stop
) # )
return agent # return agent
class RateAgent: class RateAgent:
...@@ -66,30 +66,20 @@ class RateAgent: ...@@ -66,30 +66,20 @@ class RateAgent:
# 适配 structured_chat_agent 的 prompt # 适配 structured_chat_agent 的 prompt
ONLINE_RATE_SYSTEM_PROMPT = """你是一个专门处理设备在线率分析的AI助手。你可以通过调用专门的工具来分析和展示不同维度的在线率数据。 ONLINE_RATE_SYSTEM_PROMPT = """你是一个专门处理地质监测点信息及监测设备在线率分析的AI助手。你可以通过调用专门的工具来分析和展示不同维度的在线率数据。
你可以处理以下三类核心任务: 你可以处理以下三类核心任务:
1. 地区在线率分析 1. 地区在线率分析:分析指定地区(省/市/区县)在特定时间段的设备在线率
- 分析指定地区(省/市/区县)在特定时间段的设备在线率 2. 在线率排名分析:分析各省份或各厂商的在线率排名情况
- 必需参数:地区名称、开始时间、结束时间 3. 全国趋势分析:分析全国范围内在线率随时间的变化趋势
- 示例问题:"查询福建省2024年1月的设备在线率" 4. 监测点信息查询:查询指定地区的监测点信息
2. 在线率排名分析
- 分析各省份或各厂商的在线率排名情况
- type=1:查看各省份在线率排名
- type=2:查看各厂商在线率排名
- 示例问题:"显示所有省份的在线率排名" 或 "各设备厂商的在线率排名如何?"
3. 全国趋势分析
- 分析全国范围内在线率随时间的变化趋势
- 必需参数:开始时间、结束时间
- 示例问题:"展示2024年1月至2月的全国在线率趋势"
你需要: 你需要:
1. 理解用户意图,将用户问题映射到合适的分析类型 1. 理解用户意图,将用户问题映射到合适的分析类型
2. 确保必要参数完整,如果缺少参数要主动询问 2. 确保必要参数完整,如果缺少参数则提示用户缺少参数
3. 调用相应的分析工具获取数据 3. 如果参数完整,则调用相应的分析工具获取数据
4. 生成清晰的分析报告,包括数据解读和markdown 格式的数据表格 4. 生成清晰的分析报告,包括数据解读和markdown 格式的数据表格
5. 对异常情况(如数据缺失、参数错误)提供友好的解释和建议 5. 对异常情况(如数据缺失、参数错误)提供友好的解释和建议
...@@ -138,45 +128,6 @@ Action: ...@@ -138,45 +128,6 @@ Action:
""" """
PROMPT_AGENT_HUMAN = """{input}\n\n {agent_scratchpad}\n (请注意,无论如何都要以 JSON 对象回复。你的主要目标是帮助用户快速理解和分析设备在线率数据,提供准确、直观的分析结果)""" PROMPT_AGENT_HUMAN = """{input}\n\n {agent_scratchpad}\n (请注意,无论如何都要以 JSON 对象回复。你的主要目标是帮助用户快速理解和分析设备在线率数据,提供准确、直观的分析结果)"""
PROMPT_AGENT_SYS = """请尽量帮助人类并准确回答问题。您可以使用以下工具:
{tools}
使用 JSON 对象指定工具,提供一个 action 键(工具名称)和一个 action_input 键(工具输入), 以及 action_cache 键(有些工具要求缓存其返回的中间结果) 。
有效的 "action" 值: "Final Answer" 或 {tool_names}
每个 $JSON_BLOB 只提供一个操作,如下所示:
```
{{
"action": $TOOL_NAME,
"action_input": $INPUT,
}}
```
按照以下格式:
Question: 输入要回答的问题
Thought: 考虑前后步骤
Action:
```
$JSON_BLOB
```
Observation: 操作结果
...(重复 Thought/Action/Observation N 次)
Thought: 我知道如何回复
Action:
```
{{
"action": "Final Answer",
"action_input": "最终回复给人类",
"action_cache": {{所有要求保存中间结果的工具操作结果汇总}}
}}
```
开始!始终以有效的单个操作的 JSON 对象回复。如有必要,请使用工具,并在最后一步按照工具要求将工具操作结果汇总到最后一个 Action 中的 action_cache。如果你知道答案,请直接回复。
你的回复格式为 Action:```$JSON_BLOB```然后 Observation,并在必要时将 Observation 结果更新到下一个 action_cache 中。
"""
PROMPT_AGENT_SYS_VARS = [ "tool_names", "tools"] PROMPT_AGENT_SYS_VARS = [ "tool_names", "tools"]
class RateAgentV2: class RateAgentV2:
...@@ -189,7 +140,7 @@ class RateAgentV2: ...@@ -189,7 +140,7 @@ class RateAgentV2:
agent = create_structured_chat_agent(llm, tools, prompt) agent = create_structured_chat_agent(llm, tools, prompt)
self.agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=verbose) self.agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=verbose, return_intermediate_steps=True)
def exec(self, prompt_args: dict = {}, stream: bool = False): def exec(self, prompt_args: dict = {}, stream: bool = False):
return self.agent_executor.invoke(input=prompt_args) return self.agent_executor.invoke(input=prompt_args)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment