---
title: 企业级AI编程一体机参考实践-官方技术文章-昇腾社区
description: 随着大语言模型技术的普及，基于Agent（智能体）的 AI 辅助编程已成为研发人员不可或缺的日常基础设施。然而，在企业或特定研发环境中普及 AI 开发时，全托管的云端工具往往伴随着代码资产泄露风险与高昂的订阅成本。因此，基于本地模型或企业内部算力进行离线私有化部署，成为了保障核心数据安全、实现定制化开发的必然选择。 作为开源 AI 编程框架的代表，OpenCode 凭借对多模型后端的灵活支持与高扩
keywords: AI,企业级,编程一体机参,考实践,官方技术文章,昇腾社区,非商用声明,方案介绍
url: https://www.hiascend.com/developer/techArticles/20260630-11?envFlag=1
section: (其他)
---

# 企业级AI编程一体机参考实践-官方技术文章-昇腾社区

URL: https://www.hiascend.com/developer/techArticles/20260630-11?envFlag=1
描述: 随着大语言模型技术的普及，基于Agent（智能体）的 AI 辅助编程已成为研发人员不可或缺的日常基础设施。然而，在企业或特定研发环境中普及 AI 开发时，全托管的云端工具往往伴随着代码资产泄露风险与高昂的订阅成本。因此，基于本地模型或企业内部算力进行离线私有化部署，成为了保障核心数据安全、实现定制化开发的必然选择。 作为开源 AI 编程框架的代表，OpenCode 凭借对多模型后端的灵活支持与高扩
关键词: AI,企业级,编程一体机参,考实践,官方技术文章,昇腾社区,非商用声明,方案介绍

官方技术文章 [了解详情](https://www.hiascend.com/zh/developer/techArticles)

企业级AI编程一体机参考实践

企业级AI编程一体机参考实践

Ascend DeployerOpenClawAIAgent计算商业SMECE

发表于: 2026/06/30

## 1 非商用声明

该文档提供的内容为参考实践，仅供用户参考使用，用户可参考实践文档构建自己的软件，按需进行安全、可靠性加固，但不建议直接将相关Demo或镜像文件集成到商用产品中。

## 2 方案介绍

## 2.1 背景介绍

随着大语言模型技术的普及，基于Agent（智能体）的 AI 辅助编程已成为研发人员不可或缺的日常基础设施。然而，在企业或特定研发环境中普及 AI 开发时，全托管的云端工具往往伴随着代码资产泄露风险与高昂的订阅成本。因此，基于本地模型或企业内部算力进行离线私有化部署，成为了保障核心数据安全、实现定制化开发的必然选择。

作为开源 AI 编程框架的代表，OpenCode 凭借对多模型后端的灵活支持与高扩展性的插件生态，成为了打通大模型能力与私有开发环境的核心桥梁。在完全隔离的离线环境下，能够快速部署一套稳定可靠、开箱即用且深度集成本地模型的 OpenCode 服务底座，不仅能确保全流程代码数据不出网，更能显著降低企业接入 AI 的门槛，对普及安全合规的 AI 辅助开发具有至关重要的落地价值。

## 2.2 方案架构

本实践所使用的特性架构如图所示：

图1AI编程一体机（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 典型配置

针对不同的业务场景，给出不同的推荐配置，供参考：

表1AI编程一体机典配方案-鲲鹏服务器-硬件规格

| 鲲鹏服务器 | 旗舰版 | 标准版 | 轻量版 |
| --- | --- | --- | ---|
| 整机形态 | Kunpeng920新型号  2+台（N） | Kunpeng920新型号 1台 | Kunpeng920新型号 1台 |
| 规格(Agent数) | 约N/2 * 180 | 约90 | 约40 |
| CPU | 7260Z (64C) x 2 | 7260Z (64C) x 2 | 5252Z (40C) x 2 |
| 内存 | 512GB （64G x 8*DDR5) | 512GB （64G x8 DDR5) | 512GB （64G x 8 DDR5) |
| 硬盘 | OS盘：480GB SATA SSD x 2 RAID1 | OS盘：480GB SATA SSD x 2 RAID1 | OS盘：480GB SATA SSD x 2 RAID1 |
| 数据 | Nvme 3.84T*2 RAID1 | Nvme 3.84T*2 RAID1 | Nvme3.84T*2 RAID1 |
| 网卡 | 2*25Gb x 1 | 2*25Gb x 1 | 2*25Gb x 1 |
| 其他 | Raid卡：1张 | Raid卡：1张 | Raid卡：1张 |
| 操作系统 | openEuler 24.03 LTS SP3 |  |  |
| 资源管理调度服务 | 选1台部署openFuyao Master，3台以上建议选取其中三台部署openFuyao Master，其余服务器部署openFuyao Worker |  |  |
| 分布式存储系统 | 选1台部署Ceph，3台以上建议将Ceph集群扩容到3节点 |  |  |
| 模型管理服务 | 选1台部署GPUStack Server服务 |  |  |
| 技能市场 | 选1台部署SkilHub (可选) |  |  |
| 记忆服务 | 选1台部署OpenViking（可选） |  |  |
| 沙箱服务 | 选1台部署E2B沙箱（可选） |  |  |
| 数据库服务 | 选1台部署openGauss单机版，3台及以上建议部署一主两备 |  |  |

