主题
ADR-0001: Hermes 作为运行时
- 状态:Accepted
- 日期:2026-04-28
- 决策者:项目团队
背景
Agent 运行时(agent loop / tool dispatch / Skill 注册)需要选型。候选:
- Claude Code — Anthropic 官方 CLI,自带 Skill / MCP 生态
- Hermes (内部框架) — 团队已有的内部 Agent 框架,配套 Nous Research Hermes LLM
- PydanticAI / LangGraph / CrewAI — OSS 框架
- 从零自研 agent loop — Python
while循环 + JSON Schema
决策
采用 Hermes 作为运行时,配套使用 Hermes (Nous) 作为默认 LLM。
理由
- 团队已熟悉 — 已用于交易相关任务,上手成本低
- Skill + Competence 原语契合 — Competence (知识 + 来源) 天然支持 citation
- 可控 — 内部框架可改,不被外部 vendor 牵制
- 多语言支持 — Python + JS 都能写 Skill,匹配 A 股域 (Python data + 可能的 CF Worker JS)
取舍 (Trade-offs)
❌ 质量风险:Hermes (Nous) LLM 在长上下文 / 表格理解 / 严格 citation 上不如 Claude / GPT。
- 缓解:引入 Model Router (~20 LOC),按任务类路由:
- 简单调度 → Hermes
- PDF 研报解析 → Claude Sonnet / GPT-4o
- 综合写作 → Claude Opus / GPT-4
❌ 生态较小:Hermes 是内部框架,没有外部 Skill 市场。
- 缓解:参考公开 Claude Code Skill repo 的设计模式(
Tushare-Finance-Skill-for-Claude-Code、BitSoulStockSkill)。
❌ Skill 是裸 Python/JS 函数,没有强制 Tool 层。
- 缓解:通过约定强制 L3 Tools 分层。Lint 规则禁止 Skills 直接 import
tushare/akshare。
替代方案为什么没选
- Claude Code:要把 Hermes 弃用、放弃团队积累,迁移成本太高
- PydanticAI / LangGraph:又引入一个外部依赖;Skill / Competence 概念要重新表达
- 从零自研:重复造轮子,没必要
影响
- 所有运行时代码基于 Hermes API
- Skill / Competence 的定义和注册走 Hermes 通道
- 实现计划里需要一个 discovery task 弄清 Hermes 当前 API 的能力(Competence registry?Trace observability?)
详见 03 — Agent 框架层 §7 Open Items。