我假设你已经能让 LLM 对某只股票说出一些有见地的话了。这谁都能做到。但那不是重点。
重点在于那个“框架”——包裹在模型外的那一层,它决定了你的分析师是一个你信赖的得力助手,还是一个语法不错但输出随机的数字生成器。模型是整个体系中最容易替换的部分。

三个部分:
- 如何正确运行它
- 如何把它训练成一个金融机器(真正的优势所在)
- 能扩展它的代码库和服务。
请把中间部分读两遍。
非投资建议。请自行研究。我的个人项目 - @coldvisionXYZ
第一部分:运行它,并理解你在运行什么
一行命令。它会将 Python、Node、Git 等所有依赖安装到 ~/.hermes/ 目录下:
1curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
支持 Linux、macOS、WSL2、通过 Termux 运行的 Android(自动检测)、原生 Windows(早期测试版,无需 WSL)。需要 Python 3.11 或更高版本。然后运行 hermes setup 启动向导,或者分别运行 hermes model、hermes tools、hermes gateway setup 进行配置。通过 hermes(经典 CLI)或 hermes --tui(推荐)来运行它。
提供者抽象层是隐藏的超能力
同一个运行时可以驱动 chat-completions API、Anthropic Messages、Codex Responses、一个进程外的 Codex 应用服务器路径以及 Bedrock。
工具调用格式和提供者的特性差异会通过传输适配器进行标准化,因此在循环层面,无论背后是什么模型,其表面接口看起来都是一样的。
这意味着提供者故障切换是真实可行的,并且切换模型真正做到了零代码修改。
对你的钱包来说,实际意义是:你不需要只运行一个模型。
在 config.yaml 的 auxiliary 配置下,每一个辅助任务——比如策展运行、视觉处理、嵌入、标题生成、会话搜索、压缩摘要器——都可以指定自己独立的提供者、模型、基础 URL 和推理努力程度。
这样,你昂贵的推理模型就永远不会把 Token 浪费在总结旧聊天记录或给会话命名上。
此外还有 smart_model_routing 功能,可以将困难的任务发送给强模型,而其他所有任务则交给廉价模型处理。
最经济合理的配置方案:将 Nous Portal(一个订阅,300+ 模型 + 用于网页/浏览器/图像/TTS 的工具网关)作为主要提供者,所有辅助工作固定使用一个廉价模型,本地 Ollama/vLLM 作为免费的备用方案。如果你使用本地模型,请注意 Ollama 默认使用 4k 上下文,并且会静默截断,请将 num_ctx 设置为 64k 或更高,否则 Agent 会变笨,而你可能会错误地归咎于模型。
在修改配置前你必须理解:提示词是缓存形状的
这是整个系统构建所围绕的不变原则,如果你不理解它,你的账单会悄无声息地翻十倍。
Hermes 将系统提示词分为三个层级:
- 稳定层
- 上下文层
- 易变层

稳定层承载了身份信息(SOUL.md)、仅针对已启用工具的工具指南、技能索引和环境提示。上下文层来源于当前工作目录。易变层则随着每次交互而变化。代码中明确划分层级只有一个原因:提示词前缀缓存的有效性。 提供者会缓存你提示词的前缀,并以极低的价格计费缓存 Token。每次稳定层发生变化,你都会使该缓存失效,并为所有内容支付全价。
因此,Hermes 几乎将修改上下文层视为神圣不可侵犯的行为。根据 Agent 自身的工程规则:它唯一会故意修改上下文层的情况是在压缩期间。那些会改变系统提示词状态的斜杠命令(如安装技能、切换工具)默认采用延迟失效策略——更改将在下一次会话中生效,并提供一个可选的 --now 标志,在你确实需要立即生效时使用。/skills install --now 是标准的“我接受缓存失效”模式。
作为分析师,你为什么要关心这个:你启用的每一个技能和每一个工具都存在于那个稳定层中,并且每次调用都会消耗前缀 Token。一个拥有 60 个已启用工具的臃肿 Agent,每次交互都在为这 60 个工具的描述付费。精简的工具集和按需加载的技能不仅仅是整洁,它们直接关系到成本模型。
压缩是谱系,而非截断
当上下文填满时,简单的 Agent 会丢弃旧的交互轮次并变得健忘。
Hermes 运行两个独立的压缩层:
- 一个网关“会话卫生”安全网,在 Agent 运行之前,基于粗略估计在上下文约 85% 时触发
- 真正的主力,循环内的 ContextCompressor,在上下文约 50% 时使用 API 报告的准确 Token 计数触发。
它总结中间的交互轮次,形成一条新消息,而不是删除它们,并且会话会跟踪每次压缩分裂的父子谱系。总结成为记录的一部分;原始内容则保存在谱系中。

