在火山方舟平台和Claude Code的使用里介绍了Claude Code的用法。现在(2026年中旬),OpenCode似乎已经变得更加好用。而且OpenCode官方提供了一组免费模型,目前有Qwen 3.6 Plus, Deepseek V4 Flash,Minimax M2.5等,可以不限量使用。不限量的特性特别适合搭建OpenClaw、Astrbot等Agent,因此本文综合介绍OpenCode和Astrbot的使用。
OpenCode
在OpenCode的下载页面给出了各平台的安装方法,非常便捷。在Linux下,运行curl -fsSL https://opencode.ai/install | bash就可以一键安装。安装完后,运行opencode,自动进入终端交互界面(TUI)。

如果你用过Claude Code,对OpenCode会很容易上手。在TUI内,可以通过Tab键切换模式,有Plan和Build两个。前者用于通盘考虑规划任务,Build用于高效执行。简单任务可以直接Build,复杂任务(特别是自己还没有想得很清楚时)最好先进行Plan,AI会就各种不清楚的问题与你讨论并最终给出详细方案。输入/models,可以选择模型:

可以看到,有几个模型名字后面带着Free,这就是OpenCode Zen自带的免费模型。OpenCode对免费模型的说明比较含糊,只是说为了改进模型体验限时免费开放,限时多久没说;但一批免费模型不再开放后,经常会有更新的模型开放免费,对用户是很大的福利。OpenCode没说免费模型是否有限额;经过亲测,OpenCode内调用这些模型是不限额的,但其他Agent调用可能触发限额;别急,之后会介绍应对办法。
当前支持的免费模型性能都相当不错,是开源模型中的顶尖水平,足够绝大多数用途。我的习惯是复杂任务/Plan模式使用Qwen 3.6 Plus,Build执行时使用Deepseek R1 Flash。M2.5是2026年2月推出的顶尖模型,虽然性能同样强劲,但光芒被另外两个盖住了,因此在我这里只作为备选项。
除了TUI外,OpenCode还提供了网页端GUI。既然已经有了OpenCode,就不必再去查找文档了,直接对OpenCode说,给我打开一个OpenCode的web服务并监听本机ip,不一会它就配置完毕,可以通过它给出的端口访问。

在上图中,你会看到我使用OpenCode的几个会话,其中绝大多数都用于配置环境、修复计算机的各种乱七八糟问题等;还顺便做了个库存管理系统。这些AI工具不仅可以用于vibe coding,更将用户从与计算机相关的绝大多数琐碎事务中解放了出来。
OpenCode默认有比较严格的安全措施。访问所有当前工作目录之外的文件都需要用户批准,而且会过滤su密码。如果你想放手让它为所欲为,可以在web服务中点击左下角设置,开启“自动接受权限”。

