企业级AI编程一体机参考实践
发表于: 2026/06/30
1 非商用声明
该文档提供的内容为参考实践,仅供用户参考使用,用户可参考实践文档构建自己的软件,按需进行安全、可靠性加固,但不建议直接将相关Demo或镜像文件集成到商用产品中。
2 方案介绍
2.1 背景介绍
随着大语言模型技术的普及,基于Agent(智能体)的 AI 辅助编程已成为研发人员不可或缺的日常基础设施。然而,在企业或特定研发环境中普及 AI 开发时,全托管的云端工具往往伴随着代码资产泄露风险与高昂的订阅成本。因此,基于本地模型或企业内部算力进行离线私有化部署,成为了保障核心数据安全、实现定制化开发的必然选择。
作为开源 AI 编程框架的代表,OpenCode 凭借对多模型后端的灵活支持与高扩展性的插件生态,成为了打通大模型能力与私有开发环境的核心桥梁。在完全隔离的离线环境下,能够快速部署一套稳定可靠、开箱即用且深度集成本地模型的 OpenCode 服务底座,不仅能确保全流程代码数据不出网,更能显著降低企业接入 AI 的门槛,对普及安全合规的 AI 辅助开发具有至关重要的落地价值。
2.2 方案架构
本实践所使用的特性架构如图所示:
图1 AI编程一体机(OpenCode)部署架构示意图