有损是可以接受的,无损会导致内存溢出。
会话是基础设施,而不仅仅是记录。
它们携带来源标签和路由元数据,并且有一个面向模型的 session_search 工具,以及一个覆盖过去每一次交互的 FTS5 SQLite 索引。你的 Agent 可以在推理过程中回忆起“三周前我对 COIN 得出了什么结论”,这不是因为你把信息塞进了上下文,而是因为它可以查询自己的历史记录。
在哪里运行
六个终端后端:
- local
- Docker
- SSH
- Singularity
- Modal
- Daytona
Modal 和 Daytona 是无服务器的,环境在空闲时休眠,按需唤醒,两次运行之间的成本几乎为零。
一个 5 美元的 VPS 或一个休眠的无服务器盒子就是真正的“5 美元”。连接网关后,同一个 Agent 可以通过统一的会话路由在 20 多个平台(Telegram、Discord、Slack、Signal……)上运行,这样你就可以在手机上与它对话,而它则在云端盒子上工作。
会话通过使用 WAL 模式的 SQLite 和自定义的重试层来应对多进程写入争用,从而在重启后得以存活,因此 cron 作业和网关工作不会互相破坏。
第二部分:把它训练成一个金融机器
一个普通的 Agent 就像一个才华横溢但没有领域训练和判断纪律的实习生。你需要通过四个渠道来教育它:身份、剧本、记忆和标准。然后它会自我教育,而你真正的工作就变成了策展。
2a. 身份 - SOUL.md 是头号插槽
SOUL.md 字面上是系统提示词中的第一项,在工具之前,在技能之前,在任何东西之前。它是角色和价值观层。
对于一个金融分析师来说,这是你设定认知气质的地方,而不是填充个性废话。
比如:“你是一个持怀疑态度的买方分析师。你不信任整数和叙事。你绝不会说出一个不是从本次会话的工具中获取的数字。你宁愿说‘数据不足’也不猜测。你将自己先前的结论视为需要更新的先验。”
这位于缓存稳定的层级中,并且免费地为每一次交互着色。大多数人会保留 SOUL.md 的默认设置。对于一个分析师来说,这是你最具杠杆效应的 1500 个字符。
2b. 剧本 - 技能,以及为什么描述才是真正的工程
一个技能就是一个 SKILL.md 文件,包含名称、描述和步骤,存储在 ~/.hermes/skills/ 目录下。
只有简短的描述会存在于始终加载的技能索引中。
完整的步骤会在任务匹配时按需加载。因此,你的技能库可以非常庞大,而不会膨胀前缀。
这意味着描述是技能成败的关键。
它是一个路由器。如果描述含糊不清,Agent 要么在该加载时没有加载技能,要么在不该加载时加载了它。请像编写触发条件一样编写描述,而不是写摘要。
“当用户提到一个美国上市股票并希望获得基本面分析时使用” 优于 “分析股票”。
一个真实的分析师技能,注意将 2d 中的标准直接融入步骤中:
1---2name: equity-snapshot3description: 当用户提到一个美国上市股票代码并希望获得包含风险标记的基本面和价格分析时使用。4---56# 股票快照781. 通过 SEC 的 company_tickers 映射将股票代码解析为 CIK。绝不要猜测股票代码。92. 通过 EDGAR 获取最新的 10-K/10-Q 报告(收入、债务、自由现金流)。记录 accession 编号。103. 绝不要自己计算比率。调用 calc 工具计算市盈率、利润率、同比数据。114. 交叉核对两个来源的收入数据。如果存在分歧,报告差异,不要自行选择一个。125. 输出:核心观点(2 行)、3 个催化剂、3 个风险、估值看法、置信度 0-1,13 以及“什么单一数据点会推翻这个结论”。如果数据不足,返回“跳过”。
技能支持按平台启用/禁用、基于工具可用性的条件激活以及前置条件验证,因此一个技能可以声明“仅在 EDGAR 工具存在时可用”。
格式是开放的 agentskills.io 标准,因此你编写的内容可以移植到其他兼容的 Agent 上。
2c. 自我改进循环与维护
Agent 会自己编写技能。
在通过试错(通常是包含多次工具调用的任务)解决某个问题后,它会将有效的方法保存为 agent_created/ 目录下的 SKILL.md 文件。
技能管理工具有六个操作,你需要知道的是 patch:一种针对性的修复,优于完整的编辑重写,因为它节省 Token。
Agent 会在使用过程中就地优化自己的剧本。
如果不进行维护,自动技能会像肿瘤一样扩散。
你最终会得到几十个狭窄、重叠的剧本,它们消耗着前缀 Token 并污染路由器。

