Skip to content

技能开发

Investment Agent 的技能是一组可被 Agent 读取的 Markdown 指令。它们不直接执行业务动作,而是提供分析框架、决策准则和上下文加载方式。

一个技能在运行时会被解析为以下核心字段:

字段说明
slug / id技能业务标识,通常来自目录名或 name
name技能名称,用于 UI 展示和 prompt 中的 <skill name="...">
description技能描述,用于技能面板 hover 和 prompt 元信息
prompt技能主体指令,最终提供给 Agent
isEnabled用户全局启用状态
source技能来源,例如官方内置或用户自定义

Investment Agent 支持自定义技能开发,技能以 Markdown 文件形式组织:

# skills/custom/SKILL.md
---
name: custom-analysis
description: 自定义分析技能
version: "1.0.0"
---
# 自定义分析技能
技能描述和使用指南...

建议 description 写成一句清晰的适用场景说明。它会直接出现在聊天输入框技能面板的 hover 提示中,帮助用户判断何时启用该技能。

在技能中引用详细的策略文档:

skills/
├── stock-analysis/
│ ├── SKILL.md # 技能主文件
│ └── references/
│ ├── UVXY.md # UVXY 策略指引
│ └── VIX.md # VIX 产品分析

聊天输入框提供两类技能选择:

入口状态字段请求参数语义
ActionBar CheckboxsessionActiveSkillsskills当前会话启用的技能 slug 列表
ActionBar SparklessessionExplicitSkillexplicitSkill下一条消息优先使用的单个技能
/ slash commandsessionExplicitSkillexplicitSkill下一条消息优先使用的单个技能

skillsexplicitSkill 的生命周期不同:

  • skills 是会话级状态,会持续影响后续消息。
  • explicitSkill 是单次状态,发送后自动清除;发送失败时会恢复,方便用户重试。

示例请求:

{
"sessionId": "inbox_xxx",
"agentId": "investment_advisor",
"model": "Kimi-K2.5",
"stream": true,
"messages": [
{ "role": "user", "content": "分析下阿里巴巴" }
],
"skills": [
"fundamental-analysis",
"risk-assessment",
"valuation-models"
],
"explicitSkill": "risk-assessment"
}

Claude API 接收:

  • skills?: string[]
  • explicitSkill?: string

处理流程:

  1. 读取用户全局启用技能。
  2. 如果请求携带 skills,按 slug 过滤可注入技能。
  3. 如果请求携带 explicitSkill,单独解析该技能。
  4. 普通技能构造成稳定的 skillsSystemPrompt
  5. 显式技能通过 explicitSkillDirective 注入到用户 prompt,而不是 system prompt,以保留 prompt cache。
  6. 显式技能会从普通技能列表中移除,避免重复注入。

explicitSkill 不存在或没有 prompt 时,Claude API 会返回错误:

code说明
unknown_skill请求的技能 slug 不存在
empty_skill_prompt技能存在但没有可注入 prompt

Hermes API 同样接收:

  • skills?: string[]
  • explicitSkill?: string

Hermes 的技能以工具形式注册。引擎启动时会:

  1. 扫描用户技能目录和内置技能目录。
  2. 根据 skills 构造 enabledSlugs
  3. 如果存在 explicitSkill 且不在 enabledSlugs 中,将它追加进去,保证单次指定技能可用。
  4. 注册 skills_listskill_viewskill_manage 等技能工具,由 Agent 按需查看技能内容。

所有工具遵循统一的接口设计:

接口说明
LangChain ToolsLangChain/LangGraph 引擎使用
Claude ToolsClaude Agent SDK 引擎使用
Hermes ToolsHermes 轻量级引擎使用

工具定义包含:

  • 输入参数 Schema(Zod/TypeBox)
  • 描述文档(供 AI 理解用途)
  • 执行器(业务逻辑实现)
  • 错误处理与日志记录
  • 如果请求里只有 skills 没有 explicitSkill,通常表示用户只是勾选了技能,没有通过 / 或 Sparkles 指定单次技能。
  • 如果 UI 已显示技能标签但请求没有 explicitSkill,优先检查 sessionExplicitSkill 是否被提前清理。
  • 如果 Claude 没有按指定技能输出,检查服务端日志中是否存在 Using explicit skill: <slug>
  • 如果 Hermes 看不到技能,检查注册时的 enabledSlugs 是否包含该 slug。