本实践围绕 OpenCode 的私有化部署,提供一套基于openFuyao的部署方案,集成以下特性:
1、集成 E2B 沙箱插件:可在独立的沙箱环境中执行指定命令,保护Agent环境。
2、集成OpenViking记忆管理功能:可将上下文记忆存储到OpenViking记忆仓库中,让上下文可检索,可复用。
3、集成SkillHub的skill管理功能:可将内部发布的skill快速部署到到本地使用,或者将本地开发的skill快速上传。
4、集成Envoy Gateway :屏蔽了底层复杂配置,以 Kubernetes 原生方式为企业级微服务提供高性能、高可靠的统一流量入口与安全屏障。
5、Ceph 持久化:选用Ceph RBD 作为持久化存储,保存 OpenCode 工作目录数据,Pod 重建后关键数据不丢失。
6、宿主机OS安全加固:提供环境检查脚本,对宿主机安全配置进行检查,给出加固建议。
7、Helm Chart 一键部署:提供标准化的 Helm Chart,将 OpenCode 服务、Envoy Gateway 路由、Ceph 持久化等资源统一管理,一条命令即可拉起全栈服务。
本方案的目标是降低私有化 OpenCode 部署的技术门槛,形成高可用,易部署,可复用、可扩展的私有化部署样例。
2.3 典型配置
针对不同的业务场景,给出不同的推荐配置,供参考:
表1 AI编程一体机典配方案
| 类别 | 旗舰版 | 标准版 | 轻量版 | |
|---|---|---|---|---|
| 典型配置 | Atlas 800I A3 * 4台 + 鲲鹏920新型号 * 3台 | Atlas 800I A3 * 2台 + 鲲鹏920新型号 * 1台 | Atlas 800I A3 * 1台 + 鲲鹏920新型号 * 1台 | |
| 典型业务场景 | 客户类型:金融、电力、制造、大企业等 研发规模:<900人,同时使用人数90~150人 吞吐需求:>15万Token/s | 客户类型:金融、电力、制造、大企业等 研发规模:<400人,同时使用人数40~70人 吞吐需求:6万~15万Token/s | 客户类型:金融、电力、制造、大企业等 研发规模:<150人,同时使用人数30人 吞吐需求:<6万Token/s | |
| 模型服务部署设备(必选) | 设备型号 | Atlas 800I A3(128G) | Atlas 800I A3(128G) | Atlas 800I A3(128G) |
| 设备数量 | 4台 | 2台 | 1台 | |
| 组网形态 | 灵衢互联 | 双机背靠背 | / | |
| 部署方案 | PD分离,EP32 | PD混部 | PD混部 | |
| 推荐模型 | GLM5.1/5.2(W8A8C8):支持~90人同时使用DeepSeek-V4-Flash(W8A8):支持~150人同时使用 | GLM5.1/5.2(W8A8C8):支持~40人同时使用DeepSeek-V4-Flash(W8A8):支持~70人同时使用 | DeepSeek-V4-Flash(W8A8):支持~30人同时使用 | |
| 推理引擎 | vLLM | |||
| 系统内存 | 1024GB (32GB DDR5 * 32)/台 | |||
| 硬盘 | 系统盘:SATA SSD 480GB * 2/台 数据盘:NVMe 3.84TB * 4/台 | |||
| Agent服务部署设备(可选) | 设备型号 | Kunpeng920新型号 | Kunpeng920新型号 | Kunpeng920新型号 |
| 设备数量 | 3台 | 1台 | 1台 | |
| 可部署Agent数 | ~300个OpenCode实例 | ~100个OpenCode实例 | ~100个OpenCode实例 | |
| CPU | 7260Z(64C) * 2/台 | |||
| 系统内存 | 512GB (64GB DDR5 * 8)/台 | |||
| 硬盘 | 系统盘:SATA SSD 480GB * 2/台 数据盘:SATA SSD 3.84TB * 2/台 | |||
| 网卡 | 2x25Gb光口网卡 * 2/台 | |||
| Raid卡 | Raid卡 * 1/台 | |||
| 操作系统 | openEuler 24.03 LTS SP3 | |||
| Agent使能套件 | 提供SkillHub服务、上下文管理服务、安全沙箱服务 | |||
表2 组件资源配置表
| 组件 | requests资源 | 备注 |
|---|---|---|
| openGauss | 8c16g | |
| OpenViking | 2c4g | 如果使用内置内置Embedding模型,建议适当放宽OpenViking的资源上限(如10c6g),可根据实际业务负载调整 |
| SkillHub | 1c4g | |
| E2B沙箱服务 | 11c24g | Agent使用E2B服务时创建的每个沙箱实例会额外占用2c2g(默认值),资源消耗正比于沙箱实例数 |
| OpenCode | 1c4g |
3 部署指南
3.1 软件版本
本实践中所用到的软件版本如下:
| 组件 | 版本 | 说明 |
|---|---|---|
| openFuyao | 26.03 | 基于开源Kubernetes深度优化的企业级容器化集群管理软件 |
| OpenCode | 1.15.12 | 开源编程Agent |
| E2B SDK | 1.0.0 | E2B沙箱接口(OpenCode接入插件为独立适配) |
| OpenViking-opencode-plugin | v0.3.24 | OpenCode接入OpenViking插件 |
| OS | OpenEuler 24.03-LTS-SP3 | 操作系统 |
| 基础镜像 | OpenEuler 24.03-LTS-SP3 | 构建OpenCode容器,基础镜像 |
| Helm | v3.14.2 | Kubernetes 包管理工具 |
3.2 部署流程
方案整体部署流程如下所示:
1、部署OpenFuyao平台。
2、下载/构建部署所需的镜像和软件等(离线部署可选)。
3、在昇腾服务器上部署模型服务。
4、部署记忆服务,为Agent提供上下文和记忆管理功能(可选)。
5、部署私有SkillHub,提供Skill管理服务(可选)。
6、部署E2B沙箱服务,为Agent提供安全运行环境(可选)。
7、部署网关服务,提供统一访问接口。
8、OS安全检查。
9、部署OpenCode应用实例。
其中,步骤1~8可分别参考以下参考实践进行部署,本实践重点介绍OpenCode实例部署:
openFuyao部署: https://www.hikunpeng.com/zh/developer/techArticles/20260701-8
模型服务部署: https://www.hiascend.com/zh/developer/techArticles/20260630-1
公用服务部署(记忆服务,SkillHub服务,E2B沙箱服务,网关服务)+OS安全检查: https://www.hiascend.com/zh/developer/techArticles/20260630-5
3.3 OpenCode实例部署
本方案部署OpenCode实例分为以下几个步骤:
1、将基于Dockerfile构建OpenCode镜像上传至镜像仓。
2、将提供的HelmChart文件上传至openFuayo本地仓库。
3、在openFuyao的管理界面,修改values.yaml参数,创建应用实例,或者进行管理。
其中values.yaml参数的修改和介绍,见参数配置指南章节,或者参考代码仓中的README.md。
注意!Helm Charts中的values配置文件包含用户名和密码信息,若在生产环境中使用,建议采用加密或外部密钥管理方式保护敏感信息,避免泄露。
步骤1:构建OpenCode镜像并上传至镜像仓。
下载并进入Dockerfile文件所在路径(https://gitcode.com/Ascend/ascend-deployer/blob/appliance_deployer/kadt/opencode/build-images/full)。如果环境中没有docker运行时,可替换成nerdctl等其它运行时命令。
下载代码仓:
# 下载指定分支代码仓
git clone -b appliance_deployer --single-branch --depth 1 https://gitcode.com/Ascend/ascend-deployer.git
# 进入dockerfile路径
cd kadt/opencode/build-images/full
基础镜像使用openEuler-24.03-LTS-SP3,如果docker pull拉取基础镜像存在问题,可以下载镜像压缩包,然后导入镜像:
# 拉取openEuler镜像
docker pull openeuler/openeuler:24.03-lts-sp3
# 修改tag 并 push 到私有镜像仓库
docker tag openeuler/openeuler:24.03-lts-sp3 deploy.bocloud.k8s:40443/openeuler:24.03-lts-sp3
docker push deploy.bocloud.k8s:40443/openeuler:24.03-lts-sp3
镜像默认构建命令如下(为了安全性,默认不会进行换源和关闭SSL):
docker build -t deploy.bocloud.k8s:40443/opencode-e2b-full:<tag> .
支持通过 --build-arg 传入参数,例如使用换源和关闭SSL加速构建,注意需要用户自行保证安全性:
docker build --build-arg mirrors_nossl=True-t deploy.bocloud.k8s:40443/opencode-e2b-full:<tag> .
如需在构建时配置网络代理,参考如下命令进行构建:
# 有代理构建
docker build \
--build-arg HTTP_PROXY=http://proxy:port \
--build-arg HTTPS_PROXY=http://proxy:port \
--build-arg NO_PROXY=127.0.0.1,localhost \
-t deploy.bocloud.k8s:40443/opencode-e2b-full:<tag> .
制作好镜像后,修改镜像tag并上传至镜像仓
docker push deploy.bocloud.k8s:40443/opencode-e2b-full:<tag>
步骤2:将HelmChart文件上传openFuayo本地仓库。
HelmChart下载地址( https://gitcode.com/Ascend/ascend-deployer/tree/appliance_deployer/kadt/opencode/charts/opencode-e2b-helm ),下载后,需要手动制作为.tar.gz的压缩包。
上传前,建议先同步一次本地仓,防止在向本地仓上传时报错。操作方式为,进入openFuyao管理界面,从“应用市场”中进入“仓库配置”界面,找到local仓库,执行“同步仓库”,同步成功后会有成功提示,可参考图示操作。
图1 openFuyao同步local仓
然后上传HelmChart压缩包,注意需要将HelmChart文件压缩为.tar.gz或者.tgz格式,然后从“应用市场”的“仓库配置”中,进入“包管理”,然后点击“添加包”,会弹出上传界面,然后如图点击“上传文件”后指定压缩包文件即可。
图2 进入openFuyao的包管理界面,点击“添加包”

图3 使用openFuyao上传包

步骤3:在openFuyao的管理界面,定制化修改参数,进行应用的创建与发放。
从“应用市场”进入应用列表,找到之前上传的opencode应用,然后点击应用,进入应用创建界面,修改参数后进行创建。具体参数配置方式,在参数配置指南章节详细介绍。如果想快速拉起实例,可以关闭其它特性,只进行4.1章节的基础配置。
图4 找到上传的OpenCode应用

图5 修改相关配置参数后,一键部署。
成功部署的应用,可以在应用管理中找到,支持在WEBUI上进行升级、回退、卸载等操作。
图6 在应用管理中,找到部署的应用,进行管理。
4 参数配置指南
4.1 OpenCode基础配置(快速拉起)
本章节介绍OpenCode实例,在values.yaml中的基础参数配置,例如使用的命名空间,镜像,实例后缀,登陆用户名密码等。
如果需要进行最小配置进行快速服务拉起,可先将如下特性使能配置为false(E2B+SkillHub+OpenViking),然后完成本小节的参数配置,即可快速拉起OpenCode实例。
1、opencode.e2b.enabled
2、opencode.e2b.sandboxEnabled
3、opencode.skillhub.enabled
4、opencode.openviking.enabled
本小节的配置可分为3部分:基础配置,模型配置,网关配置。
1、基础配置
每个不同实例,都需要配置不同的实例后缀,可以使用不同用户名来区分不同使用者(Alice,Bob等)。
登陆凭据注入方式为环境变量 OPENCODE_SERVER_USERNAME / OPENCODE_SERVER_PASSWORD,同时用于 Health Probe 的 HTTP Basic Auth 鉴权。
表1 基础信息配置
| 参数 | 默认值 | 含义 | 部署时是否必须修改 |
|---|---|---|---|
| global.namespace | YOUR_NAMESPACE | 部署命名空间,所有 K8s 资源创建于此 | 是 |
| opencode.image.repository | YOUR_REGISTRY/kubernetes/opencode-e2b-full | 镜像仓库地址 | 是 |
| opencode.image.tag | YOUR_TAG | 镜像标签 | 是 |
| opencode.instanceSuffix | YOUR_SUFFIX | 实例后缀,所有资源名称以此结尾,每个实例必须不同 | 是 |
| opencode.auth.username | YOUR_USERNAME | Basic Auth 登录用户名 | 是 |
| opencode.auth.password | YOUR_PASSWORD | Basic Auth 登录密码 | 是 |
每个实例分配的系统资源按照如下配置(存储资源还有ceph,在后续配置章节介绍):
表2 主容器资源相关参数
| 参数 | 默认值 | 含义 | 部署时是否必须修改 |
|---|---|---|---|
| opencode.resources.requests.cpu | "1" | CPU 请求量 | 否 |
| opencode.resources.requests.memory | "4Gi" | 内存请求量 | 否 |
| opencode.resources.requests.ephemeral-storage | "2Gi" | 临时存储请求量 | 否 |
| opencode.resources.limits.cpu | "1" | CPU 上限 | 否 |
| opencode.resources.limits.memory | "4Gi" | 内存上限 | 否 |
| opencode.resources.limits.ephemeral-storage | "5Gi" | 临时存储上限 | 否 |
2、模型配置
OpenCode使用时,需要提供LLM模型服务,values中配置LLM服务的参数示例如下:
llm:
providers:
local_model_provider:
name: local-model-service
npm: "@ai-sdk/openai-compatible"
options:
baseURL: "http://YOUR_LLM_HOST:8000/v1"
apiKey: "YOUR_LLM_API_KEY"
models:
deepseek_v4_flash:
name: dsv4
3、网关配置
OpenCode实例对外提供服务的路由方式,推荐使用Gateway方式:
表4 支持的路由方式
| 方式 | 适用场景 | 备注 |
|---|---|---|
| Envoy Gateway HostName | 基于网关入口,适用生产环境,通过域名访问 | 推荐 |
| Envoy GatewaySectionName | 基于网关入口,适用生产环境,通过 IP访问 | 推荐,每个实例需要独占Listener |
在values.yaml中对应的配置参数如下:
表5 网络相关参数配置
| 参数 | 默认值 | 含义 | 部署时是否必须修改 |
|---|---|---|---|
| opencode.network.port | YOUR_PORT | OpenCode 服务所用端口,containerPort / Service port / Envoy listenerPort 均指向此值 | 是 |
| opencode.network.envoy.enabled | true | 是否启用 Envoy Gateway 接入 | 否 |
| opencode.network.envoy.gatewayName | YOUR_GATEWAY_NAME | 目标 Gateway 名称 | 是 |
| opencode.network.envoy.gatewayNamespace | YOUR_GATEWAY_NAMESPACE | Gateway 所在命名空间 | 是 |
| opencode.network.envoy.bindMode | hostname | 路由模式:sectionName / hostname | 否 |
| opencode.network.envoy.listenerName | YOUR_LISTENER_NAME | 绑定到的 Gateway listener 名称 | 是(bindMode=sectionName 时) |
| opencode.network.envoy.baseDomain | YOUR_BASE_DOMAIN | 基域(bindMode=hostname 时使用) | 是(bindMode=hostname 时) |
两种路由方案都需要有listener,在服务器上创建listener的参考命令如下:
kubectl patch gateway -n xxxx cluster-gateway --type='json' -p='[
{
"op": "add",
"path": "/spec/listeners/-",
"value": {
"name": "opencode-service-v3",
"port": xxxx,
"protocol": "HTTP",
"allowedRoutes": {
"kinds": [
{"kind": "HTTPRoute"}
],
"namespaces": {
"from": "All"
}
}
}
}
]'
方式一:hostname 模式(按域名绑定,所有实例共享1个listener)
Gateway 根据请求的域名(Host 头)来分发流量。给 OpenCode 配一个域名,例如按照实例后缀进行渲染(比如 bob.opencode.local),Gateway 看到请求 Host 是这个域名,就知道要转发给 OpenCode。这样同一个端口上可以挂多个服务,靠域名区分。
Gateway Listener: 18799
├── HTTPRoute hostname=alice.opencode.local → Service-alice
└── HTTPRoute hostname=bob.opencode.local → Service-bob
适用场景: 有域名,多个服务共享一个 Gateway 端口,共享1个Listener,通过不同域名(实例后缀)来区分。
配置方式: bindMode配置为hostname(例如bob),baseDomain配置为基域(例如opencode.local),OpenCode 会自动生成子域名{hostPrefix}.{baseDomain},例如bob.opencode.local。
使用域名访问时,需进行DNS配置,对于Windows PC,修改C:\Windows\System32\drivers\etc\hosts文件,在文件末尾添加'IP 域名'后保存即可使用域名:端口访问Openclaw实例,如添加如下配置后可通过http://bob.opencode.local:18799地址访问。
{Gateway IP} bob.opencode.local
方式二:sectionName 模式(按端口名绑定)
创建每个实例前,提前在Gateway 上创建新的listener,让每个OpenCode实例独占一个listener。
连接通路: Envoy Gateway (gatewayIP:listenerPort) ──→ HTTPRoute (sectionName 匹配 listener 名称) ──→ Service (opencode-service-clusterip, ClusterIP) ──→ containerPort ──→ Pod
适用场景: 没有域名,直接用 IP + 端口访问。每个OpenCode实例需要独占一个Listener。
配置方式: 需要先保证 Gateway 上有未被占用的 Listener,然后在 values 里把 bindMode 配置为 sectionName,listenerName 配置为 Listener 的名字。
4.2 安全沙箱 (E2B)
E2B服务 可以提供独立的沙箱执行环境,当 OpenCode 需要执行 shell 命令或 Python 脚本时,可以选择在 E2B 沙箱中执行,而不是在本地容器中执行,实现安全隔离。
使用该特性前,需要环境中已经提供E2B沙箱公共服务(参考部署流程章节)和OpenCode实例中安装配套的E2B插件(实例部署章节提供的Dockerfile中会自动安装)。如果期望其它Agent使能E2B特性,可以在拉起E2B沙箱公共服务后,参考附录内容,使用Skill进行调用。
本章节介绍配置使能E2B特性,在使用HelmChart的values.yaml中,配置以下E2B相关的参数,即可在拉起的OpenCode实例中使能沙箱特性:
表1 E2B沙箱相关参数
| 参数 | 默认值 | 含义 | 部署时是否必须修改 |
|---|---|---|---|
| opencode.e2b.enabled | true | 是否注入 E2B 环境变量 | 否 |
| opencode.e2b.sandboxEnabled | true | 是否启用沙箱(环境变量 E2B_SANDBOX_ENABLED) | 否 |
| opencode.e2b.apiKey | YOUR_E2B_API_KEY | E2B API 密钥 | 是(沙箱执行时必改) |
| opencode.e2b.hostIp | YOUR_E2B_HOST_IP | E2B 服务 IP | 是 |
| opencode.e2b.template | e2b-ubuntu | E2B 沙箱模板名称 | 是(需要为环境中有模板) |
完成相关配置并拉起OpenCode服务后,会自动安装2种E2B调用方式:e2b-sandbox的skill调用(推荐)和local-exec的插件调用。
1. e2b-sandbox技能调用
通过/e2b-sandbox的方式,指定在沙箱内执行目标任务,OpenCode可以自动解析出skill,然后进行相关调用。
调用沙箱skill:
任务执行过程中,会调用对应脚本,进行脚本的上传,执行,下载等操作:
执行完后,返回任务结果,将沙箱清理(防止资源占用):
2. local-exec插件调用
可以local-exec提示词,指定运行在E2B环境中。例如“使用local-exec执行uname -a”,可以观察到返回的E2B信息,与在本地执行的返回值不同。
在沙箱执行命令:

在本地执行命令:

4.3 安全配置
OpenCode自身并未进行沙箱隔离,如果需要环境隔离,请将OpenCode启动在沙箱或者容器中。
OpenCode具有工具执行能力,如果想对命令执行加以控制,可以单独配置工具权限,具有以下三种等级(官方参考文档:https://opencode.ai/docs/permissions):
1、"allow" — 无需审批直接运行
2、"ask" — 提示审批
3、"deny" — 阻止该操作
可以在opencode.jsonc文件中(全局生效:~/.config/opencode/opencode.jsonc),例如参考如下配置,高危操作(rm)需要用户同意,修改文件时,除了项目空间外的内容,也需要同意:
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"bash": {
"rm *": "ask",
},
"edit": {
"*": "ask",
"~/oc_space": "allow"
}
}
}
4.4 技能管理(SkillHub)
SkillHub是一个可本地部署的技能市场,提供私有部署的技能发布、下载和管理能力,可通过下载SkillHub的CLI工具来接入SkillHub服务。
本章节介绍如何在HelmChart部署的OpenCode实例中使用SkillHub,前置要求已经完成SkillHub服务的部署,并创建个人token。
创建个人Token的方式为,登陆拉起的SkillHub服务的Web界面,然后从账号页进入控制台,然后选择创建API Token:
图1 登陆后首页

