ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

上下文工程实战:从提示词到Agent记忆、压缩与隔离的完整指南

上下文工程实战:从提示词到Agent记忆、压缩与隔离的完整指南 1. 先搞清楚上下文工程到底是什么先说个我踩过的坑。早期我做 Agent以为把系统提示词写得足够详细Agent 就能稳定干活。结果上线没多久就翻车用户问了三四轮之后Agent 开始答非所问甚至把前面几轮对话里的信息张冠李戴。我查了很久最后发现根本不是提示词写得不好而是整个上下文的组织方式出了问题——模型能看到的信息被我又塞又截塞到最后它连自己刚说过什么都分不清了。那段时间我反复验证最终得出一个结论在 Agent 开发里提示词工程决定的是模型怎么回答而上下文工程决定的是模型到底能回答什么。前者管嘴巴后者管眼睛和耳朵。模型再聪明你给它看的上下文是残缺的、混乱的、超出预算的它照样给你输出灾难级别的结果。这就是为什么现在圈内越来越多人提上下文工程这个词——它不是一个唬人的新概念而是 Agent 稳定性问题背后真正的答案。1.1 从提示词工程到上下文工程一次范式转移提示词工程的核心是把话说清楚它面向的是单次问答。你写一段 instruction把任务说明白把约束列清楚模型按你说的做完事。但 Agent 不一样Agent 是多轮交互 多工具调用 多任务规划的组合体它一跑起来就是几十轮对话、几十次工具返回值、成百上千条中间推理过程。这些信息全都要通过上下文窗口喂给模型。这时候上下文就成了一条传送带你往传送带上放什么、按什么顺序放、放多少直接决定了 Agent 的表现。我把这两者做过一个对比维度提示词工程上下文工程关注对象一段提示词的措辞与结构模型可读到的全部信息的组织方式作用范围单次或单轮生成多轮对话、工具调用、状态维护全流程典型手段角色设定、few-shot、指令细化窗口裁剪、记忆压缩、证据链维护、动态注入失败形态输出跑偏、格式不对上下文溢出、记忆丢失、行为漂移、幻觉加重调试难度较低改一段话就行较高要追踪整个消息序列的生命周期说句实在话提示词工程的经验在 Agent 场景下依然有用但它只是上下文工程里的一小块。真正的 Agent 开发难点在于你如何让模型在信息有限的窗口里始终掌握最关键的信息同时保证对话连续性、工具调用正确性、长期记忆不丢。这才是上下文工程要解决的问题。1.2 Agent 场景下上下文的三层角色记忆、约束和证据链在 Agent 里上下文不是简单的一堆文本拼接。我把它的作用拆成三个层面来理解这样调试的时候思路会清晰很多。第一层是记忆Memory。模型没有真正的记忆它每次生成都是无状态的你给它什么它看什么。所谓记忆本质上是你在上下文里复述了过去的对话和结论。比如用户说自己人在北京想去杭州玩三天下一轮你问预算多少Agent 如果看不到上一轮信息就会忘了用户在北京这个前提。上下文管理的首要任务就是把该记住的对话信息持续保留在窗口里。第二层是约束Constraint。系统提示词和任务边界就是靠上下文注入的。比如你做一个客服 Agent系统提示里写了只允许回答售后问题不许做价格承诺模型每轮都必须看到这段话否则它就可能放飞自我。这个层面的核心问题是约束信息不能丢也不能被后面的信息淹没。第三层是证据链Evidence Chain。Agent 每次调用工具拿到结果这段结果 结论的组合就是证据链。比如 Agent 查了天气 API 拿到了明天杭州下雨然后基于这个数据回答用户建议带伞。如果上下文里丢弃了 API 返回值模型下一步就可能凭空编造天气数据。很多 Agent 跑着跑着开始一本正经地胡说八道就是证据链断裂了。所以上下文工程真正要做的事可以概括成一句话在有限的窗口里动态维护一套包含记忆、约束和证据链的完整信息结构让模型每时每刻都站在正确信息的地基上做推理。接下来我要讲的就是这套结构的具体做法。2. 上下文工程的五大核心模块既然上下文在 Agent 里的角色这么重要工程上该怎么落地我这边实践下来一个健壮的上下文体系至少包含五个模块消息窗口、系统提示与动态注入、工具调用记录、外部知识注入、会话记忆与长期存储。逐个拆开讲。2.1 消息窗口Agent 的临时工作台消息窗口是上下文的最底层载体。目前主流 LLM API 都采用消息列表的结构不同 role 的消息按顺序组成一次完整请求。用的角色主要有四个system系统指令设定模型行为和边界user用户的输入assistant模型的回复tool工具调用的返回值这个结构本身就是上下文工程的起点。很多新手犯的错是把一大段历史记录全塞进user或assistant消息里完全没有区分角色和来源。这样做的问题很明显——模型无法区分这是别人说的和这是系统要求你的指令冲突时它就不知道听谁的。我建议所有消息都遵循来源清晰、职责单一的原则。系统约束只放system用户原话只放user模型生成的内容只放assistant工具返回只放tool。别为了省事把什么都拼接成一个字符串丢进去。这个习惯养成了后面做裁剪、压缩、回溯都会轻松很多。2.2 系统提示词与动态注入持续稳定的世界观系统提示词是 Agent 的世界观底座。但这里有个很容易忽略的点系统提示词不该是一篇静态的作文而应该是一个可动态变化的模板。为什么因为 Agent 运行过程中很多关键信息是变化的。比如当前时间用户问今天天气怎么样模型需要知道今天是哪天用户身份登录用户的昵称、会员等级、历史订单摘要环境信息当前所在页面、设备类型、区域设置会话目标用户本次进入对话的意图分类结果这些信息如果在每轮请求时以静态文本写死那模型拿到的就是过期信息。我的做法是把系统提示词拆成固定骨架 动态插槽固定骨架写死行为规范和通用边界动态插槽在每次构造请求时用代码填充实时数据。来看一段简化示意的 Python 写法def build_system_prompt(user_profile: dict, current_time: str, session_intent: str) - str: return f 你是一个在线购物平台的客服助理负责处理售前咨询和售后问题。 【规则边界】 - 只回答与平台商品、订单、物流相关的问题 - 不承诺价格变动涉及优惠活动时引导用户查看官方页面 - 遇到无法确认的信息明确告知用户并建议转人工 【当前会话信息】 - 当前时间{current_time} - 用户昵称{user_profile.get(nickname, 未登录用户)} - 会员等级{user_profile.get(vip_level, 普通用户)} - 近期订单数{user_profile.get(recent_order_count, 0)} - 会话意图{session_intent} 请基于以上信息用友好、专业的语气回答用户问题。 这套写法最核心的作用是让模型每一轮都能感知到实时环境而不是活在自己的静态设定里。动态注入不是锦上添花它是防止 Agent 产生时间错乱和身份错乱这类低级错误的关键手段。2.3 工具调用记录Agent 的手脚是如何串联起来的工具调用是 Agent 区别于普通聊天机器人的核心能力而工具调用的上下文管理是最容易翻车的地方。我见过太多人在这里栽跟头。大模型厂商的 API 一般支持tool_calls参数模型会输出一个结构化指令比如{ tool_calls: [ { id: call_123, type: function, function: { name: get_weather, arguments: {\city\: \杭州\, \date\: \明天\} } } ] }模型并不真的执行函数它只是提出请求。真正的执行要由你的代码来完成然后把执行结果以tool角色回填给模型。这个过程中tool_call_id必须一一对应否则模型不知道这个返回结果属于哪次调用整个推理链就断了。我习惯的做法是每轮工具调用后把完整的调用链路放进上下文包括模型发出的工具调用指令tool_calls我执行的函数参数函数返回的原始结果我可能做的后处理结果比如格式化、截断这些内容合在一起构成了模型推理下一步行动的证据基础。还有一个细节工具返回结果如果太长不能原样全塞进上下文要先做裁剪。比如天气 API 返回 3000 字的 JSON模型其实只需要城市日期天气温度建议这几个字段你要在注入前过滤掉无用字段。这个结果预处理机制能极大节省 token 空间也避免无关字段干扰模型判断。2.4 外部知识注入与检索上下文RAGAgent 在处理专业领域问题时光靠模型内化的知识远远不够需要把外部知识动态注入上下文。这就要用到 RAG检索增强生成。RAG 的基本链路是把用户问题转化为检索向量从知识库里召回 Top-K 相关片段然后把片段拼进上下文作为参考信息。听起来简单但这里有一个关键点经常被忽略检索结果不是越多越好而是越精越好。你塞进去十段相关文档模型反而不知道该以哪段为准甚至可能出现从文档里挑一句最顺眼的来答这种随机行为。我的经验是把 Top-K 控制在 35 条以内每条片段控制在 300500 字并且在知识片段前加一个明确的边界标识比如【参考文档 1】来源《产品使用手册》第 3.2 节 内容xxx 【参考文档 2】来源《常见问题 FAQ》第 7 条 内容xxx 请优先参考以上文档回答如果文档中找不到答案请明确告知用户。这个边界很重要它能让模型识别出这是参考材料不是用户原话也不是系统指令从而避免信息源混淆。更重要的是你要告诉模型文档找不到就承认找不到这样能有效减少 Agent 强行编造回答的情况。2.5 会话记忆与长期存储短期的消息窗口装不下所有历史这时候就需要记忆系统出场。记忆系统分两层短期工作记忆保留最近 N 轮完整对话保证 Agent 能顺畅衔接当前任务。这里的 N 取决于你的 token 预算一般保留最近 510 轮是比较稳妥的范围。长期事实记忆把关键信息抽取出来存到独立的地方数据库、向量库、KV 存储下次需要时再注入。比如用户说我家住在杭州西湖区这个信息你不需要每轮都放在上下文里但你可以在对话开始时注入一句用户常住地杭州西湖区让模型记住这个事实。这里有个经验长期记忆不是把聊天记录原封不动存下来而是抽取事实、去重、结构化。比如用户说我上个月买的耳机坏了想售后抽取的事实是用户有一副上个月购买的耳机、出现故障、有售后诉求。下次对话时你只需要注入这句结构化摘要模型就能理解来龙去脉而不用看完整聊天记录。这个事实抽取 结构化存储 选择性注入的模式是 Agent 记忆系统的核心设计思路。3. 实操从 0 到 1 搭一个带上下文管理的 Agent理论讲了这么多直接上一个可以跑通的骨架。这个例子我用 FastAPI LangChain LangGraph 搭一个最小可运行的 Agent重点展示上下文是怎么被构建、传递、裁剪的。这个架构我在几个练手项目里反复用过稳定性和扩展性都还不错。3.1 架构选型为什么是 FastAPI LangChain LangGraph先解释一下我为什么选这套组合这涉及一个很现实的工程问题。FastAPI 负责 HTTP 接口层它轻量、异步支持好做 Agent 服务端再合适不过。LangChain 负责对接各种大模型 API 和工具接口省去自己封装 provider 的麻烦。LangGraph 是 LangChain 生态里的编排框架它的核心优势是有向图状态机每个节点处理一类任务比如规划、调用工具、生成回复节点之间通过状态对象传递数据。这个状态对象天然就可以作为上下文的载体你不用自己去维护一个全局的消息列表LangGraph 会帮你管。这套组合最打动我的一点是调试链路清晰。你可以单独把某个节点的输入输出打出来看上下文在哪个环节丢了、哪个环节重复了一目了然。相比之下如果自己手写一个循环调 LLM 的 Agent一旦出问题你只能翻日志猜。3.2 代码骨架上下文构建、工具调用与状态流转下面是我常用的一个 Agent 骨架去掉业务细节只保留核心结构。你可以把它当成模板直接改。from typing import TypedDict, Literal from fastapi import FastAPI from langchain_openai import ChatOpenAI from langgraph.graph import StateGraph, END from langgraph.checkpoint.memory import MemorySaver # ---------- 1. 定义状态它就是上下文的载体 ---------- class AgentState(TypedDict): messages: list # 完整消息列表是上下文的主体 user_profile: dict # 动态注入的用户信息 current_time: str # 动态注入的时间信息 memory: dict # 长期记忆的临时载体 final_answer: str # 最终回复 # ---------- 2. 构建 LLM绑定工具 ---------- def get_weather(city: str, date: str) - str: 查询城市某日天气。真实场景中替换为天气 API 调用。 # 模拟返回 return f{city} 在 {date} 的天气多云22~28℃适合出行。建议带伞。 tools [get_weather] llm ChatOpenAI(modelgpt-4o-mini, temperature0.3) llm_with_tools llm.bind_tools(tools) # ---------- 3. 定义系统提示词固定骨架 动态插槽 ---------- def build_system_prompt(state: AgentState) - str: profile state.get(user_profile, {}) return f 你是一个智能生活助手可以查询天气、提供建议。 【当前时间】{state.get(current_time, 未知)} 【用户信息】昵称 {profile.get(nickname, 未知)}常居城市 {profile.get(city, 未知)} 回答要简洁、准确涉及数据引用时注明来源。 # ---------- 4. 节点 1调用模型生成回复或工具请求 ---------- def call_model(state: AgentState): messages state[messages] system_msg {role: system, content: build_system_prompt(state)} response llm_with_tools.invoke([system_msg] messages) return {messages: messages [response]} # ---------- 5. 节点 2执行工具调用 ---------- def execute_tools(state: AgentState): messages state[messages] last_msg messages[-1] # 收集所有工具调用 tool_results [] for tool_call in last_msg.tool_calls: tool_name tool_call[name] args tool_call[args] if tool_name get_weather: result get_weather(**args) else: result f未找到工具{tool_name} # 关键把结果包装成 tool 角色消息带对应 tool_call_id tool_results.append({ role: tool, tool_call_id: tool_call[id], content: result, }) # 把工具结果追加到消息列表供模型下一步推理 return {messages: messages tool_results} # ---------- 6. 节点 3判断是否继续调用工具 ---------- def should_continue(state: AgentState): last_msg state[messages][-1] if last_msg.tool_calls: return continue return end # ---------- 7. 组装图 ---------- graph StateGraph(AgentState) graph.add_node(agent, call_model) graph.add_node(tools, execute_tools) graph.set_entry_point(agent) graph.add_conditional_edges(agent, should_continue, { continue: tools, end: END, }) graph.add_edge(tools, agent) app_graph graph.compile(checkpointerMemorySaver()) # ---------- 8. FastAPI 入口 ---------- app FastAPI() app.post(/chat) def chat(session_id: str, user_input: str): config {configurable: {thread_id: session_id}} initial_state { messages: [{role: user, content: user_input}], user_profile: {nickname: 张三, city: 杭州}, current_time: 2026-01-15 09:30, } result app_graph.invoke(initial_state, configconfig) return {reply: result[messages][-1].content}这套骨架的核心价值在于上下文以messages字段在状态里流转系统提示词每轮动态构建工具结果带tool_call_id回填。你跑起来后用 Postman 连续发几条消息观察 LangGraph 的日志就能清楚看到每轮模型的输入是什么、工具返回了什么、模型基于什么做出的最终回答。3.3 上下文预算的分配与计算有了骨架接下来要面对一个现实问题上下文窗口装不下无限信息你得学会精打细算。我以gpt-4o-mini128k 上下文窗口为例讲讲怎么分配预算。假设你的 Agent 需要支持 10 轮对话 3 次工具调用粗略估算组成部分预估 token 量说明系统提示词800固定骨架 动态注入最近 6 轮对话user assistant3000平均每轮 500 token3 次工具调用请求 返回1500平均每次 500 tokenRAG 检索片段3 段 × 400 字1800中文场景 1 字 ≈ 1.5 token预留 buffer模型输出 意外增长2000防止超限报错合计9100远低于 128k安全这里我故意留了很大余量为什么因为实际使用中 token 消耗往往超出你的预估尤其是工具返回结果和用户粘贴的大段文本经常瞬间吃掉大量预算。我建议把预算使用率控制在理想上限的 70% 以内超出就触发压缩或裁剪逻辑。别等到 API 报 context length exceeded 才开始补救到那一步已经晚了。关于 token 计算你可以在开发环境用tiktoken做离线预判import tiktoken enc tiktoken.encoding_for_model(gpt-4o-mini) text 你要估算的文本内容 token_count len(enc.encode(text)) print(ftoken 数: {token_count})但要注意不同编码器之间 token 数有差异生产环境最好以真实 API 请求的usage字段为准。预判只是让你在开发阶段心里有数。4. 上下文工程的关键机制压缩、持久化与并发隔离骨架能跑起来只是第一步。真实业务场景里你会遇到三个绕不开的问题上下文太长怎么办、重启后记忆怎么恢复、并发用户怎么保证上下文不串。这三个问题不解决Agent 根本没法上生产。4.1 上下文压缩让 token 花在刀刃上我一直把上下文比作一个行李箱——空间有限装什么不装什么全看你怎么取舍。压缩策略是上下文工程的核心技巧我常用的有三种方案一滚动窗口裁剪。最朴素的做法只保留最近 N 轮消息更早的直接丢弃。优点是简单缺点是会丢失早期关键信息。适合业务逻辑简单、不需要长期记忆的场景。方案二摘要压缩。对早期对话调用一次 LLM让它生成一段摘要然后把摘要作为一条新的user或system消息放入上下文替代原始多条消息。比如用户聊了 8 轮终于说清楚了需求你把这 8 轮压缩成一句用户需求买一台预算 5000 以内的游戏本优先考虑 RTX 4060 显卡的型号。这样后续轮次模型仍然记得用户需求但 token 消耗大幅降低。方案三结构化记忆 向量检索。把对话中的关键事实抽取成结构化条目存入向量库每轮对话前根据当前用户输入检索最相关的 35 条记忆注入上下文。这个方案最复杂但效果最好适合长期陪伴型 Agent。我个人的经验是三种方案组合使用滚动窗口打底摘要压缩处理过时但仍有价值的对话结构化记忆负责长期事实。没必要一上来就上最复杂的方案先评估你的场景是否是长时多轮记忆敏感型再做选择。4.2 持久化与恢复Agent 重启了记忆不能丢本地用MemorySaver跑没问题但生产环境服务一重启保存在内存里的会话状态就全没了。用户发现 Agent 忘记了自己几分钟前说过的话体验会非常糟糕。这时候要实现会话状态的持久化。LangGraph 提供了 checkpointer 机制你可以把状态存到 Redis、PostgreSQL 或专门的向量数据库里。核心逻辑是每个会话session_id对应一份状态快照每当 Agent 完成一轮执行把最新的状态序列化后写入存储下一次用户发消息时先从存储里加载该会话的历史状态再追加新的用户输入。这里有一个非常关键的工程细节你持久化的不应该只是聊天记录还包括记忆索引、Token 用量统计、以及上下文压缩策略的中间产物。这样即使正在执行压缩算法时服务崩溃重启后也能从上次记录的位置继续而不是从零再来。另外敏感信息要加密存储。用户聊天记录往往包含个人信息直接明文落库存在合规风险。我的习惯是在入库前对关键字段做脱敏输出时再按权限还原。这不仅是技术问题也是产品底线问题。4.3 并发场景下的上下文隔离别让不同用户串台AI Agent 怎么扛并发是最近特别热的话题。并发问题的核心不在于你的 FastAPI 能扛多少 QPS而在于每个用户的上下文状态必须严格隔离。如果你用一个全局字典按user_id存历史消息在高并发下不同请求的读写顺序一旦错乱就可能出现 A 用户的上下文被 B 用户覆盖Agent 开始用 A 的信息回答 B——这在生产环境是绝对的事故。我的隔离方案分三层接口层每个 HTTP 请求通过请求头或请求体携带session_id后端以此为 key 定位独立的状态对象存储层Redis 以agent:session:{session_id}为 key 存储状态TTL 按业务需求设置比如 30 分钟无交互就清理计算层用异步锁保证同一会话内操作有序执行。同一用户的并发请求很容易导致上下文互相覆盖所以同一session_id的请求必须排队处理不同session_id之间则可以并行这里有个很常见的坑很多人在 FastAPI 里用异步函数处理聊天请求但调用 LLM 是同步阻塞的处理不好就会卡住整个事件循环。我的做法是用run_in_executor把 LLM 调用放到线程池里跑释放事件循环去处理其他请求。import asyncio from concurrent.futures import ThreadPoolExecutor executor ThreadPoolExecutor(max_workers8) app.post(/chat) async def chat(session_id: str, user_input: str): loop asyncio.get_running_loop() # 把同步的 graph.invoke 丢到线程池 result await loop.run_in_executor(executor, app_graph.invoke, initial_state, config) return {reply: result[messages][-1].content}这个优化上去后同样的机器配置并发能力能提升好几倍。很多号称 Agent 扛不住并发的情况其实不是模型 API 的问题而是你代码里阻塞了事件循环。5. 常见问题与排查技巧实录最后这部分我把自己在实际调试和线上运维中遇到过的典型问题整理成一份速查表外加几条独家避坑经验。这些问题我几乎都在同事的代码里见过一遍你大概率也会遇到。5.1 症状Agent 跨几轮后丢失关键信息现象用户在第 1 轮说了我预算 8000第 8 轮问有没有推荐Agent 推荐了一款 15000 的笔记本。原因早期对话信息没有进入后续上下文。要么是滚动窗口把前面的消息裁掉了要么是你压根没做摘要压缩和长期记忆抽取。排查思路把第 8 轮请求实际发送的 messages 列表打印出来一条条看检查预算 8000这条信息是否还存在。不存在就是记忆链路有问题存在但模型没参考那才是提示词引导的问题。解法做关键信息前置把用户画像、核心需求、关键约束在每轮系统提示词里动态注入一遍。让模型每次翻开笔记本第一页就看到重点而不是靠翻聊天记录去回忆。5.2 症状上下文长度持续暴涨API 报错现象对话多轮后请求体越来越大最终在接近模型上限时 API 返回 400 错误。原因消息列表只增不减工具返回结果没有裁剪RAG 片段重复注入无去重。排查思路检查每一轮请求的 usage 字段prompt_tokens的增量是否异常。如果每轮增长超过 1500 token甚至更多说明你往上下文里塞了太多与当前任务无关的信息。解法分段设阈值触发压缩。比如消息超过 15 轮触发摘要压缩工具返回单条超过 800 token 就裁剪后注入RAG 结果按相关性去重后只保留 Top-3。另外代码里要捕获 context length exceeded 异常触发降级逻辑而不是直接把报错抛给用户。5.3 症状Agent 开始答非所问甚至精分现象Agent 忽然用完全不同的语气说话或者开始引用别人对话里的信息。原因大概率是上下文里混入了不属于当前会话的内容。典型场景是并发环境下状态串了或者是系统提示词里的动态插槽填错了数据比如注入的是上一个用户的 profile。排查思路立刻检查系统提示词中动态注入的部分再检查消息列表里是否有异常的用户输入。解法给每个会话打上独立的 trace_id日志和上下文里都带上这个 ID。这样排查问题时可以直接按 trace_id 拉取完整的消息链不用靠猜。同时在代码层面对 session_id 做严格的隔离校验状态读写必须绑定同一 key。5.4 排障速查表症状可能原因快速验证方法首选修复方案跨轮信息丢失早期消息被裁/未注入打印实际 messages 检查关键信息动态注入系统提示Token 快速爆涨无压缩策略、工具返回未裁剪观察每次请求的 prompt_tokens设置触发式摘要压缩 结果过滤行为精分上下文串台/注入错误信息检查 session_id 隔离与 trace_id加锁 独立 key 日志链路追踪模型胡编数据证据链断裂工具结果未完整回填检查 tool_call_id 是否正确对应确保工具结果带 id 回填保留证据片段并发阻塞卡死同步调用堵住事件循环压测看响应耗时曲线用线程池异步化 LLM 调用RAG 回答混乱检索片段过多/相互矛盾检查注入的 Top-K 数量与文本长度降到 Top-3加边界标识提示没找到就承认5.5 我的一点独门心得最后分享两个我自己常年受益的做法属于那种文档里不会写但实测下来特别管用的细节。一个是给上下文做版本快照。每次重大改动后我会保留一份旧版本的上下文构建逻辑然后拿同一批测试用例跑 A/B 对比。别小看这个习惯上下文工程的改动经常是牵一发而动全身——你优化了压缩策略可能就把证据链截断了你增加了动态注入字段可能就挤掉了系统指令的位置。有快照才能快速回溯没有快照你只能在黑暗里瞎摸。另一个是不要把上下文工程做成一次性交付。Agent 跑在真实场景里用户输入千奇百怪上下文策略必须持续迭代。我建议每周抽 30 条线上真实对话做上下文审计看哪些轮次模型答错了、错的原因是不是上下文缺失或冗余然后针对性调整压缩阈值、注入字段和工具返回的裁剪规则。上下文工程的本质就是信息取舍的动态平衡没有一劳永逸的方案只有持续调优的习惯。我在实际搭建各类 Agent 的过程中越来越确信一件事模型能力决定了 Agent 的天花板但上下文工程决定了 Agent 能不能够到那个天花板。很多项目前期跑得飞快一到复杂业务场景就崩根源往往不在模型选型而在上下文这个隐形地基没打牢。把地基打牢后面加功能、上并发、接记忆系统都会顺畅很多。
返回列表