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

相关推荐
SelectDB6 小时前
Apache Doris x Fluss:面向湖流一体的统一查询与分析
大数据·数据库·数据分析
云贝贝贝6 小时前
Oracle 备份恢复实战:RMAN 备份、恢复与误删闪回
数据库
java1234_小锋6 小时前
【技术专题】Mysql8 数据库 - Mysql8 触发器
数据库·mysql·mysql8
要吃这碗饭6 小时前
AI 智能体如何通过 auth.md 注册 Bright Data 账号
数据库·人工智能·php
薛晓刚6 小时前
Oracle ADG 备库归档丢了怎么办?RMAN 增量前滚实战
数据库·oracle
Highcharts.js6 小时前
用Highcharts开发动态主从图表|双图联动的时间序列图表示例
javascript·数据库·信息可视化·highcharts·图表开发·动态图表
阿俊-全栈开发6 小时前
LikeShop 版本升级与备份:从旧版平滑迁移的完整步骤
jvm·数据库·oracle·开源·likeshop·likeshop开源商城
姜鱼问生7 小时前
docker exec 排查容器问题:从日志到进程
运维·网络·数据库·docker·容器
狗凯之家源码网8 小时前
AI 步数修改提交系统源码应用场景与落地指南
android·数据库·人工智能·运动步数
穆梓兰煊8 小时前
AI供应链安全不再只是包安全,还涉及模型与数据
前端·数据库