122.Agent-LangChain核心组件-中间件-动态提示词(dynamic_promapt)

**摘要:**本文介绍 LangChain 中 @dynamic_prompt 注解的用法,讲解如何通过该注解将函数注册为动态提示词中间件,并利用 ModelRequest 类型获取运行时上下文与系统提示词,实现系统提示词的动态覆盖与拼接,最后通过完整代码示例演示动态提示词中间件的配置与调用流程。

内容参考于:图灵AI大模型全栈

LangChain提供了@dynamic_prompt注解,这个注解写到函数上方,然后LangChain就会把函数看作为是一个修改提示词的函数,这个函数的返回值会覆盖系统提示词

如下图红框使用@dynamic_prompt注解,它的入参是一个ModelRequest类型

ModelRequest类型中可以得到下图红框的内容

复制代码
# ----------------------------------------------------------------------------
# 字段名           | 作用                          | 中间件常见操作
# ----------------|-------------------------------|---------------------------
# model           | 要调用的模型实例              | 动态切换模型
# messages        | 对话历史(不含 system)       | 增删改消息
# system_message  | 系统提示词                    | 注入用户画像/场景设定
# tool_choice     | 工具选择策略                  | 强制/禁用工具调用
# tools           | 提供给模型的工具列表          | 权限裁剪、按需挂载
# response_format | 结构化输出 schema 与策略      | 动态开关/替换 schema
# state           | 当前 Agent 完整状态           | 读业务字段做上下文注入
# runtime         | 运行时环境(context/store...)  | 取用户、推流、写长期存储
# model_settings  | 模型参数(temperature 等)    | 按场景动态调参

效果图:

带动态提示词中间件

不带动态提示词中间件

手动设置系统提示词,不带动态提示词中间件

手动设置系统提示词,带动态提示词中间件

在动态提示词中间件中获取设置的系统提示词,通过获取系统提示词可以进行拼接,然后动态提示词和手动设置的系统提示词就可以一起使用了,注意提示词在content中所以拼接的时候要request.system_message.content这样取

代码

python 复制代码
from langchain.agents.middleware import dynamic_prompt, ModelRequest
from langchain.agents import create_agent
from dataclasses import dataclass
from langchain_qwq import ChatQwen
from dotenv import load_dotenv
import os
加载环境变量
load_dotenv()
初始化模型
llm = ChatQwen(
model="qwen3.7-flash",
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url=os.getenv("DASHSCOPE_BASE_URL")
)
定义上下文的属性内容
@dataclass
class Context:
user_name: str  # 用户名
创建动态提示词的函数
@dynamic_prompt
def state_aware_prompt(request: ModelRequest) -> str:
# 通过 ModelRequest 类型获取runtime运行时中的用户名
user_name = request.runtime.context.user_name
# 打印系统提示词
print(f"获取的系统提示词:{request.system_message}")

# print(user_name)
# 它返回的内容会覆盖系统提示词
return f"你是一个智能助手,请称呼用户为:{user_name}"
创建代理
agent = create_agent(
model=llm,
# 设置动态提示词中间件
middleware=[state_aware_prompt],
# 设置系统提示词
system_prompt="你是一个智能助手,请称呼用户为计算机王2",
# 设置上下文
context_schema=Context,
)
response = agent.invoke(
{"messages": [{"role": "user", "content": "你好呀"}]},
context=Context(user_name="计算机王")
)
print(response["messages"][-1].content)

相关推荐
做萤石二次开发的哈哈3 小时前
连锁门店、园区、交通枢纽的视频如何统一汇集?应用模板的接入与分权管理详解
人工智能·物联网·音视频·二次开发·视频监控·蓝海aiot一站式工作台·萤石云开放平台
老金带你玩AI3 小时前
全程拿着手机,我让dot准备了一场AI分享
人工智能
nvd113 小时前
Flink 批处理驱动的湖仓 AI 财务研报流水线:从双流广播汇聚到 Agent 智能决策与原生 Iceberg 落盘全景实战
大数据·人工智能·flink
snhna4 小时前
向量数据库深度实战:从 HNSW 到 pgvector、Milvus 选型与 RAG 落地
数据库·人工智能·python·postgresql·milvus
架构技术专栏4 小时前
Agent 工具调用:从工具声明到执行反馈
前端·人工智能·后端
点云-激光雷达-Slam-三维牙齿4 小时前
100,000 Records CSV File - India Traffic Accident Analysis Dataset.7z
人工智能·数据集
TechWayfarer4 小时前
精度极限的突破:AI与IPv6如何重塑高精度IP查询
人工智能·网络协议·tcp/ip·transformer
七十二时9564 小时前
视频掉帧怎么用AI补帧
人工智能
可达智灵4 小时前
信创适配|织灵 Coda Loom 2.0 完成银河麒麟服务器操作系统 V10、V11 适配认证
人工智能·可达智灵
Wx-bishekaifayuan5 小时前
express皖美特色农产品网售系统53118-计算机课程设计、毕业设计
人工智能·spring boot·后端·python·课程设计·express·旅游