Commit 5c16c92c by tinywell

rate agent 提示词修改

parent 8fbe5bc5
......@@ -70,15 +70,12 @@ app.add_middleware(
base_llm = ChatOpenAI(
openai_api_key='xxxxxxxxxxxxx',
openai_api_base='http://192.168.10.14:8000/v1',
model_name='Qwen/Qwen2-7B-Instruct',
model_name='Qwen2-7B',
verbose=True
)
# rag_query = RagQuery(base_llm=base_llm,_faiss_db=vecstore_faiss,_db=TxtDoc(k_db))
@app.post('/api/login')
def login(phone_request: PhoneLoginRequest):
phone = phone_request.phone
......@@ -258,7 +255,14 @@ def re_generate(chat_request: ReGenerateRequest, token: str = Header(None)):
def rate(chat_request: GeoAgentRateRequest, token: str = Header(None)):
agent = new_rate_agent(base_llm,verbose=True)
try:
res = agent.exec(prompt_args={"input": chat_request.query})
except Exception as e:
print(f"处理请求失败, 错误信息: {str(e)},请重新提问")
return {
'code': 500,
'data': str(e)
}
return {
'code': 200,
'data': res
......
......@@ -18,33 +18,33 @@ from src.agent.tool_rate import RegionRateTool,RankingRateTool,NationalTrendTool
from src.agent.fake_data_rate import MockDBConnection
from src.agent.tool_monitor import MonitorPointTool
def create_rate_agent(llm, tools: List[BaseTool],prompt: PromptTemplate = None,
tools_renderer: ToolsRenderer = render_text_description_and_args,
verbose: bool = False,**args):
missing_vars = {"tools", "tool_names", "agent_scratchpad"}.difference(
prompt.input_variables + list(prompt.partial_variables)
)
if missing_vars:
raise ValueError(f"Prompt missing required variables: {missing_vars}")
prompt = prompt.partial(
tools=tools_renderer(list(tools)),
tool_names=", ".join([t.name for t in tools]),
)
if stop_sequence:
stop = ["\nObservation"] if stop_sequence is True else stop_sequence
llm_with_stop = llm.bind(stop=stop)
else:
llm_with_stop = llm
agent = (
RunnablePassthrough.assign(
agent_scratchpad=lambda x: format_log_to_str(x["intermediate_steps"]),
)
| prompt
| llm_with_stop
)
return agent
# def create_rate_agent(llm, tools: List[BaseTool],prompt: PromptTemplate = None,
# tools_renderer: ToolsRenderer = render_text_description_and_args,
# verbose: bool = False,**args):
# missing_vars = {"tools", "tool_names", "agent_scratchpad"}.difference(
# prompt.input_variables + list(prompt.partial_variables)
# )
# if missing_vars:
# raise ValueError(f"Prompt missing required variables: {missing_vars}")
# prompt = prompt.partial(
# tools=tools_renderer(list(tools)),
# tool_names=", ".join([t.name for t in tools]),
# )
# if stop_sequence:
# stop = ["\nObservation"] if stop_sequence is True else stop_sequence
# llm_with_stop = llm.bind(stop=stop)
# else:
# llm_with_stop = llm
# agent = (
# RunnablePassthrough.assign(
# agent_scratchpad=lambda x: format_log_to_str(x["intermediate_steps"]),
# )
# | prompt
# | llm_with_stop
# )
# return agent
class RateAgent:
......@@ -66,30 +66,20 @@ class RateAgent:
# 适配 structured_chat_agent 的 prompt
ONLINE_RATE_SYSTEM_PROMPT = """你是一个专门处理设备在线率分析的AI助手。你可以通过调用专门的工具来分析和展示不同维度的在线率数据。
ONLINE_RATE_SYSTEM_PROMPT = """你是一个专门处理地质监测点信息及监测设备在线率分析的AI助手。你可以通过调用专门的工具来分析和展示不同维度的在线率数据。
你可以处理以下三类核心任务:
1. 地区在线率分析
- 分析指定地区(省/市/区县)在特定时间段的设备在线率
- 必需参数:地区名称、开始时间、结束时间
- 示例问题:"查询福建省2024年1月的设备在线率"
2. 在线率排名分析
- 分析各省份或各厂商的在线率排名情况
- type=1:查看各省份在线率排名
- type=2:查看各厂商在线率排名
- 示例问题:"显示所有省份的在线率排名" 或 "各设备厂商的在线率排名如何?"
1. 地区在线率分析:分析指定地区(省/市/区县)在特定时间段的设备在线率
2. 在线率排名分析:分析各省份或各厂商的在线率排名情况
3. 全国趋势分析:分析全国范围内在线率随时间的变化趋势
4. 监测点信息查询:查询指定地区的监测点信息
3. 全国趋势分析
- 分析全国范围内在线率随时间的变化趋势
- 必需参数:开始时间、结束时间
- 示例问题:"展示2024年1月至2月的全国在线率趋势"
你需要:
1. 理解用户意图,将用户问题映射到合适的分析类型
2. 确保必要参数完整,如果缺少参数要主动询问
3. 调用相应的分析工具获取数据
2. 确保必要参数完整,如果缺少参数则提示用户缺少参数
3. 如果参数完整,则调用相应的分析工具获取数据
4. 生成清晰的分析报告,包括数据解读和markdown 格式的数据表格
5. 对异常情况(如数据缺失、参数错误)提供友好的解释和建议
......@@ -138,45 +128,6 @@ Action:
"""
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"]
class RateAgentV2:
......@@ -189,7 +140,7 @@ class RateAgentV2:
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):
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