如何配置opencode在web场景下工作
opencode 简介
opencode 是一个基于 OpenAI API 的工具,旨在帮助开发者更高效地进行代码开发和调试。它通过提供智能提示、代码补全和错误修复等功能,极大地提高了开发效率。在 web 场景下,opencode 可以通过浏览器扩展或集成到 IDE 中,为开发者提供实时的代码支持。
我就直说了吧,现阶段opencode不太可能具备claude code的完全能力,不仅仅是anthropic封禁了opencode的调用(这事其实能处理,后面聊) 关键问题是opencode作为一个agent工具在能力层面本身没有达到claude code的高度(似乎没有任何一个工具能)。
我们从以下几点出发:
- subagent能力:
是的opencode有subagent能力,但是其默认仅仅提供了两个subagent,分别是:
- General : 一个用于研究复杂问题和执行多步骤任务的通用代理。
- Explore : 一个用于探索代码仓库的子代理。 从客观角度说,opencode和claude code在能力层面存在非常大的差距,这都不算claude为此做出的优化,仅仅是基础功能差距就足够大了。
- skills能力
具备skills能力,核心问题还是模型问题。我想我们不用猜就能知道claude ops和claude sonnet一定为skill做了单独的诱惑,但是opencode本身没有自己的模型,因此能力差距主要体现在模型层面。
- plan能力
opencode存在plan能力,但是不是类似于claude的plan工具集成,它更像一个没有todolist的agent,因此在计划任务时,opencode需要用户手动输入任务列表,而claude则可以自动根据上下文生成任务列表。
- 模型支持
- 毫无疑问 cc支持的模型要么是自家的要么就是第三方主动贴上来支持的(比如kimi/GLM)
- opencode支持了太多的model,几乎能接进来的都接了,最近anthropic才给opencode封禁了,但也不是没有办法(后面聊),gemini和openai glm kimi firmware qwen 你知道的模型它都接了。
这么看起来好像挺惨的,但其实这东西绝非一无是处,让我来介绍一下它的优势项目:
- web模式 :
这是今天讨论的重点内容。它能直接在你本地部署成一个web服务,看起来和一个web coding agent没什么不同,你甚至可以把它部署到服务器上,然后随时继续自己的coding,用手机浏览器也可以。
- 模型选择情境下的上下文继承能力
换句话说,你可以完成prompt后,换一个模型继续prompt。
- LSP
cc原生不支持lsp,但是opencode可以,这很酷。
- 本地模型支持。
你完全可以在自己的服务器上跑一个GLM,或者租赁云平台的显卡跑一个qwen,然后接入它,这也很酷。这解决了很多企业级“代码不能外流”的痛点。说实话有点扯,密钥管理不好就别怪别人了。Anthropic和OpenAI对你的业务代码大概率没兴趣,拿来训练都会觉得脏吧hhhh。
我不想浪费太多口舌在差异上,你可以让大模型帮你总结一下,或者回头我总结一片。
Web部署
以下情境针对你需要一个web coding agent 服务的基础上。
典型的本地应用场景
本地场景指的是内网场景,你把pc连到手机同一个wifi下,然后你就能用你的移动设备书写代码,或者继续你在pc上的coding工作。
命令很简单:
opencode web
它默认会跑在localhost/127.0.0.1的4096端口上,如果不出意外的话,他会自动唤起默认浏览器并打开它。
如何指定端口呢?
opencode web --port 8080
如何指定我的本地访问IP?
opencode web --host 192.168.1.100
到此为止你已经能创建一个本地的web coding agent了。
我想跑在server上
首先:账户和密码,真很重要!
安全第一,你需要设置环境变量来设置用户密码。
把下列代码写入到你的.bashrc或者.zshrc之类的文件里。
export OPENCODE_SERVER_USERNAME=your-username
export OPENCODE_SERVER_PASSWORD=your-password
然后 source ~/.bashrc
然后你再次访问你部署的web服务,就会要求输入用户名和密码。
跨域处理
你也许需要一个域名来保证跨域访问(或者你真的下载了一个针对opencode的web页面,让opencode提供无头服务)
那么你需要这个
opencode web --cors https://your-domain.com
system service
实话讲,systemd怎么写都成,以下只是一个示例,别直接copy走,自己改一改会比较合适。
[Unit]
Description=OpenCode Web
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/root/code/asset-platform
ExecStart=opencode web --hostname x.x.x.x --port 1234 --cors http://www.baidu.com
Restart=always
RestartSec=2
Environment=OPENCODE_SERVER_USERNAME=your-username
Environment=OPENCODE_SERVER_PASSWORD=your-password
[Install]
WantedBy=multi-user.target
Environment也不是必须写在服务文件里,直接写在env文件里也挺好。
ExecStart部分如果你是用了nvm的话,那有可能是这么写:
ExecStart=/bin/bash -lc 'export NVM_DIR="/root/.nvm"; [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"; nvm use 22 >/dev/null; opencode web --hostname x.x.x.x --port 1234 --cors http://www.baidu.com
如果你用的其他什么fvm之类的都差不多,我就不举例了。
最后执行sudo systemctl daemon-reload 和 sudo systemctl enable –now opencode.service OK,所有事情都搞定了,去你的域名和端口访问web服务就行了。