开源的AI编码代理OpenCode

开源的AI编码代理OpenCode
在这里插入图片描述

和之前 在Instantbox中安装OpenCode 在别的容器中安装 OpenCode 不同,本次使用的是官方原生的 Docker 镜像

简介

什么是 OpenCode?

OpenCode 是一个开源的 AI 编码代理(AI Coding Agent),通过大语言模型(LLM)自动化编程任务,从任务理解、代码生成到执行测试和自我修正,形成闭环。它支持终端、桌面应用和 IDE 集成,让开发者用自然语言描述需求,代理就能独立完成编码工作。

主要特点

  • 完全开源:采用 MIT 许可证,您可以自由使用、修改和分发。
  • 模型无锁定:您可以灵活配置并使用任何您喜欢的 AI 模型,无论是云端 API 还是本地模型。
  • 多种代理模式
    • build 代理:拥有完全的系统访问权限,专为编码、调试和测试等开发工作设计。
    • plan 代理:只读模式,用于安全地分析和探索代码库,执行敏感操作前会请求许可。
  • 多样的使用方式:支持交互式命令行(CLI)、Web 浏览器界面,甚至还有跨平台的桌面应用。
  • 客户端/服务器架构:允许您将核心服务部署在远程服务器上,然后在本地通过客户端连接进行远程开发。

应用场景

  • 日常软件开发:使用 build 代理进行编码、调试、编写测试。
  • 学习新项目:使用 plan 代理安全地分析和理解一个陌生的代码库。
  • 项目规划与重构:在进行大型重构前,进行分析和计划制定。
  • 远程开发:将 OpenCode 服务部署在云服务器上,随时随地在本地进行高效编程。

OpenCode 不受任何特定 AI 模型供应商的限制,允许您自由选择使用 ClaudeOpenAIGoogle 或是本地部署的 AI 模型。注重终端体验,但同样提供了 Web 界面和桌面应用,以满足不同开发者的使用偏好。

安装

OpenCode 提供了多种灵活的部署方式,以下我们重点介绍在群晖上通过 Docker 安装与运行的两种模式。

本文写作时, latest 版本对应为 1.2.15

1. 命令行 (CLI) 交互模式

这种方式非常适合快速、一次性的交互任务。它会在您退出后自动清理容器,不留下任何残留。

打开您的终端,执行以下命令:

docker run -it--rm ghcr.io/anomalyco/opencode:latest 

命令说明:

  • -it: 启动交互模式,允许您与容器内的 OpenCode 进程进行实时对话。
  • --rm: 容器停止后自动删除,保持系统整洁。
  • ghcr.io/anomalyco/opencode: OpenCode 的官方 Docker 镜像。
  • 对于 CLI 模式,执行命令后直接在终端中即可开始与 OpenCode 交互

2. 网页 (Web) 服务模式

这种方式会将 OpenCode 作为一个后台服务长期运行,并提供一个 Web 界面供您随时访问。非常适合部署在个人服务器或群晖 NAS 上。

第一步:准备目录

# 新建文件夹 opencode 和数据子目录mkdir-p /volume1/docker/opencode/{data,workspace}# 进入 opencode 目录cd /volume1/docker/opencode 
注意/volume1/docker/opencode/data 是示例路径,您可以根据自己的实际情况修改。

第二步:运行容器

# 运行容器docker run -d\--restart unless-stopped \--name opencode \-p4096:4096 \-v$(pwd)/data:/home/opencode \-v$(pwd)/workspace:/home/opencode/workspace \-eHOME=/home/opencode \ ghcr.io/anomalyco/opencode:latest \ web --hostname0.0.0.0 --port4096# 带自定义账号密码docker run -d\--restart unless-stopped \--name opencode \-p4096:4096 \-v$(pwd)/data:/home/opencode \-v$(pwd)/workspace:/home/opencode/workspace \-eHOME=/home/opencode \-eOPENCODE_SERVER_USERNAME=laosu \-eOPENCODE_SERVER_PASSWORD=123456\ ghcr.io/anomalyco/opencode:latest \ web --hostname0.0.0.0 --port4096

