它不是可选项,而是功能载体
官方贡献指南把原则写得很直白:任何与某个策略相关的改动都应该放进这个策略自己的 tentacle 里;任何与某个交易所相关的改动都应该放进该交易所对应的 tentacle 里。也就是说 OctoBot 本体负责通用调度,具体能力由 tentacle 提供。
OctoBot 项目研究站 · Tentacles 插件体系
OctoBot 本体是一个调度与交易引擎,真正的策略逻辑、交易所连接器与评估器都以 **tentacle** 的形式加载进来。它的源码真值放在 packages/tentacles/,而运行时用的 tentacles/ 目录是由源码导出并安装生成的——官方开发者文档明确写着「永远不要直接编辑 tentacles/,它会被覆盖」。理解这一层,后面看策略模式、交易所支持和二次开发才不会迷路。
理解三件事就够:谁提供功能、放在哪、怎么进引擎。
官方贡献指南把原则写得很直白:任何与某个策略相关的改动都应该放进这个策略自己的 tentacle 里;任何与某个交易所相关的改动都应该放进该交易所对应的 tentacle 里。也就是说 OctoBot 本体负责通用调度,具体能力由 tentacle 提供。
仓库里 packages/tentacles/ 才是真值;运行目录 tentacles/ 是导出与安装的产物。官方在开发者文档里明确警告不要直接改后者,否则下一次导出就把它冲掉——这是新手最容易踩的坑。
Tentacles 在 Drakkar-Software/OctoBot-tentacles 独立仓库维护,提交 PR 时针对其 dev 分支;用 Docker 部署时,镜像通过构建参数 TENTACLES_URL_TAG 指定 tentacles 版本来源,并把 tentacles/ 作为数据卷持久化。
在 OctoBot 里,这两条路径的区别决定了「你改的东西会不会生效」。
| 对比项 | packages/tentacles/ | tentacles/(运行时) | 注意点 |
|---|---|---|---|
| 身份 | 源码真值(source of truth) | 导出并安装后的产物 | 改错地方等于白改,且下次导出会被覆盖 |
| 能否直接编辑 | 可以,改动都写这里 | 不可以(官方明确禁止手改) | 改了运行时目录,重新导出即失效 |
| 生成方式 | 由开发者维护 | 由 tentacle-manager 导出并安装 | 仓库里提供了对应 agent 定义来跑这个流程 |
| 安装命令 | — | python start.py tentacles install | CLAUDE.md 的 PYTHONPATH 示例与 agent 说明中都出现该命令 |
| Docker 场景 | 镜像构建时按 TENTACLES_URL_TAG 取指定版本 | 挂载为卷 /octobot/tentacles | 容器重建不会丢你安装的 tentacles(因为它是卷) |
| 独立仓库 | 上游在 OctoBot-tentacles 仓库维护 | 安装时从指定来源取包 | 给上游提 PR 时目标分支是 dev |
| 导入路径约定 | tentacle 内优先用 tentacles.Services.Interfaces.*,失败回退裸导入 | 运行时按安装后的路径解析 | 同一 tentacle 包内所有文件应保持同一优先级顺序 |
packages/tentacles/,然后跑一次导出+安装。直接改运行目录是这场游戏里最常见的无效操作。仓库把代码拆成 16 个 Pants 子包,其中两个直接服务于插件体系。
| 子包 | 职责(据目录与官方文档判断) | 适用场景 | 注意点 |
|---|---|---|---|
tentacles | tentacle 源码与接口定义所在 | 开发/修改扩展 | 导出与安装后才会出现在运行时目录 |
tentacles_manager | 导出源码、安装 zip、生成 CCXT 交易所 tentacle | 跟进上游交易所变化 | 官方把它封装成一个 agent 命令来调用 |
trading | 交易侧通用能力 | 策略与订单相关改动 | 具体策略仍应放进对应 tentacle |
evaluators | 评估器(技术指标/社交数据一类输入) | 给策略提供信号 | 与交易模式页提到的 RSI/均线/MACD、Trends/Reddit 对应 |
backtesting | 回测相关能力 | 验证策略 | 回测只在手动实例可用(见回测页) |
agents | 自动化/代理相关能力 | node 模式的自动化组合 | 与 node 模式页的多自动化编排相关 |
| 其余 10 个 | async_channel、binary、client、commons、copy、flow、node、protocol、services、sync | 通信、协议、服务与同步等基础设施 | 本站只据目录名说明其存在,未逐包核验实现细节 |
顺序与命令来自官方开发者文档;具体参数以仓库当前版本为准。
从源码路线起步(可执行文件与 Docker 镜像已自带 tentacles)。按 CLAUDE.md,需要 Python 3.13 与 Pants 2.30.0(用 scie-pants 引导安装),并把根目录与各 packages 子目录写进 PYTHONPATH。
执行 python start.py tentacles install:它从指定来源取 tentacles 包并安装到运行时目录。装完后 PYTHONPATH 需要额外加入 packages/tentacles。
检查运行时 tentacles/ 目录下是否出现预期扩展;在界面里能看到对应策略模式或交易所,说明装载成功。预期:启动日志不再报缺少 tentacle。
上游交易所接口变化时,用 tentacles_manager 重新生成交易所 tentacle;改了 packages/tentacles/ 后同样要重新导出并安装,改动才会生效。
TENTACLES_URL_TAG 取对应版本,并把 /octobot/tentacles 挂成数据卷——所以你更新容器镜像后,之前安装/生成的 tentacles 仍在卷里。这些坑都写在官方文档里,只是不容易被注意到。
| 误解 | 实际情况 | 后果 | 怎么避免 |
|---|---|---|---|
| 「改 tentacles/ 里的文件就行」 | 运行目录是生成物,官方明确禁止直接编辑 | 下次导出/安装后改动消失 | 只改 packages/tentacles/,再重跑导出+安装 |
| 「策略开箱就有,不用装」 | 策略以 tentacle 形式加载;可执行文件/镜像是打包好的,源码路线要自己装 | 源码启动后界面里看不到预期模式 | 先跑一次 tentacles install |
| 「PYTHONPATH 无所谓」 | 官方要求把根目录与各 packages 子目录都写进去,且必须绝对路径 | 构建子进程从 tentacle 子目录运行时报导入失败 | 按 CLAUDE.md 的完整示例导出 PATH |
| 「我加了新依赖,直接装包就好」 | 贡献指南要求新依赖要么先开 issue 讨论,要么做成可选导入 | PR 可能因依赖策略被拒 | 先读贡献指南的 Adding dependencies 一节 |
| 「交易所支持是本体写死的」 | 交易所连接器同样由 tentacle 提供,可从 CCXT 生成 | 上游接口变化后旧连接器可能失效 | 用 tentacles_manager 重新生成(见交易所页) |
概念上就是插件,但 OctoBot 把「策略」「交易所连接器」「评估器」等不同粒度的扩展都统一到 tentacle 这一形态,并用导出+安装的流程管理它们,因此有了源码真值与运行时目录之分。以官方开发者文档为准。
改 packages/tentacles/(若你从上游仓库做贡献,则改 OctoBot-tentacles 仓库对应分支)。运行时 tentacles/ 是产物,官方原话是「永远不要直接编辑」,改了也会被覆盖。
命令行是 python start.py tentacles install。源码路线下前置包括 Python 3.13、Pants 2.30.0 与正确的 PYTHONPATH;Docker 与可执行文件路线由官方打包流程处理。具体以仓库当前版本文档为准。
通常不用:镜像构建时按 TENTACLES_URL_TAG 取指定版本的 tentacles,并把 /octobot/tentacles 作为数据卷,所以更新镜像也不会丢你已安装的扩展。
官方欢迎 PR,但要求:改动针对 dev 分支、配套 pytest 用例、PEP8(行长 120),且与具体加密货币/交易对绑定的改动会被拒绝。本站不代做承诺,是否合并以官方评估为准。
没有。本机未安装运行 OctoBot,本站所有描述均来自官方仓库与开发者文档,未做实测;页面只做证据整理,具体以仓库当前版本为准。