

大家好,我是 Ai 学习的老章
今天聊点不太一样的。我用一个开源项目 OpenCode 的 Server API,花了一个下午,搭了一个自己的 Telegram AI 编程机器人。
我管它叫 FakeClawBot——一个"假的"Claude Code Bot,但它能干的活,一点也不假。

用过 Claude Code 的人都知道,这货是真能干活——分析项目结构、改代码、写测试、做重构,甚至帮你管理 Git,简直是编程版的贾维斯。但问题是,你得一直开着终端窗口才能用它。
OpenClaw呢,你最好有Mac mini,而且养起来蛮麻烦

我就在想:有没有办法把这种"AI 编程助手"的能力,塞进一个随时随地能用的 Telegram 机器人里? 在地铁上、在咖啡厅里、在床上刷手机的时候,随手给它丢一段代码让它帮我分析?
然后我发现了 OpenCode 的一个关键能力——Server 模式。
简单说,OpenCode 是一个完全开源的 Claude Code 替代品。
它不仅可以作为一个命令行 Agent 使用(就跟 Claude Code 一样),还有一个杀手锏功能:
opencode serve --port 4096
一行命令,它就变成了一个 HTTP API 服务。所有 Claude Code 能做的事——创建会话、发消息、执行命令、分析代码、管理文件——全部暴露成了 REST API。
这意味着什么?你可以用任何语言、任何平台去调用它。 Web 页面、手机 App、Discord Bot、Telegram Bot……只要能发 HTTP 请求,就能用上 AI 编程的全部能力。

