
上下文工程 vs Agent 记忆 vs RAG联系与优化实战主题Context Engineering上下文工程、Agent Memory智能体记忆、RAG检索增强生成三者的概念辨析、关系梳理与工程优化方案含可直接运行的 Python 代码。上下文工程Context Engineering负责设计和优化进入 LLM 上下文窗口的全部信息—— 系统提示词、任务指令、记忆、检索结果、工具输出、示例、格式约束决定信息的选取、顺序与 Token 预算目标是让模型在正确的时间、以正确的格式获得完成任务所需的信息。RAG检索增强生成负责从外部知识库检索与当前问题相关的文档片段并注入上下文解决模型参数中缺乏的最新知识、长尾知识与知识更新问题无状态每次查询独立执行用完即弃。Agent 记忆智能体记忆负责跨轮次、跨会话保存并召回用户偏好、历史决策、任务状态等内部信息有状态支持写入、更新与遗忘。三者关系一句话上下文工程是编排层RAG 与记忆是它管理下的两类信息来源 —— RAG 提供外部知识无状态、按需检索记忆提供内部历史有状态、跨会话持久化三者共同决定模型每次推理时看到哪些信息、以什么顺序、占多少预算。一、三个概念的精确定义1.1 上下文工程Context Engineering定义Anthropic 提出Josh Tobin 于 2024 年首次系统阐述设计和构建动态系统这些系统能够在正确的时间、以正确的格式提供正确的信息和工具使 LLM 能够合理地完成任务。上下文工程的核心对象是上下文窗口Context Window。它优化的不是 “提示词怎么写”而是 “模型这次推理时能看到的所有信息” 如何组织。典型组成组成要素示例System Prompt系统指令角色、边界、输出规范Task / Instruction当前任务指令本次要完成的目标Memory记忆用户偏好、历史决策、未完成任务RAG 检索结果产品文档、知识库片段Tool Results工具输出代码执行结果、API 返回Few-shot 示例少量样例对话历史前序轮次格式约束 / 结构化输出XML 标签、JSON Schema与 Prompt Engineering 的区别维度Prompt EngineeringContext Engineering优化对象提示词文本本身进入上下文窗口的全部信息静态 / 动态偏静态、人工编写动态编排、程序化组装关注点措辞、角色、指令清晰度信息选择、排序、压缩、预算分配手段改写 prompt检索 记忆 工具 压缩 缓存1.2 RAGRetrieval-Augmented Generation定义2020 年 Lewis 等人提出的范式 —— 先从外部知识库检索相关文档片段再连同问题一起交给 LLM 生成答案。流程文档库 ──切块 Chunking──▶ 向量化/索引 ──▶ 向量库 ▲ 用户查询 ──▶ 查询改写 ──▶ 检索 Retriever ──┴──▶ 重排 Rerank ──▶ 注入上下文 ──▶ LLM 生成本质把知识从模型参数中转移到外部可检索的存储推理时按需检索并注入上下文解决知识更新慢、幻觉、长尾知识不足的问题。它是上下文工程里最常用的具体技术之一对应上下文工程中的Select检索操作。1.3 Agent 记忆Agent Memory定义智能体系统里负责跨轮次、跨会话保存和利用信息的子系统。参考认知科学的分层参考 MemGPT 与主流 Agent 框架记忆类型内容生命周期典型实现工作记忆 Working Memory当前上下文窗口本身本次任务对话消息列表情景记忆 Episodic Memory具体发生过的事件、任务过程中期任务记录、轨迹日志语义记忆 Semantic Memory抽取出的稳定事实、用户画像长期向量库 键值存储程序性记忆 Procedural Memory技能、偏好、做事方式长期偏好配置、技能文件关键点记忆不是简单的 “聊天记录存起来”而是一个生命周期系统—— 编码什么值得记→ 存储分层→ 检索怎么召回→ 遗忘 / 压缩什么时候忘。MemGPT2023借鉴操作系统虚拟内存的分层设计上下文窗口作为高速小容量层外部存储作为大容量持久层由模型自动完成上下文分页换入 / 换出从而支持长会话的上下文管理。二、三者之间的区别多维度对比对比维度上下文工程RAGAgent 记忆范畴编排层 / 方法论覆盖整个上下文窗口一种具体技术检索注入一个状态子系统跨会话回答的问题这一刻该给模型看什么外部资料里怎么说这个用户 / 任务 / Agent 之前发生了什么时间尺度当前这一次调用的窗口构造单次查询的检索 → 注入跨轮次、跨会话、长期信息源窗口内的一切指令 检索 记忆 工具外部知识库文档、FAQ、代码库Agent 自身与用户的交互历史主要操作组装、排序、压缩、预算分配索引、检索、重排写入、更新、召回、遗忘优化目标窗口内信息整体效用相关性 × 顺序 ×token 效率检索相关性、上下文忠实度记忆的准确性、时效性、可遗忘性失败表现信息拥挤、关键信息丢失Lost in the Middle检不到、检错、幻觉引用记忆过期、记忆污染、信息冗余典型指标任务成功率、输出质量Context Precision/Recall、Faithfulness、Answer Relevance记忆命中率、时效衰减、冲突率最容易混淆的两点“RAG 就是给模型加记忆”不是。RAG 是无状态检索每次查询独立执行检索完不留下任何状态记忆是有状态持久化信息写入后长期保存支持更新与遗忘并跨会话持续演进。“上下文工程 把东西塞进上下文”不是。上下文工程同样包含Write写入外部存储、Compress压缩、Isolate隔离很多信息刻意不放进上下文而是按需取用。三、三者之间的联系重点章节3.0 先建立一个统一视角三者围绕同一个核心资源运作LLM 每次推理只能基于有限上下文窗口中的信息。因此三者的分工为RAG推理前从外部知识库检索当前任务所需的文档片段并注入窗口外部知识来源记忆保存并召回跨轮次 / 跨会话的内部状态 —— 用户偏好、历史决策、未完成任务等 —— 按需注入窗口内部状态来源上下文工程把系统指令、任务、记忆、RAG 结果、工具输出等信息按优先级与 Token 预算统一组织进窗口编排层。三者互补且相互制约缺 RAG模型缺乏最新外部事实缺记忆模型无法延续任务、无法个性化缺上下文工程信息杂乱堆积、预算失衡模型难以有效利用。3.1 架构关系图上下文工程编排层窗口编排 Token 预算管理 │ 负责编排以下五类信息它们共同构成窗口的全部内容 ├─ System Prompt系统指令不可压缩 ←── 静态编写 ├─ 记忆注入Write / Recall ←── 来自 Agent 记忆子系统 ├─ RAG 检索Select ←── 来自 RAG 子系统 ├─ 工具输出Tools ←── 来自工具调用层 └─ Few-shot / 格式约束 ←── 静态编写 │ ▼ 预算分配 · 排序关键信息置顶 · 压缩 · 截断 ┌──────────────────────────┐ │ 有限上下文窗口 │ ──▶ LLM 生成 ──▶ 输出 └──────────────────────────┘ │ 新的事实 / 决策回写Write 通道 ▼ ┌──────────────────────────────────────────────┐ │ Agent 记忆子系统内部经验 · 跨会话 · 有状态 │ │ 情景记忆 ──反思提炼──▶ 语义记忆 / 用户画像 │ │ └──────────────▶ 向量库 键值库 │ ──按需召回──▶ 记忆注入 └──────────────────────────────────────────────┘ ┌──────────────────────────────────────────────┐ │ RAG 子系统外部知识 · 按需读取 · 无状态 │ │ 文档库 ──切块/索引──▶ 向量索引 倒排索引 │ ──检索注入──▶ RAG 检索 │ 检索 RRF 融合 重排 │ └──────────────────────────────────────────────┘3.2 核心联系六条按重要性排序联系 1范畴嵌套 —— RAG 与记忆都是上下文工程的手段不是平级概念三者是 “编排层 手段” 的关系。RAG 只是上下文工程里的Select检索注入手段记忆是其中的Write / Recall写入与召回手段。判断标准任何 “RAG 做得好的系统”本质上都是 “上下文工程做得好”反过来上下文工程还能在 RAG 之外独立优化压缩、排序、缓存、隔离。联系 2时间维度互补 —— 无状态检索 × 有状态记忆RAG 是无状态的查询 → 检索 → 用完即弃不改变系统状态记忆是有状态的写入 → 长期保存 → 更新 → 遗忘跨会话演进上下文工程把两者连起来每次调用时把 “无状态的检索结果” 与 “有状态的记忆” 一起编排进同一个窗口。联系 3信息源互补 —— 外部知识 × 自身经验RAG 解决 模型不知道的外部事实产品文档、政策条款、代码库、合同条款记忆解决 模型不该忘记的用户 / 任务上下文偏好、历史决策、未完成任务、上次失败原因两者缺一不可只有 RAG 而无记忆Agent 缺乏用户与任务上下文无法个性化回答、无法延续跨轮次任务只有记忆而无 RAGAgent 缺乏最新外部事实容易依据过时或不确定的信息作答。联系 4预算耦合 —— 同一份上下文窗口三者互相挤压System Prompt、记忆、RAG 结果、工具输出共抢有限的 token记忆注入多了 → RAG 被截断 → 事实性下降RAG 塞多了 → 指令被稀释 → 行为跑偏。所以必须联合调优统一预算表 统一排序单独优化任何一个都只是局部最优。联系 5数据闭环 —— 生成结果回写记忆记忆反哺检索LLM 基于 “RAG 记忆” 作答 → 新产生的事实 / 决策回写记忆→ 下次召回更准记忆里沉淀的会话总结又可以作为第二级检索索引把记忆当作检索对象与 RAG 共用同一套检索机制。RAG 与记忆因此互相增强而不是互相替代。联系 6同一套评估框架 —— 都服务于 “窗口质量”三者共用同一评价口径检索 / 记忆注入后上下文越精炼、越相关、越不互相矛盾输出的 Faithfulness 与任务成功率越高。工程上建议把 “检索结果放进去” 和 “记忆放进去” 统一作为 “上下文组装” 的前置步骤来评测而不是把三者分开各自打分。3.3 协同示例三者如何一起工作客服 Agent环节RAG 的职责记忆的职责上下文工程的职责用户提问前——从记忆库召回该用户画像会员等级、历史投诉、语言偏好分配记忆预算如 12%只注入 Top-3 条收到提问时检索最新退换货政策、订单状态 API 结果补充该订单上次处理结论情景记忆排序任务指令 记忆 RAG关键政策置顶组装上下文输出 Top-5 带来源标签的片段输出压缩后的要点按预算截断、去重、检查记忆与政策是否冲突生成回复————把五类信息拼进窗口控制总 token ≤ 预算会话结束——把 “该用户倾向退货而非换货” 回写语义记忆对旧会话做摘要压缩释放窗口一句话RAG 提供生成所需的外部事实记忆提供生成所需的用户 / 任务背景上下文工程决定这些信息以何种顺序与占比进入窗口—— 三者缺一Agent 都做不好事。四、优化方法论4.1 上下文工程优化① 上下文分层 Token 预算表把窗口内容按 “可压缩性 / 优先级” 分层预先分配预算层优先级建议预算示例可压缩手段系统指令高不可丢8%–12%精简措辞当前任务指令高不可丢3%–5%简明指令记忆中10%–15%只注入 Top-K 条RAG 结果中30%–40%重排后截断、压缩工具输出低10%–15%清空旧结果、只留结论对话历史低20%–25%摘要滚动、滑动窗口② 关键信息置顶 / 置底对抗 Lost in the MiddleLiu et al. (2023) 的实验表明模型对开头和结尾的信息利用最好中间信息容易被 “遗忘”。做法把最重要的约束放 System Prompt 末尾或开头检索结果按相关度排序后最高相关放最前。③ 结构化与格式约束使用 XML 标签 / Markdown 分区明确 “指令 - 数据 - 输出” 三层结构检索片段带上来源元数据[来源:xxx, 时间:xxx]便于模型忠实引用输出用 JSON Schema / 结构化格式约束。④ 压缩与清理Compaction历史轮次滚动摘要summarize-then-truncate工具结果清理tool-result clearing保留 “发生过该调用” 的记录删除可重新获取的大段输出记忆去重、合并重叠条目。⑤ 提示缓存Prompt Caching把不变的 system prompt 高频静态上下文做缓存降低成本与首字延迟把预算留给动态信息。4.2 RAG 优化① 切块Chunking固定切块chunk_size ≈ 300–500 tokensoverlap ≈ 10%–20%默认值并非生产最优更优语义切块按标题 / 段落 / 代码块边界切保持语义完整避免把表格、代码、条款拦腰截断小 chunk 利于精确定位大 chunk 利于上下文完整性通常配合重排解决。② 混合检索 RRF 融合单独用稠密向量会丢精确关键词编号、专有名词、公式单独用 BM25 会丢语义。生产标准做法BM25 稀疏检索 Top-50 ─┐ ├─→ RRF 融合 → 重排 → Top-K 注入 向量 稠密检索 Top-50 ──┘RRFReciprocal Rank Fusionk 通常取 60score(d) Σ 1 / (k rank_i(d))③ 重排Rerank用 Cross-Encoder 对融合后的 Top-50 精排取 Top-5~10显著提升上下文质量同时做元数据过滤时间、来源、权限、类别。④ 查询改写把口语问题改写成检索友好的查询复杂问题分解为多个子查询query decompositionHyDE先让 LLM 生成假设性答案再用答案向量检索提高语义召回。⑤ 时效加权业务场景下给文档加last_modified检索打分叠加时间衰减final sim * exp(-λ · age)。4.3 Agent 记忆优化① 写入策略什么值得记不要什么都存。优先级判断用户明确表达的偏好与约束“以后都用中文”→ 必记长期目标 / 未完成任务→ 必记可验证的事实身份、时间、决策结果→ 记一次性的临时状态 → 不记或设短 TTL。写入前做重要度评分如 0~1低于阈值不写入高频场景用异步写入避免阻塞主流程。② 分层存储情景记忆追加式日志事件流量大但轻量语义记忆抽取为 “实体 - 属性 - 关系” 或自然语言画像进向量库定期用 LLM 对情景记忆做reflection反思 / 提炼沉淀到语义记忆。③ 检索与注入打分 相关性 × 重要度 × 时效衰减 三因素加权注入前按 token 预算截断Top-K 长度限制只注入与当前任务相关的记忆控制注入数量避免信息过载。④ 遗忘 / 压缩 / 冲突消解TTL 过期清理、容量上限 LRU 淘汰摘要压缩旧对话 → 一句话结论冲突消解当检索到的旧记忆与用户最新指令冲突时以最新指令 / 最新检索事实为准并标记旧记忆 “已过时”。⑤ 记忆与 RAG 协同把每次会话的总结写入 “会话总结库”下次同类任务先检索总结相当于对自身历史的 RAGRAG 结果中的重要事实也回写记忆形成两级缓存。五、代码实战可直接运行依赖numpy、sentence-transformers或任意 embedding 服务、rank_bm25。为便于演示部分实现用简化算法代替外部库注释中给出生产替代。5.1 上下文 Token 预算分配器# context_budget.py from dataclasses import dataclass dataclass class ContextBudget: system: int # 系统指令 task: int # 当前任务指令 memory: int # 记忆注入 rag: int # 检索结果 tools: int # 工具输出 history: int # 对话历史 BUDGET_RATIO { system: 0.10, task: 0.05, memory: 0.12, rag: 0.35, tools: 0.12, history: 0.21, } def allocate_budget(context_window: int, reserve_headroom: float 0.05) - ContextBudget: 按比例分配上下文预算预留 headroom 给不可控增量。 usable int(context_window * (1 - reserve_headroom)) return ContextBudget( **{k: int(usable * v) for k, v in BUDGET_RATIO.items()} ) if __name__ __main__: budget allocate_budget(128_000) print(budget) # ContextBudget(system12160, task6080, memory14592, rag42560, tools14592, history25536)生产替代按 tokenizer 精确计数如tiktoken/transformers的AutoTokenizer而不是字符近似。5.2 混合检索BM25 向量 RRF 融合# hybrid_retriever.py import math import numpy as np from collections import Counter def bm25_score(query_tokens, doc_tokens, df, N, avgdl, k11.5, b0.75): BM25 单文档打分简化实现生产用 rank_bm25 库。 dl len(doc_tokens) score 0.0 tf Counter(doc_tokens) for qt in set(query_tokens): if qt not in df or qt not in tf: continue f tf[qt] idf math.log(1 (N - df[qt] 0.5) / (df[qt] 0.5)) score idf * (f * (k1 1)) / (f k1 * (1 - b b * dl / avgdl)) return score def rrf_fuse(rankings, k60): Reciprocal Rank Fusion融合多路检索排名。 fused {} for ranking in rankings: # ranking: [doc_id, ...] 按相关度降序 for rank, doc_id in enumerate(ranking, start1): fused[doc_id] fused.get(doc_id, 0.0) 1.0 / (k rank) return dict(sorted(fused.items(), keylambda x: x[1], reverseTrue)) def hybrid_search(query, docs, embed_fn, top_k10): docs: list[dict] - {id: str, tokens: list[str], vec: np.ndarray} 流程BM25 取 top50 - 向量余弦取 top50 - RRF 融合 - 返回 top_k q_vec embed_fn(query) q_tokens query.lower().split() N len(docs) df Counter() total_len 0 for doc in docs: for t in set(doc[tokens]): df[t] 1 total_len len(doc[tokens]) avgdl total_len / max(N, 1) bm25_scores { doc[id]: bm25_score(q_tokens, doc[tokens], df, N, avgdl) for doc in docs } dense_scores { doc[id]: float(np.dot(q_vec, doc[vec]) / (np.linalg.norm(q_vec) * np.linalg.norm(doc[vec]) 1e-9)) for doc in docs } bm25_rank [i for i, _ in sorted(bm25_scores.items(), keylambda x: x[1], reverseTrue)][:50] dense_rank [i for i, _ in sorted(dense_scores.items(), keylambda x: x[1], reverseTrue)][:50] fused rrf_fuse([bm25_rank, dense_rank]) return [doc_id for doc_id in fused][:top_k]生产替代rank_bm25FAISS/Milvus/pgvectorsentence-transformers并叠加Cross-Encoder 重排# 重排生产建议直接用 cross-encoder 模型 from sentence_transformers import CrossEncoder reranker CrossEncoder(cross-encoder/ms-marco-MiniLM-L-6-v2) def rerank(query, candidates, top_k5): scores reranker.predict([(query, c) for c in candidates]) top_idx np.argsort(scores)[::-1][:top_k] return [candidates[i] for i in top_idx]5.3 分层记忆管理器重要度 TTL 摘要压缩# memory_manager.py import json, time, heapq from dataclasses import dataclass, asdict dataclass class MemoryItem: id: str content: str mem_type: str # episodic / semantic / procedural importance: float # 0~1写入时评分 created_at: float ttl: float | None # 秒None 表示长期 vec: list | None None class MemoryManager: def __init__(self, storage_pathmemory.jsonl, embed_fnNone): self.storage_path storage_path self.embed_fn embed_fn # 向量化函数None 时退化为文本匹配 self.items: dict[str, MemoryItem] {} self._load() # ---------- 写入 ---------- def write(self, content: str, mem_typesemantic, importance: float 0.5, ttl: float | None None) - MemoryItem: 写入前的重要度门槛低于阈值不存减少记忆污染。 if importance 0.3: return None item MemoryItem( idf{int(time.time()*1000)}-{len(self.items)}, contentcontent, mem_typemem_type, importanceimportance, created_attime.time(), ttlttl, veclist(self.embed_fn([content])[0]) if self.embed_fn else None, ) self.items[item.id] item self._save() return item # ---------- 检索相关性 × 重要度 × 时效---------- def recall(self, query: str, top_k: int 5) - list[MemoryItem]: now time.time() q_vec list(self.embed_fn([query])[0]) if self.embed_fn else None scored [] for item in self.items.values(): if item.ttl and now - item.created_at item.ttl: continue # 过期记忆不召回 rel self._similarity(q_vec, item.vec) if q_vec else self._text_score(query, item.content) recency max(0.0, 1.0 - (now - item.created_at) / (30 * 24 * 3600)) score 0.6 * rel 0.3 * item.importance 0.1 * recency scored.append((score, item)) scored.sort(keylambda x: x[0], reverseTrue) return [item for _, item in scored[:top_k]] staticmethod def _similarity(a, b): import numpy as np return float(np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b) 1e-9)) staticmethod def _text_score(query, content): return len(set(query.split()) set(content.split())) / max(len(set(query.split())), 1) # ---------- 遗忘与压缩 ---------- def compact(self, summarizer, max_items: int 1000): 情景记忆超限时旧事件 - LLM 提炼一句结论写入语义记忆后删除。 old [i for i in self.items.values() if i.mem_type episodic and i.created_at time.time() - 7 * 24 * 3600] if len(self.items) max_items: for item in sorted(old, keylambda x: x.created_at)[: len(old) // 2]: summary summarizer(item.content) # 例如: f要点: {item.content[:200]} self.write(f[历史总结] {summary}, semantic, importance0.4) del self.items[item.id] self._save() # ---------- 持久化 ---------- def _save(self): with open(self.storage_path, w, encodingutf-8) as f: for item in self.items.values(): f.write(json.dumps(asdict(item), ensure_asciiFalse) \n) def _load(self): try: with open(self.storage_path, encodingutf-8) as f: for line in f: d json.loads(line) self.items[d[id]] MemoryItem(**d) except FileNotFoundError: pass # 使用示例 # mem MemoryManager(embed_fnembed) # embed 来自 sentence-transformers # mem.write(用户偏好回复始终使用简体中文, semantic, importance0.9, ttlNone) # hits mem.recall(用户的语言偏好是什么, top_k3)5.4 上下文组装器优先级排序 预算截断# context_assembler.py def count_tokens(texts) - int: 生产环境请用 tiktoken / AutoTokenizer 精确计数。 return sum(len(t.split()) for t in texts) def assemble_context(system_prompt, task, memory_items, rag_chunks, history, budget, key_rulehead): 组装规则 1) 顺序system - task - memory - rag - history 2) 每层不超过预算 3) 最高优先级的 RAG 片段放最前对抗 Lost in the Middle 4) 预留部分预算给不可控增量 def fit(texts, cap): out, used [], 0 for t in texts: cost count_tokens([t]) if used cost cap: break out.append(t); used cost return out system_block fit([system_prompt], budget.system) task_block fit([task], budget.task) # RAG 片段已按相关度降序直接按预算截断 rag_block fit(rag_chunks, budget.rag) # 记忆只取 Top-K且压缩为 要点 形式 mem_block fit([f- {m.content} for m in memory_items[:8]], budget.memory) hist_block fit(history[-20:], budget.history) # 只取最近 20 轮 context { system: system_block, task: task_block, memory: mem_block, rag: rag_block, history: hist_block, tools: [], # 由工具调用层维护 } # 最终注入顺序关键信息在两端 final_prompt \n\n.join([ *system_block, *task_block, *mem_block, *rag_block, # 注意最重要片段已排在最前 *hist_block, ]) return context, final_prompt5.5 简易评估脚本Faithfulness / Context Precision# evaluate.py def faithfulness(claims: list[str], evidence: list[str]) - float: 忠实度答案中的每条论断能否被检索证据支持。 生产用 LLM-as-judge 逐条判定这里用词项覆盖 否定句惩罚近似。 if not claims: return 0.0 supported 0 for c in claims: ev .join(evidence) overlap len(set(c.split()) set(ev.split())) / max(len(set(c.split())), 1) if overlap 0.5 and 不 not in c[:3]: # 近似判定 supported 1 return supported / len(claims) def context_precision(relevant_positions: list[int], total_retrieved: int) - float: 上下文精确率相关片段在检索结果中排得越靠前越好。 relevant_positions: 相关片段在注入列表中的下标0-based。 if not relevant_positions: return 0.0 return sum(1.0 / (pos 1) for pos in relevant_positions) / len(relevant_positions) # 示例 # claims [RAG 是无状态的, 记忆是跨会话的] # evidence [RAG 每次查询重新检索外部知识库检索完不留状态, # Agent 记忆跨会话保存用户偏好和历史决策] # print(Faithfulness:, faithfulness(claims, evidence)) # 0.5~1.0 # print(Context Precision:, context_precision([0, 2], 5)) # 0.5六、落地检查清单自检用上下文工程是否对上下文做了分层与 Token 预算而不是 “全部塞满”关键约束是否放在窗口开头 / 结尾避开中间遗忘区工具输出是否做了清理 / 只留结论静态内容是否命中了 Prompt CacheRAG切块是否按语义边界而非纯固定长度是否使用 BM25 向量混合检索 RRF 重排是否带元数据过滤与时效加权检索结果注入前是否截断到预算内记忆写入是否有重要度门槛不是什么都存是否分层episodic /semantic/procedural召回打分是否 相关性 × 重要度 × 时效是否有 TTL 过期、摘要压缩、冲突消解记忆与 RAG 结果冲突时是否以最新事实 / 最新指令为准评估是否用 Faithfulness / Context Precision / Answer Relevance 定期回归是否有基线Baseline与 A/B 对比七、参考资料Anthropic - Effective context engineering for AI agentshttps://www.anthropic.com/engineering/effective-context-engineering-for-ai-agentsAnthropic Cookbook - Context engineering: memory, compaction, and tool clearinghttps://platform.claude.com/cookbook/tool-use-context-engineering-context-engineering-toolsAI Wiki - Context engineeringhttps://aiwiki.ai/wiki/context_engineeringMem0 - Context Engineering AI: How To Build Smarter LLM Agentshttps://mem0.ai/blog/context-engineering-ai-agents-guideTierzero - Context Engineering Is What Comes After Prompt Engineeringhttps://www.tierzero.ai/blog/context-engineering-production-agents/掘金 - Context Engineering 不是写更长 Prompt而是管理 Agent 的注意力预算https://juejin.cn/post/7640643117474201641成都理工大学 - 大模型上下文工程 (Context Engineering) 指南https://www.cdut.edu.cn/__local/4/A7/81/EA807C0CAAAF77FDAC03EC61C0B_FF6614F6_68E2A6.pdf参考论文Lewis et al. 2020《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》Liu et al. 2023《Lost in the Middle》Packer et al. 2023《MemGPT: Towards LLMs as Operating Systems》