自研上下文管理熬到崩溃,Claude Agent SDK真香
文章目录
- 1 先唠唠我为啥把LangGraph给弃了
- 1.1 一开始的想法有多美好
- 1.2 现实就有多打脸
- 2 我找到的救命神器:五级上下文压缩
- 2.1 第一级:大文件自动存硬盘
- 2.2 第二级:长结果掐头去尾
- 2.3 第三级:过期内容自动清走
- 2.4 第四级:历史对话折叠成摘要
- 2.5 第五级:终极压缩救大命
- 3 我的研报Agent架构长啥样
- 3.1 MCP工具:6个就够,多了没用
- 3.2 7个Skills:把流程拆明白
- 3.3 用提示词做编排,比画状态图爽多了
- 4 踩过的那些坑,个个都能给我整emo
- 4.1 环境变量的坑,差点给我整破防
- 4.2 Agent总干一半跑路怎么办
- 5 跑通之后的真心话
- 5.1 不崩的感觉,真的太爽了
- 5.2 别没事自己造基础设施
P.S. 无意间发现了一个巨牛的人工智能教程,非常通俗易懂,对AI感兴趣的朋友强烈推荐去看看, 传送门https://blog.csdn.net/HHX_01
1 先唠唠我为啥把LangGraph给弃了
1.1 一开始的想法有多美好
前段时间折腾一个金融研报自动生成的项目。
最开始用LangGraph搭的,配的qwen3-max。
想法很简单:让Agent自动抓三家公司的三年财务报表,算指标、画图表,最后组装成完整研报。
我当时都想好了,等做出来直接解放双手,上班摸鱼都有底气了。
1.2 现实就有多打脸
结果刚跑起来就给我浇了盆冷水:上下文直接炸了。
256K的上下文窗口,听着像个大平层。
结果三家公司的三年三张报表一塞,直接变群租房,连下脚的地方都没有。
一家公司一年的资产负债表就上百个字段。
乘三家乘三年,再算上Agent的推理记录,token直接指数级往上窜。
别说写研报了,连原始数据都装不下。
合着我充的token全用来听模型报“溢出”了是吧?
当时我还不信邪,自己手搓了一套节点间的文件传递逻辑。
每个节点算完存本地文件,上下文只留路径。
听起来简单对吧?实际操作起来边界情况多到离谱。
不是读不到文件就是传错路径,天天跟bug打架。
那阵子我天天怀疑人生,我到底是写Agent的,还是专门修数据管道的?
2 我找到的救命神器:五级上下文压缩
后来偶然摸到了Claude Agent SDK。
看到它自带五级渐进式上下文压缩的时候,我差点当场泪目。
这不就是我熬了好几个夜手搓的东西吗?人家直接做进SDK里了,还比我完善一万倍。
2.1 第一级:大文件自动存硬盘
工具返回的结果超过5万字符,系统自动把完整内容存到磁盘。
上下文里只留个文件指针,告诉你东西在哪。
就像你办公桌放不下厚文件,自动给你塞抽屉,桌上只留个便签。
以前我得自己写代码塞抽屉,现在人家自动帮你收拾,省老事了。
2.2 第二级:长结果掐头去尾
对于不算特别长但也占地方的输出,自动保留头部和尾部,中间省略。
就像看长帖子只看开头和结尾。
重点信息没丢,还省了不少空间。
2.3 第三级:过期内容自动清走
给历史工具结果设了保质期,超时的直接清空内容,只留个标记。
相当于工作台只留最近用的文件,更早的都收去储物柜。
桌面永远清爽,不用你自己收拾。
2.4 第四级:历史对话折叠成摘要
把之前所有的推理、工具调用记录,压缩成一段简短的摘要。
就像聊天记录太长了,给你生成个重点回顾。
不用翻几百条消息找信息,一眼就能看明白之前干了啥。
2.5 第五级:终极压缩救大命
真到了极端情况,直接fork个子Agent。
用大模型把整个历史消息浓缩成高度摘要,永久替换原上下文。
这招破坏力最强,但架不住救命啊,总比直接溢出崩了强。
这五级策略层层递进,SDK后台自己管理,开发者完全不用操心。
我当时就一个想法:早知道有这东西,我之前熬那几个夜图啥啊?
3 我的研报Agent架构长啥样
顺着这个SDK,我搭了个叫FinScribe的项目。
整体架构很清晰,分三层:工具层、技能层、编排层。
3.1 MCP工具:6个就够,多了没用
首先是数据层,我封装了6个MCP工具。
5个是AKShare的财务数据接口,1个是联网搜索。
工具这东西真不是越多越好。
你给Agent塞一堆工具,它先得花一半上下文认工具,正事都没精力干了。
就像你上班背一书包工具,真要用的时候找半天,还不如就带几样常用的。
这里有个核心细节:工具只返回文件路径,不返回完整数据。
要是直接把整张表的内容返回,瞬间就能把上下文塞满。
返回路径,Agent需要的时候自己读,压缩机制自动接管,稳得很。
还有异常处理千万别抛异常,全在函数内部接住,返回错误文本让Agent自己判断。
不然一个接口崩了,整个Agent直接停摆,那才叫亏大了。
3.2 7个Skills:把流程拆明白
工具解决了“拿数据”的问题,研报的完整流程,我拆成了7个标准化的Skill。
从竞争对手研究、数据采集、指标计算,到可视化、估值、写报告、最终组装,一步一个Skill。
Skill是按需加载的,平时不在上下文里占地方。
需要执行哪个任务,就把对应的操作手册调出来。
这就像办公室有个文件柜,平时关着不占地,需要哪本拿哪本。
比把所有说明书都摊在桌上强多了,不然桌子上全是纸,你连键盘都摸不到。
每个Skill的描述一定要写清楚。
Agent就是靠描述判断什么时候调用这个Skill,写得模模糊糊的,Agent根本认不出来,等于白写。
3.3 用提示词做编排,比画状态图爽多了
以前用LangGraph,我得画状态图,定义节点定义边,各种条件跳转,跟画工程图似的。
现在倒好,直接把四阶段的工作流写进系统提示词里,让Agent自己调度。
金融研报这流程本来就是固定的线性流程,没必要搞那么重的编排。
简单直接才是王道,省下来的时间喝杯奶茶不好吗?
当然这里也有坑,后面踩坑部分细说。
4 踩过的那些坑,个个都能给我整emo
4.1 环境变量的坑,差点给我整破防
这个SDK兼容Anthropic协议,所以国产模型都能接,切换靠环境变量就行。
我最开始用setdefault设置变量,结果死活不生效。
排查了半天才发现,这函数只在变量不存在的时候设置。
已经存在的话直接静默跳过,连个提示都没有。
合着我搁这敲了半天代码,人家根本不理我,跟我玩沉默是金呢?
后来直接改成直接赋值,管你有没有,直接覆盖,世界瞬间清净了。
4.2 Agent总干一半跑路怎么办
最早的版本,Agent启动完第一阶段的两个任务,直接说一句“请稍候”就结束回合了。
后台任务跑完了,Agent也没影了,后面三个阶段直接没人管了。
合着我雇了个项目经理,开了个头就打卡下班了是吧?
后来我在提示词里硬加了一句:不许中途结束回合,每个任务做完、验证完产物存在,再进下一阶段。
加完之后,Agent终于老老实实在原地等着干活了。
还有个小技巧,让Agent每个阶段结束都检查一下输出文件有没有生成。
不然Agent有时候会幻觉,以为任务做完了,实际上脚本早崩了,白等半天。
5 跑通之后的真心话
5.1 不崩的感觉,真的太爽了
我拿青岛啤酒测了一下,分析2024和2025年的数据。
整个流程跑下来,Agent执行了三百多条消息。
生成了56个CSV文件,还有图表和最终的完整研报。
从头到尾,一次上下文溢出都没出现。
换以前LangGraph那套,光这56个CSV的原始数据就把窗口撑爆了,根本跑不完。
5.2 别没事自己造基础设施
项目跑通之后,我最大的感受不是这个SDK有多牛。
是真的别自研基础设施。
上下文管理这种事,本来就是SDK该干的活。
你一个写业务的,再怎么搓,也搓不过人家专门的工程团队天天迭代。
就像你开个餐馆,没必要自己去造冰箱,买个现成的不好吗?
省下来的精力好好研究菜谱、打磨菜品,不比啥都强。
把精力集中在业务逻辑上,才是正经事。
P.S. 无意间发现了一个巨牛的人工智能教程,非常通俗易懂,对AI感兴趣的朋友强烈推荐去看看,传送门https://blog.csdn.net/HHX_01