跳转至

Agent 容器安装手册

本文说明如何在 Docker 和 Kubernetes 中安装 obs-agent。如果您要安装到 Kubernetes,优先使用 Helm。

容器启动时会使用 BEAK_WS_URLAGENT_IDAGENT_API_KEY 从 Beak 获取运行配置,然后启动 agent。

持久化存储是运行前置条件。 /app 中保存运行中 session/task 的 JSONL 历史及相关数据,另外两个目录保存 profile 和 Owl 数据。Docker、Kubernetes YAML 和 Helm 部署都必须为 /app/var/lib/obs-agent/profile-cache/app/.owl 提供持久化存储。Owl 卷独立嵌套挂载到 /app/.owl。否则容器、Pod 重建或升级后,运行中的 session/task 可能因历史数据丢失而无法继续。

如果容器所在节点不能直连 Beak、LLM 或其他公网服务,请先阅读为 obs-agent 配置正向代理

准备连接信息

从 Beak 控制台或安装页面复制这三个值。Docker 和 Kubernetes YAML 安装会使用全部三个值;从品牌 Helm 仓库安装时,Chart 已包含默认 Beak 地址,只会使用 AGENT_IDAGENT_API_KEY,除非您需要覆盖 Beak 地址:

export BEAK_WS_URL='https://agent-api.guance.com'
export AGENT_ID='replace-with-agent-uuid'
export AGENT_API_KEY='replace-with-agent-api-key'

准备镜像地址:

export OBS_AGENT_IMAGE='pubrepo.guance.com/guance/obs-agent:v0.8.1'

用 Docker 安装

Docker 部署必须创建并重复挂载下面命令中的三个命名卷。升级或重启时应沿用相同的卷名;不要把这些挂载替换为容器临时目录。也可以使用由运维系统管理的 bind mount,但其生命周期必须独立于容器。

创建 env 文件:

cat > obs-agent.env <<EOF
BEAK_WS_URL=${BEAK_WS_URL}
AGENT_ID=${AGENT_ID}
AGENT_API_KEY=${AGENT_API_KEY}
EOF

启动容器:

docker run -d \
  --name obs-agent \
  --restart unless-stopped \
  --env-file ./obs-agent.env \
  -v obs-agent-work:/app \
  -v obs-agent-profile-cache:/var/lib/obs-agent/profile-cache \
  -v obs-agent-owl:/app/.owl \
  "${OBS_AGENT_IMAGE}"

检查状态:

docker ps --filter name=obs-agent
docker logs -f obs-agent

日志中看到以下内容表示启动成功:

obs-agent profile request loaded
obs-agent websocket connected

升级镜像:

OBS_AGENT_IMAGE="${OBS_AGENT_IMAGE%:*}:v0.8.1"
docker pull "${OBS_AGENT_IMAGE}"
docker rm -f obs-agent
docker run -d \
  --name obs-agent \
  --restart unless-stopped \
  --env-file ./obs-agent.env \
  -v obs-agent-work:/app \
  -v obs-agent-profile-cache:/var/lib/obs-agent/profile-cache \
  -v obs-agent-owl:/app/.owl \
  "${OBS_AGENT_IMAGE}"

清理 Docker 安装:

下面的 docker volume rm 会永久删除 session/task 历史及相关数据。仅在确认不再需要恢复或继续任何任务时执行。

docker rm -f obs-agent
docker volume rm obs-agent-work obs-agent-profile-cache obs-agent-owl

用 Kubernetes YAML 安装

如果您不使用 Helm,可以直接使用发布到 OSS 的基础 manifest。

基础 manifest 会创建并挂载三个 PVC(20 GiB、5 GiB、5 GiB)。安装前,集群必须配置默认 StorageClass 以动态供应 PV,或预先准备可供这三个 PVC 绑定的 PV。PVC 未绑定时,Pod 会保持 Pending;不要改用 emptyDir 绕过该要求,否则 Pod 重建或升级会丢失运行中 session/task 的 JSONL 历史及相关数据。

下载 manifest:

curl -fsSL https://static.guance.com/obs-agent/obs-agent.yml -o obs-agent.yml

下载指定版本的 manifest:

curl -fsSL https://static.guance.com/obs-agent/obs-agent-v0.8.1.yml -o obs-agent.yml

创建 namespace:

kubectl create namespace obs-agent

manifest 使用环境变量保存 Beak 地址和 agent 凭据。确认本机已安装 envsubst,安装时只展开这三个变量,避免 URL 或凭据中的 /& 等字符被替换命令解释:

envsubst '${BEAK_WS_URL} ${AGENT_ID} ${AGENT_API_KEY}' \
  < obs-agent.yml \
  | kubectl -n obs-agent apply -f -