图2 创建API Token

在HelmChart的values.yaml中,配置以下SkillHub相关的参数,即可在拉起的OpenCode实例中使能SkillHub技能管理特性:
| 参数 | 默认值 | 含义 | 部署时是否必须修改 |
|---|---|---|---|
| opencode.skillhub.enabled | true | 是否启用 SkillHub | 否 |
| opencode.skillhub.registry | http://skillhub-server.YOUR_NAMESPACE:8080 | SkillHub 注册中心地址 | 是(需与环境一致) |
| opencode.skillhub.loginToken | YOUR_SKILLHUB_LOGIN_TOKEN | 预配置登录 Token | 是 |
本方案主要实现为,将SkillHub的CLI构建到镜像中,在通过HelmChart拉起实例时,只需要配置登陆信息,即可使用SkillHub。
使能SkillHub后,可让OpenCode通过“skillhub --help”指令自行查询使用方式,也可以手动使用SkillHub-CLI的内置命令。
图3 让OpenCode查询SkillHub-CLI的使用方式

也可手动执行相关操作,SillHub-CLI的使用命令参考如下,或者可查阅官方文档(https://iflytek.github.io/skillhub/guide/skill-publish.html):
1、登陆(若没有在values.yaml配置登陆token,可手动创建token后,在OpenCode实例中完成登陆):
# 登录,输入创建好的api token和SkillHub地址
skillhub login --token sk_xxxx --registry http://xxxx
登陆后,可以whoami查看当前登陆的账号信息
# 查看当前登陆的账号信息
skillhub whoami
# 预期有如下格式回显
Registry: xxxx
Handle: xxxx
Name: xxxx
2、其它常用操作参考如下:
# 上传技能,不指定namespace则默认上传到global空间
skillhub publish ./{your_skill} --namespace {your_namespace}
# 使用关键字,搜索技能库中可用技能
skillhub search {keyword}
# 下载安装skill到指定Agent,默认使用global空间,agent参数填写所使用的Agent名称,例如opencode
skillhub install {skill_name} --agent opencode
# 回显显示具体的下载路径
Installed {your_workspace}/{skill_name} -> /root/.opencode/skills/{skill_name} (opencode)
# 删除已安装技能
skillhub remove {skill_name}
4.5 记忆管理(OpenViking)
OpenViking 是一个开源的、专为 AI Agent 设计的上下文数据库,将所有上下文(Memory、Resource、Skill)统一抽象为目录结构,支持语义检索和渐进式内容加载。
需要在集群中, 提前部署好可用的OpenViking服务,以及在OpenCode实例的namespace中配置配置好OpenViking服务的ROOT API KEY(或者采用创建个人key,则不需要此配置,具体可参考README和values注释)。
OpenViking Secret 创建方式如下:
kubectl create secret generic openviking-secrets -n 'your-opencode-namespace' --from-literal=OPENVIKING_ROOT_API_KEY='your-root-api-key'
说明: Secret 必须在 helm install / helm upgrade 之前存在于命名空间中,否则 Pod 启动失败。Secret 更新后需重启 Pod 才能生效。
本方案通过将OpenViking插件构建到镜像中,只需要在values.yaml中配置以下参数,然后使用HelmChart拉起OpenCode实例,即可使能OpenViking特性:
| 参数 | 默认值 | 含义 | 部署时是否必须修改 |
|---|---|---|---|
| opencode.openviking.enabled | true | 是否启用 OpenViking | 否 |
| opencode.openviking.baseUrl | http://openviking.YOUR_NAMESPACE:1933 | OpenViking 服务地址 | 是(需与环境一致) |
| opencode.openviking.rootApiKeyRefName | openviking-secrets | OpenViking 根 API 密钥所在 K8s Secret 名称 | 否(需提前配置) |
| opencode.openviking.rootApiKeyRefKey | OPENVIKING_ROOT_API_KEY | Secret 中的密钥字段名 | 否(需提前配置) |
插件会通过 OpenCode tool hook 暴露这些工具,例如对OpenCode输入“记住一个magic number=2341”,让其自动触发记忆工具,或者显式指定调用“使用memcommit提交记忆”,支持的工具有:
1、memsearch:语义检索 memories/resources/skills
2、memread:读取具体 viking:// URI
3、membrowse:浏览 OpenViking 文件系统
4、memcommit:提交当前 session 并触发记忆提取
5、memgrep:精确文本或模式搜索
6、memadd:添加远端 URL 或本地文件资源
详细含命令含义和用法可参考官方代码仓文档:https://github.com/volcengine/OpenViking/blob/main/examples/opencode-plugin/INSTALL-ZH.md
4.6 基于Ceph的持久化存储
本方案支持接入Ceph块存储的PVC持久化存储,前置条件为在集群中提前部署好Ceph服务。
使能接入Ceph的持久化存储特性,在values.yaml中配置以下相关参数:
| 参数 | 默认值 | 含义 | 部署时是否必须修改 |
|---|---|---|---|
| opencode.persistence.enabled | true | 是否启用 PVC 持久化 | 否 |
| opencode.persistence.storageClass | ceph-block | PVC 使用的 StorageClass | 否(与环境一致即可) |
| opencode.persistence.accessMode | ReadWriteOnce | PVC 访问模式 | 否 |
| opencode.persistence.size | 5Gi | PVC 容量 | 否 |
| opencode.persistence.mountPath | /root | 主容器 PVC 挂载路径 | 否 |
| opencode.persistence.workspaceDir | oc_space/project_1 | 相对 mountPath 的工作空间目录(仅首次初始化空 PVC 时创建,空值跳过) | 否 |
使能该特性后,对应的自动化操作为:
- 自动创建 PVC(命名为opencode-pvc{instanceSuffix}),使用指定 StorageClass。
- PVC 挂载到 Pod 的 /root(mountPath 可配置),首次挂载时 init 容器将镜像 /root 内容同步到 PVC。
- 后续 Pod 重启时检测到 PVC 已有数据,跳过同步以保留现有内容,防止镜像原有内容覆盖存储内容。
5. 附录
5.1 个人PC场景(Windows)E2B沙箱Skill使用示例
当前沙箱skill的支持hijack(仅linux)和proxy模式(通用),其中hijack模式为对流量进行劫持,当前Helm Chart方案采用此模式。proxy模式需要启动独立的代理转发服务,优点为泛用性更强(例如支持Windows环境使用),缺点为需要新增独立的服务。
本章节提供一份在Windows环境下的全流程实践,包含以下步骤:
1. 前置准备
2. skill安装
3. 信息配置
4. 使用沙箱
以下为步骤详细内容:
1. 前置准备
拉起公共E2B公共服务,保证Window设备可访问,在window设备下载OpenCode和skill文件(https://gitcode.com/Ascend/ascend-deployer/tree/appliance_deployer/kadt/opencode/build-images/full/skills/e2b-sandbox)。
2. skill安装
将skill包拷贝到OpenCode工作空间下,可以让agent自行安装,或者自己手动安装,注意按照后生效需要重启OpenCode。
可让Agent自行安装skill,按需可选择全局使能或者项目使能(只使能在当前项目空间下):
安装完成后,需要重启OpenCode使其生效:
过程中会提示缺少相关信息,按需提供即可,主要配置的信息有:
| 配置项 | 含义 | 是否必须提供 |
|---|---|---|
| networkMode | Windows只支持proxy模式(独立转发服务)。 | 是 |
| hostip | E2B公共沙箱服务地址 | 是 |
| 服务端口 | 按需修改(一般为默认值) | 按需,一般为默认值 |
| apikey | 访问E2B公共服务的key | 是 |
| template | 沙箱模板 | 按需,一般为默认值 |
根据提示,提供环境信息:
需要的代理服务,可以让Agent自行拉起:
4. 使用沙箱
完成skill安装和环境信息配置后,即可开始使用,提示词为在在沙箱内执行目标任务。
在沙箱内执行任务:



