根据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。

相关推荐
whn19775 分钟前
如何避免以root用户执行达梦
数据库
brave_zhao11 分钟前
openEuler下安装tar包解压工具
linux·服务器·数据库
fu15935745682 小时前
【边缘计算实战】P1:从零搭建边云任务卸载仿真实验台(Python 可复现)
数据库·python·边缘计算
隔壁阿布都2 小时前
MySQL 间隙锁死锁问题处理
数据库·mysql
qiuziqiqi3 小时前
Shopify推送订单及异常状态错误码说明
数据库
三品PLM系统4 小时前
【无标题】
数据库·制造·cadence·plm
ITxiaobing20234 小时前
如何构建IP维度的假量排查流程:以AppsFlyer Protect360判假后的实战为例
网络·数据库
Gent_倪4 小时前
万字详解:数据库、数据仓库、数据湖、湖仓一体
数据库·数据仓库·spark
ywl4708120875 小时前
mysql 锁定读和非锁定读
数据库·mysql
流浪0015 小时前
MySQL数据库基础篇(三):MySQL 数据库库级操作全解:创建、字符集、管理与备份恢复实战
数据库·mysql