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)

相关推荐
AI职业加油站4 小时前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
AI产品测评官4 小时前
海内外AI招聘工具分赛道横向对比:五大品类的技术路线与选型参考
人工智能·ai·求职招聘
是Dream呀5 小时前
中秋国庆回家不背电脑,用ToDesk远程反连学校设备,查资料、改作业
人工智能·agent·todesk
奇思妙想聪明勤奋的小羊5 小时前
DeepAgents第5章:子Agent 与上下文隔离—让 Agent学会委派
人工智能·python·学习·语言模型
czxxxc5 小时前
创客匠人AI智能体:推动知识服务进入智能化运营新阶段
人工智能·知识付费
俊哥V5 小时前
每日 AI 研究简报 · 2026-09-21
人工智能·ai
AOI小白新手上路5 小时前
《LoViF 2026: The First Challenge on Weather Removal in Videos》知识蒸馏笔记
人工智能
漂着的圆木5 小时前
Agent 功能参与度:Copilot 怎么算
sql·数据分析·agent·githubcopilot·度量