表2AI编程一体机典配方案-昇腾服务器

| 推理服务器 | 旗舰版 | 标准版 | 轻量版 |
| --- | --- | --- | ---|
| 推荐型号 | A800I A3 双机及以上(N) | A800I A3 单机 | A800I A2 单机 |
| 典型场景 | 规划和推理能力强，编程能力突出，满足各类复杂推理任务稳定运行，长任务支持优秀。如：需求分析与设计、功能开发、代码重构、测试工程等 | 规划和推理能力强，编程能力突出，复杂推理和编程任务稳定运行，长任务支持较好。如：功能开发、代码审查、缺陷分析与修复等 | 规划和推理能力强，编程能力突出，Office办公场景卓越，可满足个人办公任务处理。如：缺陷分析、代码生成、代码审查等 |
| 推荐模型 | 万亿级参数模型（~1T）DeepSeek-V4-Pro（W4A8）Kimi K2.5-1T（W4A8）MiniMax2.5-230B（W8A8） | 千亿级参数模型（~744B）DeepSeek-V4-Flash（W8A8）GLM5.1-744B（W8A8）MiniMax2.5-230B（W8A8） | 千亿级参数模型（~230B）DeepSeek-V4-Flash（W8A8）MiniMax2.5-230B（W8A8） |
| 模型管理服务 | 每个节点需部署GPUStack Worker服务 |  |  |
| 资源管理调度服务 | 每个节点需部署openFuyao Worker服务 |  |  |

表3组件资源配置表

| 组件 | 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.hikunpeng.com/zh/developer/techArticles/20260701-8)

模型服务部署：https://www.hiascend.com/zh/developer/techArticles/20260630-1 [了解详情](https://www.hiascend.com/zh/developer/techArticles/20260630-1)

公用服务部署（记忆服务，SkillHub服务，E2B沙箱服务，网关服务）+OS安全检查：https://www.hiascend.com/zh/developer/techArticles/20260630-5 [了解详情](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 [了解详情](https://gitcode.com/Ascend/ascend-deployer/tree/appliance_deployer/kadt/opencode/build-images/full)）。如果环境中没有docker运行时，可替换成nerdctl等其它运行时命令。

下载代码仓：

```bash
# 下载指定分支代码仓
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拉取基础镜像存在问题，可以下载镜像压缩包，然后导入镜像：

```bash
# 拉取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）：

```bash
docker build -t deploy.bocloud.k8s:40443/opencode-e2b-full:<tag> .
```

支持通过 --build-arg 传入参数，例如使用换源和SSL加速构建，注意需要用户自行保证安全性：

```bash
docker build --build-arg mirrors_nossl=True-t deploy.bocloud.k8s:40443/opencode-e2b-full:<tag> .
```

如需在构建时配置网络代理，参考如下命令进行构建：

```bash
# 有代理构建
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并上传至镜像仓

```bash
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 [了解详情](https://gitcode.com/Ascend/ascend-deployer/tree/appliance_deployer/kadt/opencode/charts/opencode-e2b-helm)），下载后，需要手动制作为.tar.gz的压缩包。

上传前，建议先同步一次本地仓，防止在向本地仓上传时报错。操作方式为，进入openFuyao管理界面，从“应用市场”中进入“仓库配置”界面，找到local仓库，执行“同步仓库”，同步成功后会有成功提示，可参考图示操作。

图1openFuyao同步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的参考命令如下：

```bash
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特性，需要自行开发配套插件（可参考当前OpenCode已有插件）。

本章节介绍配置使能E2B特性，在使用HelmChart的values.yaml中，配置以下E2B相关的参数，即可在拉起的OpenCode实例中使能沙箱特性：

表1E2B沙箱相关参数

| 参数 | 默认值 | 含义 | 部署时是否必须修改 |
| --- | --- | --- | ---|
| 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服务后，可以local-exec提示词，指定运行在E2B环境中。例如“使用local-exec执行uname -a”，可以观察到返回的E2B信息，与在本地执行的返回值不同。

图1在沙箱执行命令

图2在本地执行命令

## 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 [了解详情](https://iflytek.github.io/skillhub/guide/skill-publish.html)）：

1、登陆（若没有在values.yaml配置登陆token，可手动创建token后，在OpenCode实例中完成登陆）：

```bash
# 登录，输入创建好的api token和SkillHub地址
skillhub login --token sk_xxxx --registry http://xxxx
```

登陆后，可以whoami查看当前登陆的账号信息

```bash
# 查看当前登陆的账号信息
skillhub whoami

# 预期有如下格式回显
Registry: xxxx
Handle: xxxx
Name: xxxx
```

2、其它常用操作参考如下：

```bash
# 上传技能，不指定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 [了解详情](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 时创建，空值跳过） | 否 |

使能该特性后，对应的自动化操作为：

1. 自动创建 PVC（命名为opencode-pvc{instanceSuffix}），使用指定 StorageClass。
2. PVC 挂载到 Pod 的 /root（mountPath 可配置），首次挂载时 init 容器将镜像 /root 内容同步到 PVC。
3. 后续 Pod 重启时检测到 PVC 已有数据，跳过同步以保留现有内容，防止镜像原有内容覆盖存储内容。

本页内容
