Anthropic:怎么才能控制模型的行為,做好Agents?
嘿,大家好!這里是一個(gè)專(zhuān)注于前沿AI和智能體的頻道~
Anthropic 最近又發(fā)了一篇關(guān)于 AI Agents 的博客,過(guò)去幾個(gè)月已經(jīng)連續(xù)好幾篇了。
我覺(jué)得他們關(guān)于Agents的內(nèi)容整體都挺好的,寫(xiě)的也很有實(shí)踐意義。
今天的分享,圍繞一個(gè)核心問(wèn)題:如何配置上下文,才能讓模型持續(xù)輸出期望的行為。
TLDR:
上下文是有限資源,存在 Context Rot現(xiàn)象。 好的上下文工程 = 找到最小的高信號(hào) token 集,最大化期望結(jié)果。
長(zhǎng)時(shí)間任務(wù)三板斧:壓縮、結(jié)構(gòu)化筆記、子智能體。
新的趨勢(shì)是 Just-in-time策略:不預(yù)處理所有數(shù)據(jù),而是維護(hù)輕量級(jí)標(biāo)識(shí)符(文件路徑、鏈接),運(yùn)行時(shí)動(dòng)態(tài)加載。
混合策略是實(shí)踐共識(shí),Claude Code 采用混合模型:CLAUDE.md 直接放入上下文(預(yù)處理),glob/grep 讓 Agent 即時(shí)探索。
什么是上下文工程?
先說(shuō)清楚概念。上下文指的是調(diào)用大模型時(shí)包含的所有 token。
而上下文工程就是在 LLM 固有約束下,優(yōu)化這些 token,以實(shí)現(xiàn)預(yù)期結(jié)果的工程問(wèn)題。
簡(jiǎn)單來(lái)說(shuō):提示工程關(guān)注的是“怎么寫(xiě)好提示詞”,上下文工程關(guān)注的是“怎么管理整個(gè)上下文狀態(tài)”——包括系統(tǒng)指令、工具、外部數(shù)據(jù)、消息歷史、MCP等所有信息。
圖片
早期,大多數(shù)用例是一次性的分類(lèi)或文本生成任務(wù),寫(xiě)好提示詞就夠了。
但現(xiàn)在我們要構(gòu)建的是能在多輪推理、長(zhǎng)時(shí)間運(yùn)行的 Agent,這些 Agent 每次循環(huán)都會(huì)生成更多可能相關(guān)的數(shù)據(jù),這些信息必須被持續(xù)精煉。
為什么上下文很珍貴!
Anthropic的核心insight是:上下文是有限資源,邊際收益遞減。
盡管模型能處理越來(lái)越大的上下文窗口,但研究發(fā)現(xiàn)了一個(gè)現(xiàn)象叫 Context Rot——隨著上下文 token 數(shù)量增加,模型準(zhǔn)確召回信息的能力會(huì)下降。
這不是某個(gè)模型的問(wèn)題,而是所有模型的共性。
原因在于 Transformer 架構(gòu)本身:每個(gè) token 都要關(guān)注(attend)其他所有 token,這產(chǎn)生了 n2 的兩兩關(guān)系。上下文越長(zhǎng),模型捕獲這些關(guān)系的能力就越被稀釋。
這意味著:好的上下文工程就是找到最小的、高信號(hào)的 token 集合,最大化期望結(jié)果的可能性。
上下文的構(gòu)成
Anthropic 給出了覆蓋上下文的各個(gè)組成部分:
System Prompts
要極其清晰,使用簡(jiǎn)單直接的語(yǔ)言,并且要在正確的高度呈現(xiàn)想法。
那什么叫正確的高度?Anthropic 指出了兩個(gè)極端的失敗模式:
- 一個(gè)是把復(fù)雜的、脆弱的 if-else 邏輯硬編碼進(jìn)提示詞
- 另一個(gè)是提供模糊的、高層次的指導(dǎo),無(wú)法給 LLM 具體信號(hào)
最優(yōu)的高度在中間:足夠具體以有效引導(dǎo)行為,又足夠靈活讓模型獲得強(qiáng)啟發(fā)式指導(dǎo)。
圖片
建議用 XML 標(biāo)簽或 Markdown 標(biāo)題組織提示詞(如 <background_information>, ## Tool guidance 等),但格式也逐漸變得不那么重要,因?yàn)槟P驮絹?lái)越強(qiáng)了。
核心原則是:追求完整可以概述預(yù)期行為的最小集合。但是,最小不等于短——仍然需要給 Agent 足夠的前置信息。
Tools
工具讓 Agent 能與環(huán)境交互、拉取新上下文。
最常見(jiàn)的失敗模式是:工具集臃腫,覆蓋太多功能,或?qū)е率褂媚膫€(gè)工具的決策點(diǎn)模糊不清。
如果人都無(wú)法明確說(shuō)出某個(gè)情況該用哪個(gè)工具,AI Agent 更做不到。
Examples
Few-shot prompting 是公認(rèn)的有效方法。
但 Anthropic 提到,不建議把一堆邊緣案例塞進(jìn)提示詞,試圖闡述 LLM 應(yīng)該遵循的每條規(guī)則。
相反,應(yīng)該想辦法構(gòu)建一組多樣的、典型的示例,有效展示 Agent 的預(yù)期行為。
對(duì) LLM 來(lái)說(shuō),示例就是一圖勝千言。
從預(yù)處理到即時(shí)策略
傳統(tǒng)做法是用基于向量的檢索在推理前就把相關(guān)上下文準(zhǔn)備好。
但現(xiàn)在越來(lái)越多人在用 Just-in-time 上下文策略。
核心思路:不預(yù)處理所有相關(guān)數(shù)據(jù),而是維護(hù)輕量級(jí)標(biāo)識(shí)符(文件路徑、存儲(chǔ)查詢、網(wǎng)頁(yè)鏈接等),用工具在運(yùn)行時(shí)動(dòng)態(tài)加載數(shù)據(jù)到上下文。
Anthropic 自己的 Claude Code 就是這么做的。模型可以寫(xiě)目標(biāo)查詢、存儲(chǔ)結(jié)果,利用 Bash 命令如 head 和 tail 分析大量數(shù)據(jù),而不用把完整數(shù)據(jù)對(duì)象加載到上下文。
這種方式模仿人類(lèi)認(rèn)知:我們不會(huì)記住整個(gè)信息語(yǔ)料庫(kù),而是引入外部組織和索引系統(tǒng)(文件系統(tǒng)、收件箱、書(shū)簽)按需檢索相關(guān)信息。
這種方法還實(shí)現(xiàn)了 Progressive Disclosure ——讓 Agent 通過(guò)探索逐步發(fā)現(xiàn)相關(guān)上下文。
每次交互產(chǎn)生的上下文為下一個(gè)決策提供信息:文件大小暗示復(fù)雜度;命名規(guī)范暗示用途;時(shí)間戳可以代表相關(guān)性。
當(dāng)然,這有權(quán)衡:運(yùn)行時(shí)探索比檢索預(yù)計(jì)算數(shù)據(jù)慢。
而且需要有非常精妙的工程,確保 LLM 有正確的工具和啟發(fā)式方法來(lái)有效找到信息。
最有效的 Agent 可能采用混合策略:部分?jǐn)?shù)據(jù)預(yù)先檢索以提高速度,部分由 Agent 自主探索。
Claude Code 就是混合模型:CLAUDE.md 文件會(huì)直接放入上下文,而 glob 和 grep 等原語(yǔ)讓它能即時(shí)導(dǎo)航環(huán)境、檢索文件。
長(zhǎng)時(shí)間任務(wù)的上下文工程
對(duì)于需要幾十分鐘到幾小時(shí)連續(xù)工作的長(zhǎng)時(shí)間任務(wù),Agent 需要專(zhuān)門(mén)技術(shù)來(lái)應(yīng)對(duì)上下文窗口限制。
Anthropic 提供了三個(gè)策略:
Compaction
把接近上下文窗口限制的對(duì)話進(jìn)行總結(jié),用摘要重新啟動(dòng)新的上下文窗口。這通常是上下文工程的第一個(gè)杠桿。
在 Claude Code 中,會(huì)把消息歷史傳給模型總結(jié)壓縮關(guān)鍵細(xì)節(jié)。模型保留架構(gòu)決策、未解決的 bug、實(shí)現(xiàn)細(xì)節(jié),同時(shí)丟棄冗余的工具輸出或消息。然后 Agent 用壓縮后的上下文加最近訪問(wèn)的 5 個(gè)文件繼續(xù)工作。
壓縮的藝術(shù)在于選擇保留什么、丟棄什么。過(guò)度激進(jìn)的壓縮可能丟失微妙但關(guān)鍵的上下文。
Structured Note-taking
也叫智能體記憶。Agent 定期把筆記寫(xiě)到上下文窗口外的持久化內(nèi)存中,之后再拉回上下文窗口。
Claude Code 創(chuàng)建待辦清單,或你的自定義 Agent 維護(hù) NOTES.md 文件,這種簡(jiǎn)單模式讓 Agent 跨復(fù)雜任務(wù)追蹤進(jìn)度,維護(hù)原本會(huì)在幾十次工具調(diào)用中丟失的關(guān)鍵上下文和依賴。
Sub-agent Architectures
與其讓一個(gè) Agent 維護(hù)整個(gè)項(xiàng)目的狀態(tài),不如讓專(zhuān)門(mén)的子智能體處理有清晰上下文窗口的聚焦任務(wù)。
主 Agent 用高層計(jì)劃協(xié)調(diào),子智能體執(zhí)行深度技術(shù)工作或使用工具查找相關(guān)信息。
每個(gè)子智能體可能廣泛探索,使用大量 token,但只返回結(jié)果的精簡(jiǎn)總結(jié)(通常 1,000-2,000 token)。
這實(shí)現(xiàn)了清晰的關(guān)注點(diǎn)分離——詳細(xì)搜索上下文隔離在子智能體內(nèi),主 Agent 專(zhuān)注于綜合和分析結(jié)果。
實(shí)踐建議
在上下文的不同組成部分(系統(tǒng)提示、工具、示例、消息歷史等)都要深思熟慮,保持信息豐富但緊湊。
選擇哪種方法取決于任務(wù)特征:
- 上下文壓縮適合需要大量來(lái)回的任務(wù),保持對(duì)話流
- 記筆記適合有清晰里程碑的迭代開(kāi)發(fā)
- 多智能體架構(gòu)適合并行探索有回報(bào)的復(fù)雜研究和分析
如何在擴(kuò)展交互中,保持連貫性,是構(gòu)建 Agent 的核心。
最后
Anthropic 在 Sonnet 4.5 發(fā)布時(shí),還在 Claude Developer Platform 上發(fā)布了公開(kāi)測(cè)試版的記憶工具,地址在:http://anthropic.com/news/context-management
通過(guò)基于文件的系統(tǒng)讓存儲(chǔ)和查詢上下文窗口外的信息變得更容易。同時(shí)也有記憶和上下文管理 cookbook,地址在:https://github.com/anthropics/claude-cookbooks/blob/main/tool_use/memory_cookbook.ipynb。






























