如何为Takopi编写插件:从零实现Engine、Transport与Command插件
【免费下载链接】takopihe just wants to help-pi!项目地址https://gitcode.com/gh_mirrors/ta/takopi点击查看免费下载Takopi 是一个把 Codex、Claude Code 等 AI 编程引擎接入 Telegram 的开源桥梁工具完全靠插件机制扩展能力。这篇 Takopi 插件开发教程带你从零实现 Engine新 AI 引擎、Transport新消息平台与 Command自定义斜杠命令三类插件并掌握验证与排错方法。一、先看懂Takopi 的三种插件类型 Takopi 通过 Python entrypoint 机制发现插件你无需改动核心代码。官方内置插件也是这样声明的比如 codex、claude、opencode、pi 四个引擎和 telegram 消息通道都可以在 pyproject.toml 中找到插件类型entrypoint 组作用典型场景Enginetakopi.engine_backends接入新的 AI 引擎 CLI让 Takopi 能驱动 Acme 引擎Transporttakopi.transport_backends接入新的消息平台连接 Slack、Discord 等Commandtakopi.command_backends新增/斜杠命令实现自定义/hello命令记住三条规则ID 就是 entrypoint 名称且必须匹配^[a-z0-9_]{1,32}$插件后端对象的id必须与 entrypoint 名称一致公共 API 全部从 src/takopi/api.py即takopi.api导出不要导入内部模块。二、准备插件项目pyproject.toml 配置 创建你自己的 Python 包例如myengine在它的pyproject.toml中声明 entrypoint并锁定 takopi 版本范围[project] dependencies [takopi0.14,0.15] [project.entry-points.takopi.engine_backends] myengine myengine.backend:BACKEND [project.entry-points.takopi.command_backends] mycommand mycommand.backend:BACKEND值的格式是模块路径:变量名。安装后 Takopi 会通过组名自动发现你的插件发现逻辑见 src/takopi/plugins.py。三、Command 插件最快上手的入门示例 ⚡Command 插件最轻量适合作为你的第一个 Takopi 插件。在mycommand/backend.py中定义一个带id、description和异步handle方法的类from takopi.api import CommandContext, CommandResult class MyCommand: id hello description say hello async def handle(self, ctx: CommandContext) - CommandResult | None: return CommandResult(texthello) BACKEND MyCommand()使用要点只有当消息以/hello开头、且hello不与引擎 ID、项目别名、保留词如cancel、init冲突时才会触发配置写在[plugins.hello]下会以字典形式出现在handle的ctx.plugin_config中通过ctx.executor.run_one(...)可复用 Takopi 完整引擎流水线modecapture可以收集结果并组装自定义回复。四、Engine 插件接入一个新的 AI 引擎 Engine 插件的核心是构建一个Runner把你的引擎 CLI 输出翻译成 Takopi 的标准化事件。在模块顶层声明EngineBackendfrom takopi.api import EngineBackend, EngineConfig, Runner from myengine.runner import MyEngineRunner def build_runner(config: EngineConfig, config_path) - Runner: return MyEngineRunner(config) BACKEND EngineBackend( idmyengine, build_runnerbuild_runner, cli_cmdmyengine, # 用于检查 CLI 是否在 PATH 上 install_cmdpip install myengine, # onboarding 时展示的装包指引 )Runner 编写要点事件契约恰好一个StartedEvent、恰好一个CompletedEvent且CompletedEvent必须是最后一个事件其resume与StartedEvent.resume一致如果你的引擎是 JSONL 流式 CLI类似 claude、codex直接继承JsonlSubprocessRunner只需实现build_args、decode_jsonl、translate等方法进程管理与完成语义由基类保证引擎配置表即takopi.toml中与 ID 同名的表如[myengine] model ...完整分步指南参考官方文档 docs/how-to/add-a-runner.md。五、Transport 插件接入新的消息平台 Transport 插件把 Takopi 连接到其他消息系统。一个TransportBackend对象需要提供id与description插件标识与描述check_setup/interactive_setup校验配置并引导用户完成初始设置lock_token提供锁 token防止并行运行build_and_run启动消息循环。关键捷径消息处理可以整体委托给takopi.api中的handle_message()——进度更新与节流、resume 处理、取消传播、最终渲染都已实现Transport 层只需保持轻薄。六、验证插件加载与常见问题 安装包后运行两条命令验证takopi plugins # 列出发现的 entrypoint不导入代码 takopi plugins --load # 强制加载每个插件提前暴露导入错误常见问题速查现象排查方向插件没被发现entrypoint 组名写错、ID 不符合^[a-z0-9_]{1,32}$加载报错后端对象的id与 entrypoint 名称不一致命令不触发/命令名与引擎 ID、项目别名或保留词冲突部分插件不可见设置了[plugins] enabled白名单按包名过滤而非 ID默认enabled []表示加载所有已安装插件如需只启用部分写入包名列表即可。七、延伸阅读 插件快速上手docs/how-to/write-a-plugin.md插件系统设计原理惰性发现、enabled 白名单docs/explanation/plugin-system.md插件 API 参考全部公开符号与版本约定docs/reference/plugin-api.md内置引擎实现参考src/takopi/runners/claude.py、最小事件示例 src/takopi/runners/mock.py赞分享【免费下载链接】takopihe just wants to help-pi!项目地址https://gitcode.com/gh_mirrors/ta/takopi点击查看免费下载相关推荐三步给老Intel Mac装上新版macOSOpenCore Legacy Patcher 实操指南三步给老Intel Mac装上新版macOSOpenCore Legacy Patcher 实操指南 OpenCore Legacy Patcher下文简称桌面应用操作系统固件如何编写StarPie星盘插件从零实现第一个动作插件plugin.json到SDK完整教程如何编写StarPie星盘插件从零实现第一个动作插件plugin.json到SDK完整教程 StarPie 是一款现代化的 Windows 鼠标轮盘手势系统xplr插件开发入门如何从零开始编写你的第一个插件xplr插件开发入门如何从零开始编写你的第一个插件 xplr作为一款 可高度定制的TUI文件管理器 其插件系统让用户能够轻松扩展功能。无论你是新手还是经验丰开发工具上一篇瓦片排序与Splat可见性Spirula Studio光栅化的核心秘密下一篇treg成本溯源脚本完整指南目录价格如何被实测验证创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考