feat: 增加宽松、严格提示词配置控制

main
old-tom 4 months ago
parent 285a708bb0
commit 4b05c58e68

@ -3,7 +3,7 @@
similarity_threshold = 0.93
# 模型供应商
model_form = 'siliconflow'
# 提示词类型(普通,较为宽松的场景SMART_ASSISTANT 强制使用工具SMART_ASSISTANT_STRICT)
# 提示词类型(较为宽松的场景SMART_ASSISTANT 强制使用工具SMART_ASSISTANT_STRICT)
prompt_type = 'SMART_ASSISTANT'
[siliconflow]

@ -24,7 +24,7 @@ llm_with_tools = llm.bind_tools(tools)
# 提示词模版
PROMPT_TEMPLATE = {
'SMART_ASSISTANT': {
'description': '普通版本提示词',
'description': '宽松版本提示词',
'template':
"""
你是智能助手,用户将会告诉你一条指令,你需要根据指令分析意图并完成任务

@ -19,6 +19,7 @@ from langgraph.graph.message import add_messages
from langgraph.prebuilt import tools_condition
from langchain_core.runnables import RunnableConfig
from datetime import datetime
from src.llmagent.llm_config import base_conf
def current_time():
@ -53,7 +54,8 @@ def chat(state: AgentState, config: RunnableConfig):
:return:
"""
# 设置系统提示词
system_prompt = SystemMessage(PROMPT_TEMPLATE['SMART_ASSISTANT']['template'].format(current_time=current_time()))
system_prompt = SystemMessage(
PROMPT_TEMPLATE[base_conf.prompt_type]['template'].format(current_time=current_time()))
return {"messages": [llm_with_tools.invoke([system_prompt] + state["messages"], config)]}
@ -68,4 +70,4 @@ graph_builder.add_edge("chat_llm", END)
graph_builder.add_conditional_edges("chat_llm", tools_condition)
graph_builder.add_edge("tools", "chat_llm")
# checkpointer 是检查点设置
graph = graph_builder.compile(name='smart_assistant', checkpointer=memory)
graph = graph_builder.compile(name='smart_assistant', checkpointer=memory)

@ -20,18 +20,20 @@ def play_video(camera_name: Annotated[str, "相机名称,例如南卡口1号
if camera_info:
if len(camera_info) > 1:
hit_camera_names = [x['carme_name'] for x in camera_info]
return f"【tool_back】找到以下相机,请选择一个:{hit_camera_names}"
return f"找到以下相机,请选择一个:{hit_camera_names}"
else:
# TODO 调用业务系统
return f"【tool_back】正在打开{camera_name},请等待操作完成"
return f"正在打开{camera_name},请等待操作完成"
else:
return "【tool_back】未找到该相机,请尝试其他名称"
return "未找到该相机,请尝试其他名称"
@tool("split_screen", description="切换分屏")
def split_screen(split_n: Annotated[
int, "要切换的分屏数量,整数并且大于0例如1分屏、2分屏。如果是中文,例如:壹、贰、参需要转为数字形式"]) -> str:
return f"【tool_back】正在切换到{split_n}分屏,请等待操作完成"
if split_n <= 0:
raise ValueError("分屏数量必须大于0")
return f"正在切换到{split_n}分屏,请等待操作完成"
@tool("play_video_record", description="播放、打开录像")
@ -40,19 +42,21 @@ def play_video_record(camera_name: Annotated[
start_time: Annotated[str, "录像开始时间,格式为yyyy-MM-dd hh:mm:ss例 2025-03-16 01:00:00"],
end_time: Annotated[str, "录像结束时间,格式为yyyy-MM-dd hh:mm:ss例 2025-03-16 02:09:31"]) -> str:
log.info('【function】play_video_record 输入 [{},{},{}]', camera_name, start_time, end_time)
return f"【tool_back】正在打开{camera_name}的录像,请等待操作完成"
return f"正在打开{camera_name}的录像,请等待操作完成"
@tool("switch_page", description="打开、跳转页面")
def switch_page(page_name: Annotated[str, "页面中文名称或者缩写,例:人员核查、系统日志、设备管理、首页"]) -> str:
log.info('【function】switch_page 输入 [{}]', page_name)
return f"【tool_back】正在打开{page_name},请等待操作完成"
return f"正在打开{page_name},请等待操作完成"
@tool("zoom_in", description="放大电子地图")
def zoom_in(level_n: Annotated[int, "放大等级,整数并且大于0小于5例如放大1级、放大2级"]) -> str:
if level_n <= 0:
raise ValueError("放大等级必须大于0")
log.info('【function】zoom_in 输入 [{}]', level_n)
return f"【tool_back】正在放大电子地图至{level_n}级,请等待操作完成"
return f"正在放大电子地图至{level_n}级,请等待操作完成"
@tool("view_flight_details", description="查询指定机场指定航班及时间的出入境人员明细")
@ -63,7 +67,7 @@ def view_flight_details(
flight_date: Annotated[str, "提取完整日期(年月日),自动补零至标准格式 yyyy-MM-dd, 例2025-03-16"],
ie_type: Annotated[str, "出入境类型,仅识别'入境''出境'两种类型"]) -> str:
log.info('【function】view_flight_details 输入 [{},{},{},{}]', airport_name, flight_code, flight_date, ie_type)
return f"【tool_back】{airport_name}航班号{flight_code}{flight_date}{ie_type}数据,共100人乘机,起飞准时,晚点降落"
return f"{airport_name}航班号{flight_code}{flight_date}{ie_type}数据,共100人乘机,起飞准时,晚点降落"
def query_camera_from_db(camera_name: str, top_n: int = 3) -> str:

Loading…
Cancel
Save