记忆提炼Skills
程序性记忆提炼(Agent Skills)把Agent已经完成的任务过程整理成可复用的技能,下次遇到类似任务时Agent可以直接调用该技能。
主要作用
作用 | 说明 |
复用成功经验 | 把一次任务的执行过程整理成通用步骤,减少重复探索。 |
持续完善方法 | 同类任务产生新的有效经验时,可以补充并更新已有Skill。 |
从失败中学习 | 失败记录可以沉淀为pitfalls,提醒Agent避开已经发生过的问题。 |
按任务检索 | Agent收到新任务时,可以根据任务描述找到最相关的Skill。 |
便于共享和审查 | Skill可以查看完整内容,也可以导出为Markdown,供团队复用。 |
Skill包含什么
内容 | 作用 |
name | Skill名称。 |
when_to_use | 适合在什么任务中使用。 |
inputs | 执行前需要提供的信息。 |
outputs | 执行完成后应得到的结果。 |
steps | 可直接执行的操作步骤。 |
caveats | 使用时需要注意的事项。 |
pitfalls | 从失败记录中提炼出的避坑提示。 |
version | Skill当前版本;经验更新后版本会递增。 |
适用场景
客服Agent:退款、改签、账号恢复和工单升级流程。
企业Agent:报表生成、数据核对、审批提交和系统巡检。
Coding Agent:发布、排障、代码审查和测试修复流程。
运营Agent:内容发布、活动配置和数据复盘流程。
浏览器Agent:网页采集、表单填写和后台配置流程。
示例
下面以"导出指定月份和地区的销售报表"为例,演示如何写入一次程序性记忆、查看生成的Skill,并在新任务中检索它。
步骤一:配置服务地址和认证信息
export MEMORY_BASE_URL="https://api-longmemory-cn-beijing.opentrust.net"
export MEMORY_API_KEY="<YOUR_API_KEY>"
export AGENT_ID="demo-report-agent-001"步骤二:写入程序性记忆
程序性记忆应包含完整的任务目标、关键步骤和执行结果。memory_type 必须设置为 procedural_memory,并提供稳定的 agent_id。
curl -sS -X POST "$MEMORY_BASE_URL/memories" \
-H "Authorization: Token $MEMORY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"agent_id": "demo-report-agent-001",
"memory_type": "procedural_memory",
"messages": [
{"role": "user", "content": "任务:导出指定月份和地区的销售报表为 CSV。"},
{"role": "assistant", "content": "步骤 1:打开报表页面,确认月度销售报表可见。"},
{"role": "assistant", "content": "步骤 2:选择月度销售报表,设置目标月份。"},
{"role": "assistant", "content": "步骤 3:设置地区筛选条件,等待报表完成刷新。"},
{"role": "assistant", "content": "步骤 4:选择导出为 CSV,并等待文件下载完成。"},
{"role": "assistant", "content": "步骤 5:核对下载文件的行数与页面汇总数量一致,任务完成。"}
]
}'线上写入采用异步处理,接口会先返回:
{
"results": [
{
"message": "Memory processing has been queued for background execution",
"status": "PENDING",
"event_id": "<event_id>",
"id": null
}
]
}PENDING 表示程序性记忆已经进入处理队列。Skill会在记忆处理和质量检查完成后生成;内容过少或缺少明确步骤的记录可能不会生成Skill。
步骤三:查看生成的Skill
稍等片刻后,查询该Agent的Skill列表:
curl -sS "$MEMORY_BASE_URL/skills?agent_id=$AGENT_ID&brief=true" \
-H "Authorization: Token $MEMORY_API_KEY"返回结果示例:
{
"results": [
{
"id": "<skill_id>",
"name": "export_report_to_file",
"when_to_use": "Use when the user requests to download or export a specific report in a particular file format.",
"version": 1
}
]
}brief=true 只返回轻量目录,适合Agent先判断应该使用哪项Skill。获取完整内容时,将 <skill_id> 替换为列表返回的ID:
export SKILL_ID="<skill_id>"
curl -sS "$MEMORY_BASE_URL/skills/$SKILL_ID" \
-H "Authorization: Token $MEMORY_API_KEY"一次端到端验证中生成的完整Skill经精简后如下。具体名称和文字可能随模型与输入内容变化:
{
"id": "<skill_id>",
"name": "export_report_to_file",
"version": 1,
"inputs": [
{"name": "report_name", "desc": "需要选择的报表名称"},
{"name": "report_parameters", "desc": "月份、地区等筛选条件"},
{"name": "export_format", "desc": "需要导出的文件格式"}
],
"outputs": [
{"name": "downloaded_file", "desc": "下载到本地的报表文件"}
],
"steps": [
"打开报表页面并确认报表列表可见",
"选择目标报表并设置月份、地区等参数",
"等待报表根据筛选条件完成刷新",
"选择导出格式并完成文件下载",
"核对下载文件与页面汇总数据是否一致"
],
"caveats": [
"报表未完成刷新前不要开始导出",
"下载完成后应校验文件完整性"
]
}步骤四:在新任务中检索Skill
Agent收到相似任务时,可以直接用任务描述检索相关Skill:
curl -sS -X POST "$MEMORY_BASE_URL/skills/search" \
-H "Authorization: Token $MEMORY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"task": "下载一份销售报表并导出为表格文件",
"agent_id": "demo-report-agent-001",
"top_k": 5,
"smart_select": false
}'一次端到端验证中的精简返回如下。score 会随输入、模型和数据变化:
{
"results": [
{
"id": "<skill_id>",
"name": "export_report_to_file",
"version": 1,
"score": 0.6626
}
],
"selection": null
}如果设置 smart_select: true,系统还可以从候选结果中选择与当前任务最相关的Skill,并给出使用顺序。该模式适合一个任务可能需要组合多项Skill的场景。
Skill如何持续完善
补充新的成功经验
同一个Agent再次完成相似任务时,继续以 procedural_memory 写入新的执行过程。系统会判断它是否属于已有Skill,并在新信息确实有价值时更新原Skill。
例如,第二次执行增加了"地区筛选"和"导出后核对行数"两个步骤,结果是同一个Skill从version 1更新到version 2,来源记忆从1条增加到2条。
记录失败经验
如果一次执行失败,可以在写入时增加以下字段:
"metadata": {
"task_outcome": "failure"
}例如,Agent在报表尚未完成刷新时就开始导出,导致文件为空。系统可以把这类失败原因整理到Skill的 pitfalls 中,后续执行相似任务时用于避坑。
其他使用方式
查看完整Skill列表
curl -sS "$MEMORY_BASE_URL/skills?agent_id=$AGENT_ID&brief=false" \
-H "Authorization: Token $MEMORY_API_KEY"导出Skill
导出单个Skill为Markdown:
curl -sS "$MEMORY_BASE_URL/skills/$SKILL_ID/export" \
-H "Authorization: Token $MEMORY_API_KEY"导出某个Agent的全部Skills:
curl -sS "$MEMORY_BASE_URL/skills/export?agent_id=$AGENT_ID" \
-H "Authorization: Token $MEMORY_API_KEY" \
-o skills.zip服务控制台 WEBUI 操作
也可在控制台的数据 > 技能页面查看、搜索和导出 Skills。
使用建议
记录完整任务过程:至少包含任务目标、多个关键步骤和最终结果。
保持Agent ID稳定:Skills按 agent_id 隔离,同一个Agent应持续使用同一标识。
一次只记录一个任务:不要把多个无关任务混在同一条程序性记忆中。
步骤要包含结果:只记录"点击按钮"价值有限,最好同时记录页面变化、返回结果或校验结论。
优先沉淀重复任务:报表生成、发布、巡检、客服流程等重复任务最容易产生持续价值。
允许系统跳过低价值记录:信息过少、只有一步或无法复用的执行过程,可能只保存程序性记忆而不生成Skill。
先检索目录,再取完整内容:使用 brief=true 减少传给Agent的上下文,只在需要时读取完整步骤。