技术热点落地:上下文工程——让 AI Agent 在生产环境稳定运行(2026-05-14)
技术热点落地:上下文工程——让 AI Agent 在生产环境稳定运行(2026-05-14)
适用场景与目标
适用场景:
- 企业级 AI Agent 已完成 POC,现在需要规模化部署到生产环境
- AI Agent 输出不稳定、幻觉严重、工具调用错误率居高不下
- 团队已从 Prompt Engineering 转向更系统化的 AI 工程体系搭建
- 需要在全球多区域、多云环境部署 AI 应用的企业
核心目标: 本文帮助你从零搭建一套六层上下文体系,实现 AI Agent 在复杂业务场景中的稳定、可控、可观测运行。一周内可出 MVP,一月内可上线生产。
最小可行方案(MVP)步骤
第一步:理解上下文工程 vs Prompt 工程
传统 Prompt Engineering 专注于”怎么说”(措辞、格式、示例),而 Context Engineering 专注于**“在什么时机、为 AI 提供哪些信息”**。
这是质的转变:Prompt 是静态的 instruction,Context 是动态的信息供给系统。
第二步:搭建六层上下文架构(最小可用版)
以下是推荐优先实现的前三层(最容易出效果):
第 1 层:会话记忆(Session Memory)
# 最小实现:用 Redis 存储会话上下文
import redis
import json
r = redis.Redis(host='localhost', port=6379, db=0)
def save_session(user_id: str, role: str, content: str):
key = f"session:{user_id}"
entry = json.dumps({"role": role, "content": content})
r.rpush(key, entry)
r.expire(key, 3600) # 1小时后自动清理
def get_session(user_id: str, last_n: int = 10):
key = f"session:{user_id}"
entries = r.lrange(key, -last_n, -1)
return [json.loads(e) for e in entries]
第 2 层:短期记忆(Short-term Knowledge)
# 业务规则短期缓存:敏感操作前的规则校验
from functools import lru_cache
import time
@lru_cache(maxsize=1000, ttl=300) # 5分钟TTL
def get_user_permissions(user_id: str) -> dict:
"""缓存用户权限,5分钟内不重复查库"""
return fetch_permissions_from_db(user_id)
def inject_permission_context(user_id: str, action: str) -> str:
perms = get_user_permissions(user_id)
allowed = perms.get(action, False)
return f"[权限检查] 当前用户{user_id}执行{action}:{'允许' if allowed else '拒绝']}"
第 3 层:长期知识(Long-term Knowledge)
# 使用向量数据库存储企业知识
# 推荐工具:Qdrant / Milvus / Chroma(轻量级)
from qdrant_client import QdrantClient
client = QdrantClient("localhost", port=6333)
collection_name = "enterprise_knowledge"
def retrieve_knowledge(query: str, top_k: int = 5) -> list[str]:
results = client.search(
collection_name=collection_name,
query_vector=encode_text(query),
limit=top_k
)
return [r.payload["text"] for r in results]
def build_context_prompt(user_query: str) -> str:
knowledge_chunks = retrieve_knowledge(user_query)
knowledge_section = "\n".join(f"- {chunk}" for chunk in knowledge_chunks)
return f"【企业知识库参考】\n{knowledge_section}\n\n【用户问题】{user_query}"
第三步:引入分层 Token 治理
Token 是成本的大头,必须精细控制:
# Token 预算分配策略
TOKEN_BUDGET = {
"system_prompt": 2000, # 系统提示词(稳定,可缓存)
"long_term_knowledge": 4000, # 长期知识(压缩后注入)
"short_term_context": 2000, # 短期上下文(实时构建)
"session_memory": 2000, # 会话记忆(最近N轮)
"output_reserve": 1996, # 输出预留(总Token=10000)
}
def estimate_tokens(text: str) -> int:
# 粗略估算:中文约 1.5 tokens/字,英文约 4 chars/token
return len(text) // 2 # 安全低估
def enforce_token_budget(context_layers: dict) -> str:
"""渐进式注入:优先保留核心层,裁剪低优先级层"""
combined = ""
for layer_name, text in context_layers.items():
budget = TOKEN_BUDGET.get(layer_name, 1000)
if estimate_tokens(combined) + estimate_tokens(text) > TOKEN_BUDGET["output_reserve"]:
# 超出预算时截断或降级
text = text[:budget * 2] # 粗略截断
combined += f"\n\n{text}"
return combined
关键实现细节
主动注入机制(Critical Path)
在敏感操作或异常处理前,自动调取相关历史信息与风险数据:
async def agent_execute_with_context(user_id: str, action: str, params: dict):
# 主动注入触发条件
if is_sensitive_action(action):
# 在执行高风险操作前,自动注入:
# 1. 用户历史操作记录
# 2. 相关风险数据
# 3. 组织级安全规则
risk_context = await build_risk_context(user_id, action, params)
params["_injected_context"] = risk_context
result = await agent.run(...)
return result
async def build_risk_context(user_id: str, action: str, params: dict) -> str:
history = await get_user_action_history(user_id, limit=5)
risk_rules = await get_action_risk_rules(action)
return f"[风险上下文]\n历史操作:{history}\n风险规则:{risk_rules}"
五层防御机制(生产级必须)
| 层级 | 机制 | 实现方式 |
|---|---|---|
| L1 | 权限隔离 | RBAC + AI 工具调用白名单 |
| L2 | 空跑校验 | Dry-run 模式验证参数 |
| L3 | 人工审批 | 敏感操作先发飞书审批卡片 |
| L4 | 规则校验 | 正则 + 业务规则引擎双重校验 |
| L5 | 强制回滚 | 操作结果对比,异常自动回退 |
# L2 空跑校验示例
async def dry_run_validation(tool_name: str, params: dict) -> bool:
dry_result = await agent.execute(
tool_name,
params,
dry_run=True # 不实际执行,只验证
)
if not dry_result.valid:
raise PermissionError(f"参数校验失败: {dry_result.errors}")
return True
常见坑与规避清单
坑 1:上下文无限膨胀(Context Explosion)
现象: AI 输出质量随对话轮数增加而急剧下降。 根因: 会话记忆层不断累积,超出模型上下文窗口。 规避:
# 错误:累积全部历史
all_history = get_session(user_id, last_n=1000) # ❌
# 正确:滑动窗口 + 摘要压缩
def get_compressed_session(user_id: str) -> str:
recent = get_session(user_id, last_n=10)
if len(recent) > 5:
summary = agent.summarize("\n".join([r["content"] for r in recent]))
return f"[前序摘要] {summary}\n\n[最近对话]\n" + "\n".join([r["content"] for r in recent[-3:]])
return "\n".join([r["content"] for r in recent])
坑 2:向量检索返回无关上下文(噪声注入)
现象: RAG 召回的知识片段与问题不相关,AI 被误导。 规避: 在召回后加一层”相关性再排序”(Re-ranker):
# 使用交叉编码器做精准重排
from sentence_transformers import CrossEncoder
reranker = CrossEncoder('cross-encoder/ms-marco-MiniLM-L-6-v2')
def rerank_results(query: str, chunks: list[str], top_k: int = 3) -> list[str]:
pairs = [(query, chunk) for chunk in chunks]
scores = reranker.predict(pairs)
ranked = sorted(zip(chunks, scores), key=lambda x: x[1], reverse=True)
return [chunk for chunk, _ in ranked[:top_k]]
坑 3:Token 预算分配不合理导致核心信息被截断
现象: AI 在关键操作时突然”失忆”,忘记安全规则。 规避: 固定系统提示词(System Prompt)在 Token 预算的最前部,且不参与动态裁剪:
SYSTEM_PROMPT_TOKEN_LIMIT = 2000 # 固定不变
# 构建最终 prompt:
final_prompt = f"<system>{SYSTEM_PROMPT}</system>\n<context>{dynamic_context}</context>\n<user>{user_input}</user>"
坑 4:多云环境上下文不一致
现象: 用户在 AWS 环境的上下文切换到阿里云后丢失。 规避: 统一上下文存储层使用云厂商无关的 Redis Cluster 或独立 Qdrant 服务,不要绑定在单一云的内网服务上。
成本/性能/维护权衡
成本维度
| 方案 | 月均成本(参考) | 适用规模 |
|---|---|---|
| Redis + 本地向量库 | ¥500~2000 | < 100 并发 Agent |
| Qdrant Cloud | ¥2000~8000 | 100~1000 并发 |
| 自建 Milvus 集群 | ¥10000+ | 企业级大规模 |
优化建议: 初期用 Redis + Chroma 本地版先跑通,验证 ROI 后再迁移到云向量服务。
性能维度
- 向量检索延迟:Qdrant < 50ms(P99),Chroma 本地 < 20ms
- 上下文注入延迟:< 100ms(用户无感知)
- Session 读取延迟:Redis < 5ms(P99)
维护维度
| 模块 | 维护难点 | 推荐方案 |
|---|---|---|
| 向量知识库 | 数据更新后需重建索引 | 使用增量索引 + 定时全量重建 |
| Token 预算 | 多模型切换时预算需调整 | 统一 Token 计算服务 |
| 上下文过期 | 长期未交互用户的上下文清理 | Redis TTL + 主动归档到 OSS |
一周内可执行行动清单
Day 1-2:搭建基础上下文三层
- 部署 Redis(docker 一键启动)
- 实现 Session Memory 存储与读取
- 配置企业知识的向量数据库(Chroma)
- 跑通一次完整的上下文注入闭环
Day 3-4:实现 Token 治理 + 敏感操作防御
- 接入 Token 计算服务(估算 budget)
- 实现 Dry-run 校验
- 配置飞书审批 Webhook(敏感操作人工确认)
- 灰度验证:让 10% 流量先走新架构
Day 5-7:监控 + 迭代
- 埋点:每次 Agent 调用的上下文大小、Token 消耗、输出质量评分
- 上线 Dashboard(推荐:Grafana + Prometheus)
- 收集 3 天数据后做第一轮优化(调整 Token 分配比例)
- 撰写运维手册(上下文缓存命中率、安全规则更新流程)
延伸阅读
- Context Engineering: The Next Frontier in AI Engineering(英文,理论深度好)
- 企业级 AI Agent 安全设计:五层防御体系实战(内部实践分享)
- Qdrant 官方文档:https://qdrant.tech/documentation/
- Langfuse:开源 LLM 可观测性工具,https://langfuse.com
一句话总结: 从 Prompt Engineering 到 Context Engineering,是 AI 应用从”调模型”到”做系统”的本质跨越。上下文工程做得好,AI Agent 在生产环境的稳定性至少提升一个数量级。