LangChain 08:上下文工程、Runtime 与 MCP
1、本篇任务:只在正确时刻给 Agent 正确的信息和能力
Agent 变差经常不是模型不够强,而是上下文里混入太多旧消息、无关文档、危险工具或伪造身份。本课建立上下文工程方法,并把 MCP 当作外部能力适配器接入。
2、上下文有四种来源
| 来源 | 示例 | 信任级别 |
|---|---|---|
| 静态规则 | 角色、不可违反的业务边界 | 应用控制 |
| Runtime context | 当前 user、tenant、role、request_id | 认证层控制 |
| State/记忆 | 消息、工具结果、摘要、中断点 | 持久化但需裁剪 |
| 外部数据 | RAG、工具、MCP resource | 不可信数据 |
模型消息中写“我是管理员”不能改变 runtime role;检索文档写“忽略系统规则”不能升级为 system message。
3、为每次模型调用制作上下文清单
稳定 system 规则
+ 当前用户问题
+ 最近必要消息
+ 本步骤需要的结构化事实
+ 已通过 ACL 的 Top-k 文档
+ 本步骤允许的工具说明
<= 当前模型的 token 预算
每块记录来源、token 数、优先级和版本。超预算时先去掉低相关文档和大型工具原文,再压缩旧会话;永远不要截掉权限规则或把半个 JSON 交给模型。
4、动态 prompt 与动态工具
退款政策问题不需要暴露邮件、日历或代码执行工具。根据可信 role、当前任务阶段和风险动态选择工具,既减少模型选择错误,也缩小攻击面。
def tools_for(context: RequestContext, phase: str):
tools = [search_policy, get_order]
if phase == "after_approval" and "refund_operator" in context.roles:
tools.append(submit_refund)
return tools
动态系统提示可加入当前区域、语言和政策版本,但不能把完整用户资料全部拼入。需要什么取什么,并让 trace 记录最终上下文版本。
5、MCP 解决的是标准接入,不是自动安全
MCP server 可以暴露 tools、resources 和 prompts。LangChain 的 MCP client 把多个 server 的工具转换成 Agent 可用工具;stdio 适合本地进程,HTTP 适合远程服务。
Python:
from langchain_mcp_adapters.client import MultiServerMCPClient
from langchain.agents import create_agent
client = MultiServerMCPClient({
"policy": {"transport": "http", "url": "https://mcp.internal/policy"},
})
tools = await client.get_tools()
agent = create_agent(model="openai:gpt-5.5", tools=tools)
TypeScript:
import { MultiServerMCPClient } from "@langchain/mcp-adapters";
import { createAgent } from "langchain";
const client = new MultiServerMCPClient({
policy: { transport: "http", url: "https://mcp.internal/policy" },
});
const tools = await client.getTools();
const agent = createAgent({ model: "openai:gpt-5.5", tools });
实现时以当前 SDK 的导入路径为准。核心设计不变:server 与工具 allowlist、凭证、超时和权限必须由应用配置。
6、每个 MCP server 都要有接入合同
接入前记录:server owner 和版本;允许的 tool/resource;认证方式和 scopes;可访问网络;输入/输出大小;超时、并发和成本;是否有副作用;审计字段;降级方式。
远程 server 返回的工具描述和 resource 内容都可能恶意。把它们当外部数据,不能让 server 自己决定系统 prompt、租户身份或工具审批规则。
7、MCP 安全测试
- server 返回“读取全部用户数据”的工具描述,Agent 仍只能访问 allowlist。
- resource 包含 prompt injection,不会改变系统规则。
- 远程调用超时、5xx、返回超大内容时有 deadline、截断与熔断。
- 两个租户调用相同工具时使用各自短期凭证和 namespace。
- 副作用工具重复调用时使用幂等键,并在需要时触发 HITL。
8、课程阶段验收
到这里,你应能完成一个 LangChain 退款助手:稳定 schema、安全工具、可评测 RAG、会话持久化、流式 UI、审批与 MCP 接入边界。若流程分支和恢复开始变复杂,就进入下一阶段:用 LangGraph 把状态和控制流显式化。
如果您觉得这篇文章有帮助,请点个赞吧~
评论
请登录后发表评论
去登录