obs-agent.yml 已经包含一个 Kubernetes Secret。上述 envsubst 命令会把当前环境中的凭据写入下面两个字段:

apiVersion: v1
kind: Secret
metadata:
  name: obs-agent-secret
type: Opaque
stringData:
  AGENT_API_KEY: "${AGENT_API_KEY}"
  AGENT_ID: "${AGENT_ID}"

检查状态:

kubectl -n obs-agent get pods
kubectl -n obs-agent get deploy
kubectl -n obs-agent logs -f deploy/obs-agent

升级时重新下载新版 obs-agent.yml,保留当前 BEAK_WS_URLAGENT_IDAGENT_API_KEY,再执行:

envsubst '${BEAK_WS_URL} ${AGENT_ID} ${AGENT_API_KEY}' \
  < obs-agent.yml \
  | kubectl -n obs-agent apply -f -

升级时必须保留并复用原有 PVC。删除 PVC 或 namespace 可能连同底层 PV 数据一起删除,具体取决于 StorageClass 的回收策略。

清理 YAML 安装:

下面的命令会删除 manifest 创建的 PVC,底层 PV 数据是否保留取决于 StorageClass 的回收策略。仅在确认不再需要恢复或继续任何任务时执行。

kubectl -n obs-agent delete -f obs-agent.yml
kubectl delete namespace obs-agent

用 Kubernetes Helm 安装

Helm chart 默认创建并挂载三个 PVC(20 GiB、5 GiB、5 GiB)。安装前,集群必须配置默认 StorageClass 以动态供应 PV,或分别在 persistence.work.existingClaimpersistence.profileCache.existingClaimpersistence.owl.existingClaim 中指定三个已绑定的 PVC。不要禁用这些持久化项,否则 Pod 重建或升级会丢失运行中 session/task 的 JSONL 历史及相关数据。

设置 Helm 仓库地址,然后添加仓库:

Helm 仓库地址与容器镜像仓库地址不同。不要把后续 image.repository 使用的镜像路径作为 helm repo add 的仓库地址。

export OBS_AGENT_HELM_REPO_URL='https://pubrepo.guance.com/chartrepo/obs-agent'
helm repo add obs-agent "${OBS_AGENT_HELM_REPO_URL}"
helm repo update obs-agent
helm search repo obs-agent

创建 namespace:

kubectl create namespace obs-agent

创建 agent secret:

kubectl -n obs-agent create secret generic obs-agent-secret \
  --from-literal=AGENT_ID="${AGENT_ID}" \
  --from-literal=AGENT_API_KEY="${AGENT_API_KEY}"

品牌 Helm Chart 已包含当前品牌的默认 Beak 地址,正常安装时不需要手动设置 config.BEAK_WS_URL

安装:

helm upgrade --install obs-agent obs-agent/obs-agent \
  --namespace obs-agent \
  --set image.repository=pubrepo.guance.com/guance/obs-agent \
  --set image.tag=v0.8.1 \
  --set secret.existingSecret=obs-agent-secret

只有使用自定义 Beak 地址、安装未包含品牌默认地址的旧版 Chart,或直接从仓库源码 docs/examples/helm/obs-agent 安装时,才需要在安装命令中追加 --set-string config.BEAK_WS_URL="${BEAK_WS_URL}"

检查状态:

kubectl -n obs-agent get pods
kubectl -n obs-agent get deploy -l app.kubernetes.io/instance=obs-agent
kubectl -n obs-agent logs -f deploy/obs-agent

如果 Deployment 名不是 obs-agent,用上面的 kubectl get deploy 输出中的实际名称查看日志。

升级:

helm upgrade obs-agent obs-agent/obs-agent \
  --namespace obs-agent \
  --reuse-values \
  --set image.tag=v0.8.1

如果旧 release 的 values 中已经保存了错误或未解析的 Beak 地址,--reuse-values 会继续复用该值。首次升级到修复后的 Chart 时,请额外传入 --set-string config.BEAK_WS_URL="${BEAK_WS_URL}" 修正它;后续升级可以继续复用。

清理 Helm 安装:

helm uninstall 会删除 chart 创建的 PVC,kubectl delete namespace 也会删除该 namespace 中的 PVC。底层 PV 数据是否保留取决于 StorageClass 的回收策略;仅在确认不再需要恢复或继续任何任务时执行。

helm uninstall obs-agent -n obs-agent
kubectl delete namespace obs-agent

查看可用环境变量

所有安装方式都需要 AGENT_IDAGENT_API_KEY。Docker 和 Kubernetes YAML 安装还需要 BEAK_WS_URL;品牌 Helm Chart 已提供默认值,仅在自定义地址或兼容旧 Chart 时需要覆盖。下面的其他变量用于排查问题或覆盖默认配置;没有明确需求时不用设置。

