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

相关推荐
hey you~2 分钟前
云呼叫中心坐席自动分配实战:ACD 策略、Redis+Lua 实现与排查清单
数据库·redis·lua·云呼叫中心·acd·坐席分配·坐席状态机
夜雪一千12 分钟前
MySQL 数据字典如何获得
数据库·mysql
系统集成-鹰翔16 分钟前
ERP推单数据库怎么备份:SQLite WAL模式下只复制db文件为什么可能漏任务
javascript·数据库·经验分享·后端
QianhangQianping18 分钟前
撤销重做不是「存快照」:一个可视化编辑器的Operation 设计
java·前端·数据库·typescript·编辑器·前端架构·撤销重做
honsor19 分钟前
用 Grafana 做温湿度异常检测:从阈值告警到趋势预测
数据库·mysql·php
赵渝强老师32 分钟前
【赵渝强老师】YashanDB Developer Center(YDC,崖山数据库开发者中心)
数据库·国产数据库·yashandb·崖山数据库
lusklusklusk34 分钟前
SQL Server 为什么普通 SELECT 会阻塞 UPDATE?——行级 S 锁到表级 S 锁的锁升级原理与实验验证
数据库·mysql·oracle
Leo.yuan42 分钟前
企业业务人员如何独立完成数据分析?2026年自助BI工具选型与应用指南
大数据·数据库·人工智能
roman_日积跬步-终至千里43 分钟前
数仓开发的三层责任:业务定义、模型设计与 SQL 实现
数据库·数据仓库·sql·数据建模
瀚高PG实验室1 小时前
瀚高数据库创建新数据库卡住问题排查
数据库·postgresql·瀚高数据库