Skill Library Evolution
Nikola Balic (@nibzard)· established
问题
Agent常常在不同会话或工作流中处理相似问题。若缺少保存并复用可运行代码的机制,Agent每次都必须重新探索解决方案,这会浪费tokens与时间。企业期望Agent能够随时间逐步积累能力,而非每次会话都从零开始。
方案
Agent会将可运行的代码实现以可复用函数的形式持久化存储在skills/目录中。随着时间推移,这些实现会逐步演变为文档完善、经过测试的「技能」,成为Agent可以调用的高阶能力。
演进路径:
graph LR
A[临时代码] --> B[保存可行解决方案]
B --> C[可复用函数]
C --> D[带文档的技能]
D --> E[Agent能力]
基础模式:
# 会话1:Agent编写代码解决问题
def analyze_sentiment(text):
# 经实验验证的实现方案
response = llm.complete(f"Analyze sentiment: {text}")
return parse_sentiment(response)
# Agent保存可行解决方案
with open("skills/analyze_sentiment.py", "w") as f:
f.write(inspect.getsource(analyze_sentiment))
后续会话:Agent发现并调用已有技能
# Agent遍历skills目录
skills = os.listdir("skills/")
# 找到:['analyze_sentiment.py', 'extract_entities.py', ...]
# 导入并调用已有技能
from skills.analyze_sentiment import analyze_sentiment
result = analyze_sentiment("此处为客户反馈...")
带文档的演进版技能:
# skills/analyze_sentiment.py
"""
技能:情感分析
通过LLM补全和结构化解析分析文本情感。
参数:
text (str):待分析的文本
granularity (str):可选值为'binary'(二元)或'fine-grained'(细粒度),默认值:'binary'
返回值:
dict:{'sentiment': str, 'confidence': float, 'aspects': list}
示例:
>>> analyze_sentiment("产品很棒,发货速度快!")
{'sentiment': 'positive', 'confidence': 0.92, 'aspects': ['product', 'shipping']}
测试时间:2024-01-15
验证集成功率:94%
"""
def analyze_sentiment(text, granularity='binary'):
# 优化后的实现方案
pass
按需加载的渐进式披露(Imprint方案):
无需将所有技能加载到context中,而是将技能描述注入系统prompt,并提供load_skills工具来获取完整内容:
# skills/pdf-processing/SKILL.md
---
name: pdf-processing
description: 从PDF文档中提取文本和表格
metadata:
author: example-org
version: "1.0"
---
# 注入系统prompt
AVAILABLE_SKILLS = """
可用技能(使用load_skills工具查看完整内容):
- pdf-processing:从PDF文档中提取文本和表格
- slack-formatting:为Slack消息添加正确的mrkdwn格式
- large-file-handling:处理超出context窗口的大文件
"""
# 按需加载工具
def load_skills(skill_names):
"""将完整技能内容加载到context中。"""
for name in skill_names:
path = f"skills/{name}/SKILL.md"
# 读取并注入完整内容
渐进式披露的优势:
- 减少冲突或冗余的context内容
- 降低格式不一致问题(例如Markdown与Slack mrkdwn格式冲突)
- 上下文学习示例更聚焦于相关工具
通过技能懒加载MCP工具(Amp方案):
MCP服务器通常会暴露大量工具,这些工具会占用大量context资源。通过选择性工具加载,将MCP服务器与技能绑定:
// skills/chrome-automation/mcp.json
{
"chrome-devtools": {
"command": "npx",
"args": ["-y", "chrome-devtools-mcp@latest"],
"includeTools": [
"navigate_page",
"take_screenshot",
"new_page",
"list_pages"
]
}
}
Token节省示例:
- chrome-devtools MCP:26个工具 = 17k Token
- 懒加载子集:4个工具 = 1.5k Token(减少91%)
Agent最初只能看到技能描述,当调用技能时,仅会将指定的工具加载到context中。
如何使用
实现阶段:
-
临时编写 → 保存入库
- Agent编写代码解决即时问题
- 若解决方案验证可行,将其保存至
skills/目录 - 使用描述性文件名:例如
skills/pdf_to_markdown.py
-
已保存 → 可复用
- 重构代码以实现通用化(将硬编码值参数化)
- 添加基础错误处理逻辑
- 定义简洁清晰的函数签名
-
可复用 → 已文档化
- 添加包含功能用途、参数说明、返回值说明及使用示例的文档字符串(docstring)
- 列明所有前置条件或依赖项
- 记录最后一次测试或验证的时间
-
已文档化 → 核心能力
- Agent可通过目录遍历自动发现技能
- 技能纳入Agent的有效能力集合
- 技能可组合构建为更高级别的工作流
技能组织结构:
skills/
├── README.md # 可用技能索引目录
├── data_processing/ # 数据处理
│ ├── csv_to_json.py
│ └── filter_outliers.py
├── api_integration/ # API集成
│ ├── github_pr_summary.py
│ └── slack_notify.py
├── text_analysis/ # 文本分析
│ ├── sentiment.py
│ └── extract_entities.py
└── tests/ # 测试用例
└── test_sentiment.py # 技能验证测试用例
发现模式:
# Agent探索可用技能
def discover_skills():
"""列出所有可用技能及其描述。"""
skills = []
for root, dirs, files in os.walk("skills/"):
for file in files:
if file.endswith(".py") and file != "__init__.py":
path = os.path.join(root, file)
# 提取文档字符串(docstring)
with open(path) as f:
content = f.read()
docstring = extract_docstring(content)
skills.append({
'path': path,
'name': file[:-3],
'description': docstring.split('\n')[0] if docstring else ''
})
return skills
权衡
优势:
- 随时间逐步提升Agent能力
- 减少跨会话的重复问题解决工作
- 以代码形式构建组织级知识库
- 技能可被测试、版本化并持续改进
- 支持组合出更高级的能力
- 降低Token消耗(复用而非重写)
劣势:
- 需要遵循规范来保存和整理技能
- 技能可能会过时失效
- 需要配套的维护和测试基础设施
- 当技能数量增多时可能出现命名空间冲突
- 必须通过Prompt引导Agent在编写新代码前先检查已有技能
- 质量参差不齐(并非所有保存的代码都是优质代码)
维护要求:
- 定期审核技能的质量与相关性
- 搭建用于技能验证的测试框架
- 制定过时技能的淘汰政策
- 确立新技能的文档规范
- 通过版本控制追踪技能的演进过程
成功因素:
- 清晰的命名规范
- 从项目初期就做好优质文档
- 通过Prompt鼓励技能复用
- 定期对技能库进行审核与整理
- 为每个技能配备示例和测试用例
参考文献
关键词:
聚焦MCP技术相关工程实践,涵盖基于MCP的代码执行、内部智能体技能构建、高效MCP工具加载三类核心方向,关联复合工程模式、CLI优先技能设计等相关理念。
直译:
- 《Anthropic工程:基于MCP的代码执行》(2024)
- 《构建内部智能体:添加智能体技能支持》(链接:https://lethain.com/agents-skills/)——威尔·拉尔森(Imprint,2025)
- 《高效MCP工具加载》(链接:https://ampcode.com/news/lazy-load-mcp-with-skills)——Amp(尼科莱,2025)
- 相关内容:复合工程模式、CLI优先技能设计
来源摘要
正在获取来源并生成中文摘要…
来源: https://www.anthropic.com/engineering/code-execution-with-mcp