根据context={“query_type“: “vip“} 进行选择

from langchain.agents import create_agent

from langchain.agents.middleware import dynamic_prompt, ModelRequest

from langchain_core.tools import BaseTool, tool

from typing import TypedDict

import json

from init_llm import deepseek_llm

工具1:模拟查询订单信息

@tool

def query_order_info(order_id: str) -> str:

"""根据订单ID查询订单的详细信息,包括状态、商品列表和创建时间。"""

模拟数据库查询结果

order_database = {

"ORD123456": {"status": "已发货", "items": "手机X1", "create_time": "2025-01-15"},

"ORD654321": {"status": "待付款", "items": "耳机Y1", "create_time": "2025-01-18"}

}

order_data = order_database.get(order_id)

if order_data:

return json.dumps(order_data, ensure_ascii=False)

else:

return f"错误:未找到订单 {order_id}。"

工具2:模拟检索常见问题解答

@tool

def search_faq(keyword: str) -> str:

"""根据关键词从知识库中检索相关的政策条款或解决方案。"""

模拟FAQ知识库

faq_knowledge_base = {

"退货": "支持7天无理由退货,商品需完好且包装齐全。",

"保修": "电子产品享受1年免费保修服务。",

"发货": "下单后48小时内发货,偏远地区可能延迟。"

}

简单关键词匹配

for topic, answer in faq_knowledge_base.items():

if topic in keyword:

return answer

return f"未找到与'{keyword}'直接相关的政策,请尝试其他关键词或联系人工客服。"

定义运行时上下文的数据结构

class AgentContext(TypedDict):

query_type: str # 用于动态判断问题类型,例如 'normal'(普通用户) 或 'vip'(vip用户)

动态提示词中间件:根据问题类型调整Agent的"角色"和回答策略

@dynamic_prompt

def dynamic_support_prompt(request: ModelRequest) -> str:

"""

根据 query_type 生成不同的系统提示词。

"""

print("request:", request)

query_type = request.runtime.context.get("query_type", "normal")

base_instruction = "你是一名专业的电商客服助手。请根据工具查询结果,准确、清晰地回答用户问题。"

if query_type == "vip":

针对复杂或需要升级处理的问题

print('11111111111111111111111。')

else:

print('22222222222222222222222')

if name == "main":

"""创建客服助手Agent"""

创建带有动态提示词中间件的Agent

agent = create_agent(

model=deepseek_llm,

tools=query_order_info, search_faq, # 工具列表

middleware=dynamic_support_prompt, # 挂载动态提示词中间件

context_schema=AgentContext # 关联上下文schema

)

"""演示动态提示词效果"""

user_query = "我的订单ORD123456还没收到,包装破损了怎么办?"

user_query = "我的订单ORD654321已签收,但是物品坏了怎么办?"

print(f"用户问题:{user_query}\n")

print("场景一:vip客服模式 (query_type: 'normal')")

result_normal = agent.invoke(

{"messages": {"role": "user", "content": user_query}},

c # 标准模式

)

print("result_normal:", result_normal)

提取Agent的最后一条回复

final_response_normal = result_normal"messages"-1.content

print(final_response_normal)

D:\Users\msi\miniconda3\python.exe D:\nanobot-main\langchain-demo\bg16.py

用户问题:我的订单ORD654321已签收,但是物品坏了怎么办?

场景一:vip客服模式 (query_type: 'normal')

11111111111111111111111。

相关推荐
计科土狗25 分钟前
GESP六级专题之类与对象
java·前端·数据库
麦聪聊数据40 分钟前
数据治理 ROI(下):算清投入产出比,小切口落地快速验证价值
数据库
dyxal1 小时前
SSH本地端口转发完全解析:像“挖掘隧道”一样安全访问远程数据库
数据库·安全·ssh
OceanBase数据库官方博客1 小时前
让 DRP全域数据智能流转OceanBase AI 数据库支撑央国企落地穿透式监
数据库·人工智能·oceanbase
笃行3502 小时前
零代码完成MongoDB迁移,KingbaseES是怎么做到的
数据库
Leighteen2 小时前
时区的坑:为什么存进数据库的时间,差了 8 小时
数据库
陈天伟教授2 小时前
TraeWork初体验-生成研究报告
大数据·数据库·人工智能
大黄说说2 小时前
SQL Server 执行计划怎么看?快速定位 SQL 慢的根源
java·linux·数据库
专注API从业者2 小时前
告别人工盯品!Open Claw 搭建京东商品全自动监控与数据分析系统(附完整可运行代码)
大数据·数据库·数据分析
molaoye4 小时前
win10下安装MySQL 8.0.*实录
数据库·mysql