而且 OpenCode 最秀的是它的提供商机制——你可以同时对接各家大模型。Anthropic 的 Claude 用腻了?切换到 Google 的 Gemini 3.1 Pro。硅基流动(SiliconFlow)上的 Kimi-K2.5、MiniMax-M2.5 也能一键接入。这些模型在 OpenCode 的 Agent 框架里跑起来,照样能读文件、写代码、跑命令。
Ollama 已经陆续免费放出 Kimi-K2.5、GLM-5、MiniMax-M2.5,也可以接进去
整个项目的架构其实非常简单粗暴:
Telegram 用户
↓ 发消息
Telegram Bot API
↓ 转发
bot.py (Python)
↓ 调用 HTTP API
OpenCode Server (:4096)
↓ 调度大模型
Claude / Gemini / Kimi / GLM ...
用户在 Telegram 里发一句话,bot.py 接住消息,转手通过 HTTP 丢给本地跑着的 OpenCode Server,Server 调度你选好的大模型去干活(读代码、改文件、跑测试),最后把结果返回给 Telegram。
整个项目只有 2 个核心文件:
文件 | 作用 | 代码量 |
|---|---|---|
bot.py | Telegram Bot 主逻辑 | ~660 行 |
opencode_client.py | OpenCode HTTP API 客户端 | ~220 行 |
加起来不到 900 行 Python,就把一个全功能的 AI 编程助手机器人搞定了。
你需要以下几样东西:
1. 安装 OpenCode
# macOS
brew install opencode-ai/tap/opencode
# 或者用 npm
npm install -g opencode
2. 从 @BotFather 申请一个 Telegram Bot Token
在 Telegram 里找 @BotFather,输入 /newbot,按提示走完流程,你会拿到一串类似 8784090274:AAGVjK67hSWqmo5-xxxxxxx 的 Token。
3. 克隆项目 & 安装依赖
git clone https://github.com/tjxj/fakeclawbot.git
cd fakeclawbot
pip install -r requirements.txt
依赖超级轻量,就三个包:
python-telegram-bot==20.7
aiohttp==3.9.1
python-dotenv==1.0.0
4. 配置环境变量
cp .env.example .env
然后编辑 .env:
TELEGRAM_BOT_TOKEN=你从BotFather拿到的Token
OPENCODE_SERVER_URL=http://127.0.0.1:4096
这是 FakeClawBot 最有意思的地方。通过 OpenCode 的自定义提供商(Custom Provider)机制,你可以把几乎任何 OpenAI 兼容的 API 服务都接进来。
比如我同时接入了以下几个平台:
平台 | 模型 | 用途 |
|---|---|---|
Quotio(本地代理) | Claude Opus 4.6、Gemini 3.1 Pro 等 | 主力 Agent 编程 |
Ollama(本地部署) | GLM-5、Kimi-K2.5、MiniMax-M2.5 | 隐私敏感场景 |
SiliconFlow | Kimi-K2.5、GLM-5、MiniMax-M2.5 | 高性价比云端调用 |
OpenCode Zen(免费) | 多个免费模型 | 薅官方羊毛 |
在 opencode.json(全局配置文件 ~/.config/opencode/opencode.json)里添加一个自定义提供商非常简单:
{
"provider": {
"siliconflow": {
"npm": "@ai-sdk/openai-compatible",
"name": "SiliconFlow",
"options": {
"apiKey": "sk-你的API密钥",
"baseURL": "https://api.siliconflow.cn/v1"
},
"models": {
"Pro/MiniMaxAI/MiniMax-M2.5": {
"name": "Pro/MiniMaxAI/MiniMax-M2.5"
},
"Pro/moonshotai/Kimi-K2.5": {
"name": "Pro/moonshotai/Kimi-K2.5"
},
"Pro/zai-org/GLM-5": {
"name": "Pro/zai-org/GLM-5"
}
}
}
}
}
关键点就是 npm 字段设为 @ai-sdk/openai-compatible,然后填上 baseURL 和 apiKey。就这么简单,OpenCode 就能通过这个接口调用国产大模型了。
先在一个终端启动 OpenCode Server:
opencode serve --port 4096
然后在另一个终端启动 Bot:
python3 bot.py
看到 🤖 Bot 已启动! 就说明一切就绪了。
在 Telegram 里发 /help,你会看到完整的命令列表:
命令 | 功能 |
|---|---|
/start | 开始对话 |
/new | 创建新的编程会话 |
/sessions | 查看所有会话 |
/switch <id> | 切换会话 |
/model <name> | 切换大模型(支持 25 个模型!) |
/init | 初始化项目(生成 AGENTS.md) |
/undo | 撤销上一步操作 |
/status | 检查服务器状态 |
最常用的流程:
/new 创建一个会话/model 25 切换到 SiliconFlow 的 Kimi-K2.5(或者用数字快速选择其它模型)帮我分析一下 src/main.py 的代码结构在地铁上就能 Code Review,在咖啡厅里就能让AI帮你重构,这种感觉真的很爽。
这个项目虽然简单,但在实际搭建和使用过程中还是踩了一些值得分享的坑:
坑一:模型名称包含多个斜杠
OpenCode 的模型格式是 provider/modelID,比如 quotio/gemini-3.1-pro-high。但 SiliconFlow 的模型名叫 Pro/moonshotai/Kimi-K2.5,拼起来就变成了 siliconflow/Pro/moonshotai/Kimi-K2.5——足足 3 个斜杠!
我最开始在 opencode_client.py 里用 model.split("/") 来拆分提供商和模型名,结果 4 段文字要塞进 2 个变量里,Python 直接抛了 too many values to unpack 的错误。
修复方法很简单:把 split("/") 改成 split("/", 1),只按第一个斜杠切一刀。
# ❌ 错误
provider_id, model_id = model.split("/")
# ✅ 正确
provider_id, model_id = model.split("/", 1)
坑二:Telegram Bot 的"单例监听"限制
一个 Telegram Bot Token 在同一时间只能有一个进程在监听消息(getUpdates 或 Webhook)。如果你同时跑了两个脚本都在拿着同一个 Token 去轮询消息,它们会互相踢下线,导致消息丢送。
但是——纯发送消息不受此限制。所以如果你有其他服务(比如我还做了一个 RSS 定时摘要推送)也需要通过这个 Bot 发消息给你,完全没问题,只要它不去"监听"就行。
整个项目的精髓在 opencode_client.py 这个文件。它封装了 OpenCode Server 的全部 HTTP API:
class OpenCodeClient:
asyncdef send_message(self, session_id, content, model=None):
"""发送消息并获取AI回复"""
body = {
"parts": [{"type": "text", "text": content}],
}
if model:
provider_id, model_id = model.split("/", 1)
body["model"] = {
"providerID": provider_id,
"modelID": model_id
}
returnawait self._request(
"POST", f"/session/{session_id}/message", json=body
)
OpenCode Server 的 API 设计非常清晰:
POST /session — 创建会话POST /session/{id}/message — 发送消息(同步等待回复)POST /session/{id}/command — 执行斜杠命令(如 /init)POST /session/{id}/abort — 中止运行中的任务POST /session/{id}/revert — 撤销操作模型选择通过请求体中的 model 对象来指定:
{
"model": {
"providerID": "siliconflow",
"modelID": "Pro/moonshotai/Kimi-K2.5"
}
}
providerID 对应你在 opencode.json 里配置的提供商键名,modelID 对应该提供商下的模型键名。这种设计让模型切换变得极其灵活。
有了这个基础架构,你还可以做很多有意思的扩展:
user_id 隔离会话,每个人有独立的会话和模型选择opencode_client.py,换一个前端就能做成 Discord Bot、Slack Bot、微信机器人……FakeClawBot 这个项目的核心思路其实就一句话:OpenCode 开放了 HTTP Server API,你可以在上面搭建任何形态的 AI 编程助手。
它不是又一个"套壳 ChatGPT"的聊天机器人。OpenCode 的 Agent 在后端真的能执行文件操作、代码分析、项目初始化这些"干活"的能力。你只是把终端窗口换成了 Telegram 窗口。
优点:
不足 / 局限:
GitHub 地址:https://github.com/tjxj/fakeclawbot OpenCode
官方文档:https://opencode.ai/docs/zh-cn/server/
如果你也在用 OpenCode 或者 Claude Code,强烈建议你试试这个玩法。把 AI 编程助手搬到手机上,真的会让你对"随时随地写代码"有一个全新的认知。
#OpenCode #Telegram #Bot #AI编程 #Agent
制作不易,如果这篇文章觉得对你有用,可否点个关注。给我个三连击:点赞、转发和在看。若可以再给我加个🌟,谢谢你看我的文章,我们下篇再见!