环境变量 是否需要手动配置 说明
BEAK_WS_URL Docker/YAML:;品牌 Helm:否 Beak config API 地址,例如 https://agent-api.guance.com。品牌 Helm Chart 已内置默认地址,可通过 config.BEAK_WS_URL 覆盖。
AGENT_ID Agent 实例 ID。每个运行实例必须唯一。
AGENT_API_KEY Agent 访问 Beak config API 和 WebSocket 的凭据。
BEAK_ENDPOINT 容器入口读取 Beak config API 时的备用地址;未设置时使用 BEAK_WS_URL
HTTP_PROXY / http_proxy HTTP 和 WS 请求使用的 HTTP 正向代理。大小写变量同时存在时值必须一致。
HTTPS_PROXY / https_proxy HTTPS 和 WSS 请求使用的代理;代理入口仍使用 http://
NO_PROXY / no_proxy 不经过代理的主机、域名、IP 或网段。建议至少包含 localhost,127.0.0.1,::1
SSL_CERT_FILE / SSL_CERT_DIR 企业代理重新签发 TLS 证书时使用的 CA 文件或目录。
AGENT_NAME Agent 显示名称。未手动配置时由 Beak config API 下发。
AGENT_WORKDIR Agent 工作目录。容器默认 /app
AGENT_PROFILE_CACHE_DIR Profile 缓存目录。容器默认 /var/lib/obs-agent/profile-cache
AGENT_LOCAL_TIMEZONE Agent 本地时区。容器默认 Asia/Shanghai
AGENT_HTTP_ALLOWED_DOMAINS 限制 HTTP 工具可访问的域名,逗号分隔。
AGENT_UPDATE_ENABLED 容器化部署固定关闭自更新。升级通过镜像或 manifest 完成。
AGENT_UPDATE_HELPER_PATH 自更新 helper 路径;容器化部署通常不使用。
AGENT_UPDATE_BASE_URL 自更新 release 地址;容器化部署通常不使用。
AGENT_UPDATE_CHECK_INTERVAL_SECONDS 自更新检查间隔;默认 300
AGENT_UPDATE_STATE_PATH 自更新状态文件路径。
AGENT_UPDATE_HISTORY_PATH 自更新历史文件路径。
AGENT_INSTALL_MODE 安装模式标记,通常由安装脚本写入。
AGENT_SELF_HOST_STATE_PATH 宿主机安装状态文件路径;容器化部署通常不使用。
AGENT_SKILL_DEP_INSTALLER Skill 依赖安装器路径;通常由安装脚本或镜像提供。
AGENT_SKILL_DEP_STATE_PATH Skill 依赖状态文件路径。
AGENT_SKILL_DEP_HISTORY_PATH Skill 依赖历史文件路径。
LLM_BASE_URL 由 Beak config API 下发。
LLM_API_KEY 由 Beak config API 下发,默认使用 AGENT_API_KEY
LLM_MODEL 不需要手动配置。未配置时 agent 使用默认模型。
LLM_TEMPERATURE LLM temperature,默认 0.2
LLM_MAX_TOKENS LLM 最大输出 token,默认 0 表示使用模型默认值。
AI_HUB_BASE_URL AI Hub 地址;未配置时使用 LLM_BASE_URL
LOG_LEVEL 日志级别。容器默认 info
LOG_FORMAT 日志格式。容器默认 text
LOG_PATH 日志输出位置。容器默认 stdout
AGENT_DIAGNOSTIC_LOG_PATH Bug report 使用的受限轮转日志副本。容器默认 /var/lib/obs-agent/profile-cache/diagnostics/agent.log,复用 profile-cache 持久卷;不可写时回退到 4 MiB 内存尾部。
LOG_RELATIVE_PATH 日志路径是否按工作目录解析,默认 true
LOG_MAX_SIZE_MB 单个日志文件最大大小,默认 32
LOG_MAX_BACKUPS 日志备份文件数量,默认 5
OTEL_EXPORTER_OTLP_PROTOCOL OTEL 导出协议。容器默认 http/protobuf
OTEL_EXPORTER_OTLP_ENDPOINT OTEL 采集端地址。需要链路上报时由 Beak config API 下发或手动覆盖。
OTEL_EXPORTER_OTLP_HEADERS OTEL 请求头。需要链路上报时由 Beak config API 下发或手动覆盖。
OTEL_LOGS_ENABLED 历史变量,当前 Agent 忽略。metrics、logs、traces 的启停统一由 Beak runtime-config API 控制。
AGENT_MAX_LLM_CALLS 单次任务实际 LLM provider 调用上限,默认 512,必须大于 0;429、timeout、5xx 与自动重试均计数。
AGENT_MAX_RUN_TOKENS 可选的单次任务累计 token 硬预算,默认 0(不限制);设置正数后启用。
AGENT_MAX_RUN_DURATION 单次任务 wall-clock 硬预算,默认 2h0s 关闭。
AGENT_MAX_LLM_MESSAGES 可选的单次 provider 请求消息保护上限,默认 0(关闭)。
AGENT_MAX_LLM_MESSAGE_CHARS 单条 LLM 消息最大字符数,默认 512000
AGENT_MAX_SYSTEM_PROMPT_CHARS System prompt 最大字符数,默认 512000
AGENT_QUERY_SESSION_CHAT_HISTORY_LIMIT 查询会话历史条数,默认 20
AGENT_CONTEXT_BUDGET_TOKENS 上下文 token 预算,默认 262144
AGENT_CONTEXT_BUDGET_CHARS 上下文字符预算,默认 262144
AGENT_REASONING_DISPLAY_MODE 推理内容显示模式,支持 hiddenraw,默认 hidden
AGENT_PROFILE_SYNC_DISABLE 是否关闭 profile 同步,默认 false
AGENT_PROFILE_SYNC_INTERVAL Profile 完整同步的周期兜底间隔,默认 5m;人类保存该 agent 的 profile、Skill 或 MCP 绑定时会另行定向触发即时同步,完整语义见 Profile 物料实时刷新
AGENT_DEFAULT_APPROVAL_TTL_SECONDS 默认审批有效期,默认 300 秒。
AGENT_WEB_SEARCH_ENABLED 是否启用 Web Search 工具,默认 true
AGENT_WEB_SEARCH_BASE_URL Web Search 服务地址;启用 Web Search 时需要。
AGENT_WEB_SEARCH_DEFAULT_LIMIT Web Search 默认结果数,默认 5
AGENT_WEB_SEARCH_MAX_LIMIT Web Search 最大结果数,默认 10
AGENT_WEB_SEARCH_MAX_CONTENT_CHARS 单条搜索内容最大字符数,默认 3000
AGENT_WEB_SEARCH_MAX_CONTEXT_CHARS 搜索上下文最大字符数,默认 12000
AGENT_WEB_SEARCH_DEFAULT_MODE Web Search 默认模式,默认 auto
AGENT_WEB_SEARCH_TIMEOUT Web Search 超时时间,默认 30s
AGENT_MESSAGE_ENCRYPTION_ENABLED 是否启用消息加密,默认 true
AGENT_MESSAGE_HPKE_KEY_ID HPKE key ID。
AGENT_MESSAGE_HPKE_PRIVATE_KEY HPKE 私钥内容。
AGENT_MESSAGE_HPKE_KEY_PATH HPKE 私钥文件路径。
AGENT_MESSAGE_HPKE_ROTATION_INTERVAL HPKE key 轮换间隔,默认 0 表示不自动轮换。
OWL_BASE_URL Owl 依赖下载地址。通常由镜像内置或 Beak config API 下发。
OWL_INSTALL_URL Owl 安装脚本地址。通常由 Beak config API 下发。
OWL_REGISTRY_ENDPOINT Owl registry 地址。通常由 Beak config API 下发。
OWL_TOKEN Owl registry 访问 token。通常由 Beak config API 下发。
OWL_DIR Owl 工作目录。容器默认 ${AGENT_WORKDIR}/.owl,即 /app/.owl;obs-agent 将其作为 read_filelist_dir 的共享只读根。旧部署显式配置的其他路径仍受支持。
AGENT_IMAGE_PRINT_VERSIONS 容器启动时是否打印 obs-agentowl 版本,默认 false

注意事项

  • Docker 和 Helm 不能复用同一个 AGENT_ID 同时在线。每个运行实例需要独立 agent。
  • 仅替换镜像升级的旧部署如果仍把 Owl 卷挂载到 /var/lib/obs-agent/work/.owl,entrypoint 会在未显式设置 OWL_DIR 时检测并继续使用该目录;更新到新 Compose、Kubernetes 或 Helm 模板后则使用 /app/.owl。迁移期间不要同时挂载两个 Owl 卷。
  • obs-agent.yml 会创建独立 ServiceAccount,并关闭 Kubernetes service account token 自动挂载。
  • 容器内不会运行宿主机安装脚本,也不依赖 systemd。
  • 容器化部署不启用本地自更新;升级通过替换镜像 tag 或 digest 完成。
  • 生产环境建议使用镜像 digest 固定版本。

文档评价

文档内容是否对您有帮助?