参数说明:

  • 端口 (-p)
    • 本地端口 4096 映射到容器的 4096 端口。
  • 卷 (-v)
    • 将当前目录下的 data 文件夹(即您刚创建的 /volume1/docker/opencode/data)挂载到容器的 /home/opencode 目录,用于持久化存储 OpenCode 的数据。
    • 将当前目录下的 workspace 文件夹,挂载到容器的 /home/opencode/workspace 目录,作为项目文件夹。
  • 环境变量 (-e)
    • HOME=/home/opencode: 设置容器内的主目录。
    • OPENCODE_SERVER_USERNAME=laosu:设置自定义用户名,默认用户为 opencode
    • OPENCODE_SERVER_PASSWORD=123456:添加强密码的保护。
  • 容器执行命令
    • web --hostname 0.0.0.0 --port 4096: 这部分是容器启动后执行的命令,意为以 Web 模式启动,并监听在所有网络接口的 4096 端口上。

运行

  • 对于 Web 模式,执行命令后,在浏览器中输入 http://群晖IP:4096 即可看到 OpenCode 的网页界面。

如果设置了自定义账号密码,则需要先登录

用来跑代码还是不错的

手机上也能看到对话

参考文档

anomalyco/opencode: The open source coding agent.
地址:https://github.com/anomalyco/opencode/
OpenCode | 开源 AI 编程代理
地址:https://opencode.ai/
Package opencode
地址:https://ghcr.io/anomalyco/opencode

Read more

前端部署:从开发到生产的最后一公里

前端部署:从开发到生产的最后一公里 毒舌时刻 前端部署?这不是运维的事吗? "我只负责写代码,部署交给运维"——结果部署失败,互相甩锅, "我直接把文件上传到服务器"——结果更新不及时,缓存问题频发, "我用FTP上传,多简单"——结果文件传丢,网站崩溃。 醒醒吧,前端部署是前端开发的重要环节,不是别人的事! 为什么你需要这个? * 快速上线:自动化部署,减少人工操作 * 环境一致性:确保开发、测试、生产环境一致 * 回滚能力:出现问题时可以快速回滚 * 监控和日志:实时监控网站状态和错误 反面教材 # 反面教材:手动部署 # 1. 本地构建 npm run build # 2. 手动上传文件 ftp ftp://example.

Web 服务与 I/O 模型

一、Web 服务介绍 1.1.1 Apache prefork 模型(预派生模式) * 核心机制:主控制进程派生多个独立子进程,使用select模型,最大并发 1024;每个子进程单线程响应用户请求 * 资源特性:占用内存较多,但稳定性极高 * 配置特点:可设置进程数的最大值和最小值 * 适用场景:访问量中等的场景 * 优缺点 * ✅ 优点:极致稳定,故障隔离性好 * ❌ 缺点:每个请求对应一个进程,资源占用高,并发能力弱,不适合高并发场景 1.1.2 Apache worker 模型(多进程 + 多线程混合模式) * 核心机制:主进程启动多个子进程,每个子进程包含固定线程数;线程处理请求,线程不足时新建子进程补充 * 资源特性:相比 prefork 内存占用更少,支持更高并发

GoWeb必备理论

GoWeb必备理论

关于goweb,你不得不知道的知识 若是初学者可以借鉴GoWeb查阅本文。 HTTP状态码: 意义 每个状态码都是,http设计者对“网络通讯”中可能出现的情况的假设、预判。他就相当于现实世界的信号灯,就像大家一遇到404,就知道资源找不到了。一遇到500就知道服务器挂了。这种共识,也就是如今万维网的高效率的基础之一。 http状态码是日常开发,修改bug,的居家必备神器。咱们对常见状态码做了分类。 1、必须掌握的状态码 200 ok 最常见的状态码,代表请求完全正确,比如打开网页、调用api啥的。 301 moved permanently 资源永久迁移(例:访问时a.com会被从定项到b.com) 302 Found (部分资源,临时迁移) 400 Bad request(请求出错,参数缺少什么的..) 401 unauthorized(没有登入) 403 forbidden(