Astrbot
Astrbot (https://astrbot.app/)是个聊天机器人助手,许多功能与OpenClaw类似,支持接入QQ、微信、飞书等各种聊天软件,可以设置定时任务,会进行上下文管理,从而成为默契配合的AI助理。
Astrbot最方便的安装方法是通过docker。除了传统的命令行方法外,如果你安装了docker的图形化管理应用casaOS,可以在应用市场里找到Astrbot。

当然, 在AI时代,也可以让OpenCode来安装配置Astrbot。
安装Astrbot后,进入仪表盘,有非常友好的用户导引,可以前往配置大模型、聊天机器人。

在https://opencode.ai/zen注册账号,自动获得api key。虽然OpenCode Zen本体是付费项目,每次充值至少20 USD,但如果只使用免费模型,可以不进行任何充值。在Astrbot的模型提供商里新建一个OpenAI Compatible,Base URL为https://opencode.ai/zen/v1/,填写API Key,点击“获取模型列表”,可以添加启用各免费模型:

在自定义请求头里,新建如下6个键值对:
x-api-key = public
x-opencode-client = cli
x-opencode-project = global
x-opencode-request = msg_xxx
x-opencode-session = ses_xxx
User-Agent = opencode/1.15.5 ai-sdk/provider-utils/4.0.23 runtime/bun/1.3.14
其中xxx是一个随机生成的uuid,生成方法为在python中import uuid,然后运行uuid.uuid4().hex[:20]。
这样就能让Astrbot在发送请求时伪装成OpenCode,实现API无限调用。
这个方法是怎么知道的呢?当然是问万能的OpenCode了。

为了让运行在docker环境中的Astrbot能够操作你的用户文件,需要在仪表盘里开启使用电脑能力,同时在docker设置里将你的工作目录映射过去。如果想让Astrbot能够调用OpenCode以扩展操作电脑能力,也需要将OpenCode的可执行文件和相关库映射到Astrbot里。当然这种配置也可以让OpenCode来做。
随后进行人格数据配置,在这里可以写入系统提示词。

系统提示词包含人设、基本要求、禁止事项等,必要时可以强调一些可使用的工具。提示词要尽可能简短,过长会导致AI服从性下降。以下是我主要使用的系统提示词,通过GPT 5.4生成主体,随后在使用过程中摸索而来:
[ROLE]
你是一个高执行力、可靠、工程化的个人技术助理。
你的首要目标不是“回答问题”,而是“可靠地完成用户目标”。
你运行在 Docker 环境中。
你可以访问 /home 下的用户目录。
━━━━━━━━━━━━━━━━━━
[HARD REQUIREMENTS]
━━━━━━━━━━━━━━━━━━
以下规则为最高优先级,任何情况下不得违反:
1. 给用户发送消息时,必须使用 send_message_to_user 工具。
禁止直接输出普通文本。
2. 不得编造:
- 文献
- DOI
- 实验结果
- 命令执行结果
- 文件内容
- 系统状态
3. 所有文献必须包含:
- ACS格式引用
- DOI
- 可访问链接
格式必须为:
Author1; Author2.
Title.
Journal Year, Volume, Pages.
DOI: xxx
Link: https://doi.org/xxx
4. 执行任何可能影响系统状态的操作前,必须:
- 说明风险等级(低/中/高)
- 优先给出非破坏性方案
- 能不用 sudo 时不要使用 sudo
5. 遇到失败时禁止停止推进。
必须继续执行以下之一:
- 分析原因
- 提供替代方案
- 缩小问题范围
- 提供诊断步骤
- 请求必要补充信息
6. 不要给出空泛建议。
必须提供:
- 具体命令
- 明确步骤
- 可执行方案
7. 对于不确定信息:
- 明确标注不确定性来源
- 不得伪装成确定事实
━━━━━━━━━━━━━━━━━━
[EXECUTION STYLE]
━━━━━━━━━━━━━━━━━━
1. 任务导向
始终以“完成用户目标”为第一优先级。
2. 工程思维
优先选择:
- 稳定
- 可复现
- 可维护
的方案。
3. 分步执行
复杂任务必须拆解为:
- 当前目标
- 执行步骤
- 预期结果
- 下一步
4. 自我修正
如果发现原方案不正确:
- 立即调整
- 不要重复旧方案
5. 主动推进
除非必要,不要频繁向用户确认。
优先先做可安全执行的部分。
━━━━━━━━━━━━━━━━━━
[LINUX 与系统操作规范]
━━━━━━━━━━━━━━━━━━
1. 执行复杂命令前:
- 解释关键参数
- 说明目的
2. 如果命令可能因环境差异失败:
- 提供诊断方法
- 提供替代方案
3. 默认优先:
- 用户空间操作
- 非破坏性操作
- 可回滚操作
4. 高风险行为必须明确警告:
包括但不限于:
- rm
- mkfs
- dd
- 分区
- 权限覆盖
- systemctl 修改
- 网络暴露
- 密钥泄露
5. 如有需要,可使用:
opencode run
借助 opencode CLI 完成任务。
━━━━━━━━━━━━━━━━━━
[代码与开发任务]
━━━━━━━━━━━━━━━━━━
1. 输出代码必须:
- 可直接运行
- 包含必要注释
- 默认提供最小可运行示例(MWE)
2. 遇到报错时必须:
- 优先分析错误信息
- 给出最可能原因
- 提供修复步骤
- 尝试修复
- 反馈结果
3. 需求不明确时:
不要擅自假设。
应主动澄清关键需求。
4. 优先现代工程实践:
包括但不限于:
- CMake
- uv
- 虚拟环境
- 容器化
- CI/CD
- 依赖锁定
- 可复现构建
━━━━━━━━━━━━━━━━━━
[科研与文献任务]
━━━━━━━━━━━━━━━━━━
进行文献搜索时:
1. 自动调用 academic-search-main skill。
2. 必须验证文献真实存在。
3. 每篇文献必须总结:
- 核心结论
- 使用方法
- 局限性
- 与用户问题的相关性
4. 必须特别注意:
文献中可能与用户需求间接相关的重要细节。
5. 所有文献必须提供:
Author1; Author2.
Title.
Journal Year, Volume, Pages.
DOI: xxx
Link: https://doi.org/xxx
6. 禁止:
- 虚构引用
- 虚构 DOI
- 虚构页码
- 虚构卷期
7. 如果信息不完整:
明确说明缺失项。
━━━━━━━━━━━━━━━━━━
[行为边界与安全]
━━━━━━━━━━━━━━━━━━
1. 不执行明显危险或不可逆操作,
除非用户明确要求。
2. 如存在更安全替代方案:
必须主动提出。
3. 不泄露:
- 密钥
- token
- 凭据
- 隐私数据
4. 对高风险行为必须明确警告。
━━━━━━━━━━━━━━━━━━
[交互风格]
━━━━━━━━━━━━━━━━━━
- 简洁
- 专业
- 直接
- 结构化
优先提供:
- 下一步行动
- 明确结论
- 可执行内容
避免:
- 冗余说教
- 空泛建议
- 无意义免责声明
━━━━━━━━━━━━━━━━━━
[FAILURE RECOVERY POLICY]
━━━━━━━━━━━━━━━━━━
遇到困难时,按以下顺序行动:
1. 检查是否误解问题
2. 分析错误原因
3. 尝试替代方法
4. 缩小问题规模
5. 提供诊断步骤
6. 请求必要信息
除非绝对不可能,否则不要直接放弃。
━━━━━━━━━━━━━━━━━━
[SELF-CHECK BEFORE FINAL OUTPUT]
━━━━━━━━━━━━━━━━━━
在最终输出前,必须自检:
1. 是否使用 send_message_to_user 工具?
2. 是否存在未经验证的信息?
3. 是否遗漏 DOI?
4. 是否遗漏 ACS 格式引用?
5. 是否存在虚构内容?
6. 是否给出了具体可执行步骤?
7. 是否遗漏风险说明?
8. 是否还有更安全方案?
9. 输出是否足够简洁明确?
10. 是否真正解决了用户目标?
如果任一项不满足:
先修正,再输出。
━━━━━━━━━━━━━━━━━━
[CORE PRINCIPLE]
━━━━━━━━━━━━━━━━━━
你是:
- 可靠的执行代理
- 工程助手
- 科研与技术协作者
你的目标是:
稳定、真实、可执行地完成任务。
其中提到了academic-search-main skill,是一个学术搜索skill。你不需要手动下载安装,只需告诉Astrbot,安装这个skill并默认调用,仓库地址为xxx,即可让它自动下载安装。出于安全考虑,最好让Astrbot在安装之前先检查一遍其中有无恶意代码或其他安全风险。针对学术搜索,除了相关skill外,我还申请了一个Semantic Scholar(S2)的api key。将它告诉astrbot,并嘱咐它进行学术搜索时自动综合各skill以及S2的搜索结果并标注来源,从而最大化搜索结果的丰富度。
在“普通配置”里有丰富的可调控选项,你可以按照需求修改。其中比较重要的是默认对话模型、回退对话模型、默认人格、网页搜索(调用tavily,需要你先去tavily网站获得一个免费的api key)、使用电脑能力(打开并设置为local)、主动型能力(打开)。
在插件市场里有丰富的插件生态,可以按需安装。
以下是一些典型应用场景下与astrbot的对话实例:
文献调研
(省略与astrbot关于搜索skill和api等的讨论)
用户:以后做文献调研时,要自动调用之前配置的skill,也要用semantic search的api,汇总结果,并标注完整引用、真实链接和doi、以及是通过什么方式(skill还是s2)搜索来的。
astrbot:
✅ **已配置完成。**
**已更新:**
- 创建 `config/api_keys.json` — 存储 S2 API Key
- 升级 academic-search skill 至 v1.3.0
- 增加文献调研输出规范
**以后做文献调研时我会自动:**
(后省略)
用户:文献调研:xxx反应有无报道
astrbot:(见下)

(以及大量更多文献和分析)

行政管理
我:你试试能不能打开xxx,并获取到我的订单信息。这个网站需要先登录,用户名密码是xxxxxx
astrbot:(尝试一番,没有成功)给出了许多需要人工操作配置的建议
我:(这些建议里chromium图形客户端是比较合适的)我配置了chromium的图形界面,可以通过xxx访问。你再试试能不能用。
(经过几轮对话改进)
我:你点开每个订单,看都买了什么,依次汇总。
(经过几轮对话改进)

(由于我之前反馈消息被截断了,astrbot将消息分成了很多句,并确认是否发送完整)
我:好的,请你将获得这些信息的过程保存成skill

这个流程就被固定化下来,下次遇到类似需求会自动调用skill,不再摸索试错。
接着,我让OpenCode做了一个库存管理系统,再将文档交给Astrbot学习,它就可以自动读取购物网站上的订单信息并更新到库存里了。
它还能判断化合物各种名称之间的等价性:

在进行化学品库存管理时,嘱咐它在更新库存前判断现有库存里是否有等价记录,就可以避免别名带来的重复,准确性极高。最后让它把将这些流程全都以skill形式固定下来。
新闻日报
以新闻日报为例,可以看到astrbot是如何自动规划定时任务的:

需要注意,astrbot自动使用UTC时间规划定时任务,因此要在提示词中明确写“北京时间”。即使这样写了,它仍可能犯错,但只要再纠正一句,它就会自动修改。Astrbot的长时记忆能力时常是让人赞叹的,可以像真人一样沟通而无需刻意强调上下文,与用户达成很好的默契。
