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

相关推荐
Htr_2 分钟前
Creem 2.0 使用指南:面向 AI 构建时代的资金平台
android·数据库·人工智能·ui·photoshop
我是大猴子6 分钟前
reids的数据结构的应用场景
数据库
螺蛳粉 螺蛳粉29 分钟前
mysql的备份与恢复
linux·运维·数据库·mysql
艾醒(AiXing-w)1 小时前
LangChain 1.0 智能体开发(三):Agent 记忆管理——从短期对话到跨会话长期记忆
数据库·人工智能·langchain
MSTcheng.1 小时前
KES 进了 K8s 之后运维归谁管?
数据库
知识的搬运工旺仔1 小时前
CREATE INDEX CONCURRENTLY:线上建索引不阻塞 DML 的代价与坑
数据库·后端·sql
guo_wen_qiang2 小时前
mysql中有哪些日志
数据库·mysql
达梦数据2 小时前
达梦数据复制软件DMDRS搭建部署示例:源数据库DM8到目标数据库DM8数据迁移
数据库
沪上企服通2 小时前
旧账系统的信创迁移工程:从 MySQL/Oracle 到国产库、国密与电子会计档案闭环
数据库·笔记·数据库架构