策展器负责处理这个问题,了解其机制很有价值。它不是一个 cron 守护进程,它基于空闲检查运行:大致是自上次运行以来过去了 7 天,并且 Agent 空闲了 2 小时以上时,一个后台分支会启动——使用自己的提示词缓存,绝不触及活跃的对话——运行一个 LLM 审查循环,自动归档陈旧的技能(到 .archive/ 目录,可恢复,不会丢失任何东西)。
配置位于 config.yaml 的 curator 部分:interval_hours、min_idle_hours、stale_after_days、archive_after_days。
把自动技能当作实习生的草稿。使用 hermes curator review 来仔细检查它们,固定那些真正优秀的技能使其得以保留,让其余的归档。策展这个循环就是教育。
一个未经策展的 Agent 会随着时间的推移变得更差,而不是更好。
2d. 标准 - 纪律,按节省成本排序
这些是你需要融入 SOUL.md 和每个 SKILL.md 的规则。按影响程度排序。
1. 禁止算术。 LLM 预测的是 Token。这是自信地给出错误数字的头号来源。干净的实现使用 execute_code(在 2e 中介绍),这样由确定性脚本完成数学计算,模型只负责决定输入和解释输出。
一个模型“估算”的 DCF 是虚构的;一个由脚本计算并由模型进行压力测试的 DCF 才是产品。
2. 每个数字都要有来源。 每个数字都必须附带其来源和截止日期返回,绝不裸奔。渲染器会丢弃任何没有来源的信息。
其回报是对抗性的:当两个来源不一致时,不一致本身就是信号。
3. 仅限时间点数据。 前瞻性偏差是每个回测和每个“它预测对了”截图的无声杀手。API 默认提供的是重述后的、当前的数据。
用截止日期标记事实,并限制 Agent 只能使用决策日期时已知的信息。
4. 对抗性构建。 一个子 Agent 构建看多案例,第二个被命令去推翻它,第三个以给定的置信度进行调和。价值完全在于目标真正对立,而不在于 Agent 的数量。
这里的中立对齐模型很重要,因为它们会努力论证看空案例,而不是将其模糊处理成和稀泥。
5. 有权放弃。 强制每次调用都回答“什么单一数据点会推翻这个结论”。
如果 Agent 没有那个数据,答案就是“不持仓”。
2e. 高级操作:程序化工具调用将流水线压缩至零上下文成本
这个功能,一旦你理解了它,就会改变你构建每个分析师工作流的方式。
通常,一个多步骤的流水线每一步都会消耗一次 LLM 交互:“我将搜索……现在我将阅读……现在我将总结……现在我将写作。”
每一个机械步骤都会消耗推理 Token,并用中间结果污染上下文。
execute_code 解决了这个问题
Agent 编写一个 Python 脚本,通过 Unix 域套接字 RPC 调用 Hermes 自身的工具。脚本在子进程中运行;工具调用通过套接字传回父进程,并通过与普通工具调用相同的处理程序进行分发。
关键点在于:只有脚本的 print() 输出会返回给模型。中间的工具结果永远不会进入上下文窗口。
1# Agent 只编写一次此脚本;模型仅在决策点参与2from hermes_tools import edgar_fetch, market_price, calc34tickers = ["TSLA", "NVDA", "COIN"]5rows = []6for t in tickers:7 f = edgar_fetch(t, form="10-Q") # 通过 RPC 调用工具8 px = market_price(t) # 通过 RPC 调用工具9 pe = calc("pe", price=px["last"], eps=f["eps"]) # 确定性数学计算,非 LLM10 rows.append({"ticker": t, "pe": pe, "src": f["accession"], "as_of": f["period_end"]})1112print(rows) # 只有这行输出会进入上下文窗口
对于一个金融分析师来说,这意义重大。
一次对 20 个股票代码的晨间扫描,每个代码调用三个工具,总共 60 次工具调用。如果以传统方式执行,会炸掉你的上下文和 Token 预算。
作为一个脚本,它只需要一次交互,输出一张干净的打印表格,数学计算在脚本内确定性地完成。你可以将整个流水线折叠成单次推理,模型只在真正需要判断的点上进行思考。将你重复性的分析师工作流构建为包裹在技能中的 execute_code 脚本。(仅限 Linux/macOS,因为它需要 Unix 域套接字。)
2f. 记忆 - 事实 vs. 用户模型
Hermes 的记忆由三个正交的机制组成(“3 层”框架是为了教学简化,在代码中它们是独立的):
- MEMORY.md - 持久性事实。约 2200 字符上限。
- USER.md - 关于你的模型。约 1375 字符上限。
- SessionDB - SQLite,WAL 模式,对过去每一次交互建立 FTS5 索引,通过
session_search查询。
MemoryStore 在会话开始时一次性读取 MEMORY.md 和 USER.md,并将它们作为单个不可变块嵌入系统提示词中。
Agent 可以在会话期间写入这些文件,写入会保存到磁盘,但提示词中的副本在下次会话之前不会改变,因为改变它会破坏前缀缓存(与所有其他地方相同的不变原则)。
此外还有 8 个可选的外部提供者(Honcho 的辩证用户建模、Mem0、Hindsight、Supermemory……),单选,通过 hermes memory setup 配置。
字符上限是一个特性。它们迫使你将 USER.md 保持为高信号的基础设施,而不是一个垃圾场。
对于一个分析师来说,USER.md 就是你的授权:风险承受能力、投资期限、你实际依据的指标、输出格式。
MEMORY.md 用于存储 Agent 通过努力获得的持久性事实(“COIN 的收入与 10-K 报告的对齐度比与 FMP 的对齐度更高”)。
SessionDB 作为你的记分员,存储每一次调用,根据结果进行评分,Agent 会更新先验,而你则学习它的校准能力——它在哪些方面敏锐,在哪些方面长期过于乐观。这个校准图谱是 Alpha,没有哪个散户构建会费心去收集。
2g. 当提示词不够用时:GAPA,然后是强化学习
在你考虑微调之前:Hermes 有 GAPA,一种系统性的提示词优化方法,用于优化你的 SOUL.md、技能指令和系统提示词,而不是手动试错调整。
当性能达到瓶颈时尝试使用它。
更进一步,Hermes 支持批量轨迹生成并导出 ShareGPT 格式的轨迹用于监督微调,并且有一条强化学习路径(Atropos),可以基于你自己的轨迹实际微调工具调用行为。这是“教育它”的真正天花板——最终是根据你的分析师的工作方式来训练一个模型。
第三部分:扩展它:代码库、MCP、服务
MCP:将注册与暴露分开
通过 CLI 或 config.yaml 添加服务器;Agent 在启动时列出它们的工具,并将其与内置工具一起注册。关键纪律,与上述缓存逻辑相呼应:使用 tools.include 进行白名单管理,这样你只暴露你需要的内容,因为每个暴露的工具都会消耗前缀 Token 并扩大你的攻击面。
1hermes mcp add github --command npx --args "-y,@modelcontextprotocol/server-github"2hermes mcp configure github # 切换单个工具
1mcp_servers:2 filesystem:3 command: npx4 args: ["-y", "@modelcontextprotocol/server-filesystem", "/home/you/research"]5 tools: { include: [read_file, list_directory] } # 只读,无写入
运行 /reload-mcp 以应用更改。
Composio MCP 是作弊码,一个服务器,数百个 SaaS 连接;人们构建在 Hermes 上的金融 Agent 完全通过它来拉取市场数据并将报告写入 Google Docs。而 hermes mcp serve 将 Hermes 作为一个 MCP 服务器运行,暴露其会话历史,这样 Claude Desktop 或 Cursor 就可以查询你的分析师发现了什么——Agent 变成了一个你的其他工具可以读取的知识库。
数据源(按重要性排序:主干 vs. 点缀)
加密货币主干:
DefiLlama
(免费,无需密钥,无实际速率限制,提供 TVL/费用/收益率/价格,一半的付费仪表盘都是换皮产品)
+ Helius
(Solana 之王,增强的交易解析将字节汤转换为可读的交换记录)。
点缀:
Birdeye(OHLCV + 网络套接字),Jupiter(路由/报价),Dune+Flipside(链上 SQL),Bitquery(GraphQL 多链),Nansen/Arkham(标签,付费)。
传统金融主干:
FRED
(圣路易斯联储,信号最强的免费宏观数据,交易台实际关注的数据)
+ edgartools
(MIT,无需密钥,从 10-K 报告中提取带有 accession 编号的类型化财务数据)。
点缀:
Finnhub(最佳免费层级),FMP(预计算比率),Polygon/Tiingo(干净的历史数据),yfinance(权宜之计,会静默失效),GDELT(全球新闻事件)。
陷阱:免费层级限制很严(Alpha Vantage 每天约 20 多次调用)。你会以为是代码坏了。缓存所有内容,并使用凭证池(config.yaml)在多个密钥之间自动轮换,以应对速率限制。
值得关注的代码库
- NousResearch/hermes-agent
阅读 developer-guide 文档:架构、Agent 循环、上下文压缩与缓存。DeepWiki 和 mudrii/hermes-agent-docs 镜像对于了解内部机制很有帮助。

- 0xNyk/awesome-hermes-agent
精选的技能、工具、MCP 服务器和集成。从这里开始。技能中心:官方 Hub(680+ 技能,18 个类别),skills.sh,ClawHub。

- OpenBB-finance/OpenBB
开源版彭博终端,自带 MCP 服务器,因此可以直接插入 Hermes,通过一个接口为 Agent 提供庞大的市场数据和分析功能。这是杠杆率最高的单一附加组件。

- polakowo/vectorbt
基于 Numba 的快速回测,数秒内完成数千种变化。将其封装在技能中,这样 Agent 可以在你信任每个假设之前对其进行测试。

- TauricResearch/TradingAgents (+ auronsun/TradingAgents-crypto)
多 Agent 交易公司模拟器。阅读它以了解其结构,然后构建你理解的、更精简的看多/看空子 Agent 版本。microsoft/qlib 和 nautechsystems/nautilus_trader 用于真正的系统性策略。wilsonfreitas/awesome-quant 作为库地图。






