编写一个优秀的 Agent Skill(通常称为 Tool 或 Function),本质上是给大模型(LLM)写一份极其精准的“外挂说明书”。模型会根据你提供的描述(Description)来决定何时调用它。
以下是编写高质量 Agent Skill 的标准框架和实战案例。
1. 核心结构:JSON Schema
大多数 Agent 框架(如 LangGraph, AutoGPT, 或 OpenAI Assistants)都采用 JSON Schema 来定义技能。
示例:一个“复杂数据查询”技能
JSON
{
"name": "query_inventory_db",
"description": "当用户询问特定商品的库存数量、仓库位置或补货状态时使用。支持模糊搜索商品名称。",
"parameters": {
"type": "object",
"properties": {
"item_name": {
"type": "string",
"description": "商品的全称或关键词,例如 'iPhone 15 Pro'"
},
"warehouse_region": {
"type": "string",
"enum": ["华东", "华北", "华南", "海外"],
"description": "可选:指定查询的区域。若用户未提及,则默认为全区。"
},
"include_out_of_stock": {
"type": "boolean",
"description": "是否包含缺货商品,默认为 true。"
}
},
"required": ["item_name"]
}
}
2. 编写技能的“黄金准则”
为了让 Agent 不“乱搞”,请遵循以下逻辑:
| 维度 | 建议 | 错误做法 |
| 描述 (Description) | 场景化:说明“在XX情况下,当用户想要XX时,调用此工具”。 | “这是一个搜索工具。”(太模糊) |
| 参数命名 | 使用具有语义的变量名,如 arrival_date 而非 date1。 |
使用 arg1, input 等无意义词汇。 |
| 边界限制 | 在描述中明确**“不能做什么”**。例如:“仅支持 2023 年以后的数据”。 | 没有任何约束,导致模型尝试越权查询。 |
| 错误处理 | 技能执行失败时,返回清晰的文本,如“未找到该用户,请核对 ID”。 | 只返回一个错误代码 500。 |
3. 三大实战案例
A. 搜索类(Agent 的“眼睛”)
描述: “当用户提出的问题涉及实时新闻、当前的股票价格,或模型知识库截止日期(2023年10月)之后发生的事件时,请调用此工具。请尽量提取用户问题中的核心实体作为关键词。”
B. 执行类(Agent 的“手”)
描述: “用于向指定的电子邮箱发送正式通知。在调用此工具前,必须已经确认了收件人地址、邮件主题和正文内容。严禁用于发送营销垃圾邮件。”
C. 逻辑类(Agent 的“计算器”)
描述: “用于计算复杂的财务比例(如 ROI, ROE)。输入原始财务数值,输出格式化的百分比分析报告。不要尝试用它处理非财务数据。”
4. 进阶技巧:Prompting in Description
你可以在描述里直接对模型下达“心法”:
“注意:如果用户没有提供
user_id,请先询问用户 ID,不要尝试猜测或伪造。”
这种“反向约束”能极大地提高 Agent 的交互质量,避免模型在信息不足时强行调用接口。
正文完
可以使用微信扫码关注公众号(ID:xzluomor)