当前位置: 首页 > news >正文

根据context,设置动态提示词

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":
return('紧急处置,直接有公司老板对接,拨打95347。')
else:
return('你是屌丝。')

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")

result_normal = agent.invoke(
{"messages": [{"role": "user", "content": user_query}]},
context={"query_type": "vip"} # 标准模式
)

# 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已签收,但是物品坏了怎么办?


根据系统查询,订单 **ORD654321**(耳机Y1)当前的状态是 **"待付款"**,并不是已签收状态。可能有以下几种情况:

1. **订单还未完成支付**,所以尚未发货,更谈不上签收,建议您先核实一下订单信息。

2. 如果确认 **订单号有误**,请您提供正确的订单号,我重新查询。

另外,如果您的商品确实已经签收但出现了损坏问题,请您直接拨打我们的 **紧急客服专线:95347**,会有公司专门人员为您加急处理售后问题(换货/退款等)。

请问您的订单号是否输入有误?或者还有其他问题需要我帮忙吗?

Process finished with exit code 0

http://www.jsqmd.com/news/958512/

相关文章:

  • 2026泸州环保全屋定制厂家评测:泸州川渝全屋定制厂家/泸州成品家具/泸州整家全屋定制/泸州新中式全屋定制/泸州酒店办公家具定制/选择指南 - 优质品牌商家
  • 告别代码异味!用PMD插件在IntelliJ IDEA里一键扫描你的Java项目(附自定义规则实战)
  • Java 枚举 Enum 三大实战场景:状态定义、策略模式、接口统一返回码
  • OpenCore Legacy Patcher:让旧款Mac重获新生的终极完整教程
  • 企业服务器数据备份与恢复完整方案(运维兜底核心)
  • JVM 内存模型深度解析:从原理到实战调优
  • 在Apple Silicon Mac上部署原生ARM64 Android模拟器的技术实现与性能分析
  • 从Modbus到Profibus:聊聊RS-485/422这些老伙计在主流工业协议里的那些事儿
  • 推荐靠谱的房屋装修公司 - myqiye
  • 3个专业技巧让你掌握MegSpot:跨平台视觉分析终极指南
  • 智能汽车AI工具整合不是选型问题,而是时间窗口问题:2024Q3起ECU算力认证新规倒逼重构的4大技术支点
  • Node.js 架构演进大师:从事件循环到现代服务端范式
  • 2026乐山门窗厂技术实测:宜宾哪家门窗厂好/宜宾哪家门窗厂性价比高/宜宾哪家门窗好看/宜宾哪里有门窗厂/宜宾定制门窗/选择指南 - 优质品牌商家
  • AI智能体开发从入门到落地全攻略核心框架选型常见坑点规避及实操干货分享
  • DTD 属性:定义文档类型与验证结构的重要元素
  • 【计算机毕业设计案例】基于springboot+微信小程序的博物馆文创系统的设计与实现(程序+文档+讲解+定制)
  • 3分钟搞定:用BetterJoy让Switch控制器在PC上完美运行
  • 别再傻傻分不清!一张图搞懂内存、硬盘、缓存(RAM/ROM/Cache)在电脑里到底怎么干活
  • 重新定义数字签名:vue-esign组件如何颠覆传统电子签名体验
  • Matlab粒子群算法自动优化Sugeno模糊控制器的隶属函数参数
  • 电脑多版本Python安装+切换全方案(分Windows / Mac/Linux,3种常用方法)
  • 电动伸缩门安装哪家好?红门机电,服务苏皖! - mypinpai
  • 大湾区哪家EMBA机构比较好?5大高含金量机构优选推荐 - 品牌测评鉴赏家
  • 2026年EB-5移民中介排名及服务能力分析 - 品牌排行榜
  • 2026年静安玄关整理收纳费用多少 - mypinpai
  • 南京Deepseek关键词优化服务商:AI搜索流量破局秘籍大公开
  • 2026年C语言就业环境好吗?现在哪个编程语言前景好?
  • Linux 解压命令速查表
  • CaptfEncoder V3:一个网络安全工程师的瑞士军刀是如何炼成的?
  • 如何用SPT-AKI Profile Editor成为《逃离塔科夫》离线版存档管理大师