节约上下文的设计技巧:让 Skill 更高效
智能体的工作台空间是有限的。每次读取文件、调用工具、生成回复,都会往工作台上堆东西。当工作台被塞满,智能体就无法继续工作,只能中断任务或丢弃部分信息。
智能体的工作台空间是有限的。每次读取文件、调用工具、生成回复,都会往工作台上堆东西。当工作台被塞满,智能体就无法继续工作,只能中断任务或丢弃部分信息。
我自己以前也踩过同样的坑。最常见的情况是:Skill 需要处理大量文件,智能体老老实实地把每个文件都读进来,上下文几轮就爆了。比如让 AI 分析一个文件夹里的 50 份报告,它每读一份就占用几千字的上下文空间,还没分析到第十份,工作台就满了。
今天介绍几个在 Skill 设计中节约上下文的实用技巧。我自己做 Skill 时一直坚持一条原则:能在上下文外面干的活,就不要搬到上下文里面来干。
用脚本替代智能体读文件
我自己试下来,最直接的节约方式,就是不让智能体亲自读文件。
举个例子。你做了一个 Excel 数据分析 Skill,用户给了一份包含十万行销售记录的表格。如果让智能体调用工具把表格内容读进来,光这一步就能把整个上下文撑爆。但实际上,智能体需要的并不是十万行原始数据,而是「上月总销售额是 320 万,同比增长 12%,退货率 3.2%」这样的结论。
解决办法是写一个脚本,让脚本在上下文之外完成数据处理,只把结果输出给智能体。比如在一个数据分析 Skill 的 SKILL.md 中,你可以这样写:
运行 scripts/analyze_sales.py 处理数据文件: python scripts/analyze_sales.py [数据文件路径] 脚本会输出关键指标的汇总结果,请基于这些结果进行后续分析。
脚本在后台读取十万行数据、计算各种指标,最后只输出几行汇总数字。智能体拿到的是精简后的结论,而不是原始数据。上下文几乎没有额外消耗。
同样的思路适用于很多场景:分析日志文件时,用脚本统计错误类型和频次,而不是让智能体读整个日志;处理图片文件夹时,用脚本批量提取文件名和元信息,而不是让智能体逐个打开。凡是数据量大但结论简短的环节,都可以交给脚本。
在脚本中调用 AI 大模型
上面的方法有一个前提:任务本身是纯计算的,脚本可以直接算出结果。但有些任务需要 AI 的理解和判断能力,比如阅读一份简历并提取关键信息,或者总结一篇文档的核心观点。普通脚本做不了这种事,必须用到大模型。
那怎么办?答案是:让脚本去调用另一个 AI 大模型来帮忙。
这里的关键在于理解整个流程中有两个 AI 在工作,各自扮演不同的角色。把完整的流程拆开来看:
用户向智能体提出任务,比如「帮我把这 50 份文档各写一段摘要」。智能体读取 SKILL.md,发现里面写着「对每个文件运行 summarize_file.py 脚本」。于是智能体不自己去读那 50 份文档,而是对每个文件执行一次这个脚本。
脚本开始工作。它打开一份文档,读取里面的内容,然后通过网络把这些内容发送给另一个 AI 大模型,这是一个独立的 AI,不是当前正在工作的智能体,请求它生成摘要。
那个独立的 AI 大模型处理完后,把摘要结果返回给脚本。脚本把结果保存到一个输出文件里。50 个文件都处理完后,智能体只需要读取 50 份精简后的摘要文件,就可以继续后续工作了。
关键之处在于:智能体自己没有去读那 50 份原始文档,它只是指挥脚本去干活。而脚本调用的那个 AI 大模型,跟当前智能体的上下文是完全隔离的,它有自己独立的对话空间。所以无论那 50 份文档有多长,都不会占用智能体的上下文。最终进入智能体上下文的,只有 50 份短短的摘要。
你可能想问:脚本是怎么「调用另一个 AI 大模型」的?我们平时用 AI 都是打开网页或 App 跟它聊天,脚本又没有手,怎么跟 AI 对话?