demo9:动态系统提示词(system_prompt)
GitHub 源码:demo9-dynamic-system-prompt 通过提供系统提示来确定 Agent 处理任务的方式。本示例是 Python 课件「系统消息 system_prompt」的 TypeScript 版:根据调用时传入的
context(用户角色)动态生成 系统提示词。
contextSchema:定义上下文结构(对应 Python 的class Context(TypedDict));wrapModelCall中间件:LangChain.js v1 没有dynamic_prompt装饰器,等价写法是 在中间件里覆盖systemPrompt后再调用handler;invoke(input, { context }):每次调用时明确指定上下文。
1. 环境变量
复用项目根目录 .env 的默认模型配置:
dotenv
OPENAI_API_KEY=你的API_KEY
OPENAI_BASE_URL=https://你的OpenAI兼容接口/v1
MODEL=模型名称2. 运行
在 ai-agent-langgraph-demo 目录执行:
bash
pnpm demo9执行类型检查:
bash
pnpm typecheck:demo93. Python 与 TypeScript API 对照
| 功能 | Python | TypeScript |
|---|---|---|
| 定义上下文 | class Context(TypedDict): user_role: str | z.object({ userRole: ... }) |
| 动态提示词中间件 | @dynamic_prompt 装饰器 | createMiddleware({ wrapModelCall }) |
| 读取上下文 | request.runtime.context.get("user_role", "user") | request.runtime.context.userRole(zod default 兜底) |
| 覆盖系统提示词 | return f"{base_prompt} ..." | handler({ ...request, systemPrompt: ... }) |
| 创建 Agent | create_agent(..., context_schema=Context) | createAgent({ ..., contextSchema }) |
| 调用时传上下文 | agent.invoke({...}, context={"user_role": "expert"}) | agent.invoke({ messages }, { context: { userRole: 'expert' } }) |
4. 工作原理
contextSchema用 zod 定义userRole字段,默认值user;userRolePrompt中间件在每次模型请求前读取request.runtime.context.userRole:expert→ 详细技术答复;beginner→ 简单解释、避免行话;其他 → 基础提示词;- Demo 用同一个问题分别以
expert和beginner角色调用, 观察同一 Agent 在不同 context 下回答风格的变化。
