Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
L
LAE
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
文靖昊
LAE
Commits
5c16c92c
Commit
5c16c92c
authored
Nov 07, 2024
by
tinywell
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
rate agent 提示词修改
parent
8fbe5bc5
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
44 additions
and
89 deletions
+44
-89
web.py
src/controller/web.py
+9
-5
agent_rate.py
src/server/agent_rate.py
+35
-84
No files found.
src/controller/web.py
View file @
5c16c92c
...
...
@@ -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
=
'Qwen
2-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
)
res
=
agent
.
exec
(
prompt_args
=
{
"input"
:
chat_request
.
query
})
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
...
...
src/server/agent_rate.py
View file @
5c16c92c
...
...
@@ -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
=
[
"
\n
Observation"
]
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
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment