コンテンツにスキップ

エージェントコンテナインストールマニュアル

このドキュメントでは、Docker および Kubernetes を使用して obs-agent をインストールする方法を説明します。Kubernetes にインストールする場合は Helm を推奨します。

コンテナは起動時に BEAK_WS_URLAGENT_IDAGENT_API_KEY を使用して Beak からランタイム設定を読み込み、エージェントを起動します。

永続ストレージはランタイムの前提条件です。 /app はアクティブなセッション/タスクの JSONL 履歴および関連データを保存し、他の 2 つのディレクトリはプロファイルおよび Owl のデータを保存します。Docker、Kubernetes YAML、Helm のいずれのデプロイでも、/app/var/lib/obs-agent/profile-cache/app/.owl に永続ストレージを提供する必要があります。Owl ボリュームは /app/.owl に個別にマウントしてください。そうしないと、コンテナまたは Pod の再構築やアップグレード後に、アクティブなセッション/タスクを継続できなくなる可能性があります。

コンテナノードが Beak、LLM、その他の公開サービスに直接アクセスできない場合は、まず obs-agent のフォワードプロキシを設定する を参照してください。

接続情報の準備

Beak コンソールまたはインストールページから、以下の 3 つの値をコピーします。

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.5.0'

Docker でインストールする

Docker デプロイでは、以下に示す 3 つの名前付きボリュームを作成して再マウントする必要があります。アップグレードや再起動の際は同じボリューム名を再利用し、コンテナの一時ディレクトリで置き換えないでください。コンテナとは独立して管理されるバインドマウントもサポートされています。

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.5.0"
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 コマンドは、セッション/タスク履歴および関連データを完全に削除します。復元または継続が必要なタスクがないことを確認してから実行してください。

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

Kubernetes YAML でインストールする

Helm を使用しない場合は、OSS に公開されているベースマニフェストを直接使用できます。

ベースマニフェストは 3 つの PVC(20 GiB、5 GiB、5 GiB)を作成してマウントします。インストール前に、クラスターには動的プロビジョニング用のデフォルト StorageClass、または PVC がバインドできる事前作成済みの PV が必要です。PVC がバインドされていない間、Pod は Pending のままになります。Pod の再構築やアップグレードによってアクティブなセッション/タスクの JSONL 履歴および関連データが失われるため、emptyDir で置き換えないでください。

マニフェストをダウンロードします。

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

特定バージョンのマニフェストをダウンロードします。

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

名前空間を作成します。

kubectl create namespace obs-agent

マニフェスト内のプレースホルダーを現在のエージェント情報に置き換えます。

sed -i.bak \
  -e "s#replace-with-beak-ws-url#${BEAK_WS_URL}#g" \
  -e "s#replace-with-agent-uuid#${AGENT_ID}#g" \
  -e "s#replace-with-agent-api-key#${AGENT_API_KEY}#g" \
  obs-agent.yml

obs-agent.yml にはすでに Kubernetes の Secret が含まれています。このセクションを直接編集することもできます。

apiVersion: v1
kind: Secret
metadata:
  name: obs-agent-secret
type: Opaque
stringData:
  AGENT_API_KEY: "replace-with-agent-api-key"
  AGENT_ID: "replace-with-agent-uuid"

インストールします。

kubectl -n obs-agent apply -f obs-agent.yml

ステータスを確認します。

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 を維持したうえで、次を実行します。

kubectl -n obs-agent apply -f obs-agent.yml

アップグレード中は既存の PVC を保持して再利用してください。PVC または名前空間を削除すると、StorageClass の再利用ポリシーによっては、基盤となる PV データも削除される場合があります。

YAML インストールを削除します。

以下のコマンドは、マニフェストによって作成された PVC を削除します。基盤となる PV データが保持されるかどうかは、StorageClass の再利用ポリシーによって異なります。復元または継続が必要なタスクがないことを確認してから実行してください。

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

Kubernetes Helm でインストールする

Helm チャートはデフォルトで 3 つの PVC(20 GiB、5 GiB、5 GiB)を作成してマウントします。インストール前に、デフォルトの StorageClass を設定するか、persistence.work.existingClaimpersistence.profileCache.existingClaimpersistence.owl.existingClaim を通じてバインド済みの 3 つの PVC を指定してください。Pod の再構築やアップグレードによってアクティブなセッション/タスクの 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

名前空間を作成します。

kubectl create namespace obs-agent

エージェントシークレットを作成します。

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 upgrade --install obs-agent obs-agent/obs-agent \
  --namespace obs-agent \
  --set image.repository=pubrepo.guance.com/guance/obs-agent \
  --set image.tag=v0.5.0 \
  --set-string config.BEAK_WS_URL="${BEAK_WS_URL}" \
  --set secret.existingSecret=obs-agent-secret

ステータスを確認します。

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.5.0

Helm インストールを削除します。

helm uninstall はチャートによって作成された PVC を削除し、kubectl delete namespace はその名前空間内の PVC も削除します。基盤となる PV データが保持されるかどうかは、StorageClass の再利用ポリシーによって異なります。これらのコマンドは、復元または継続が必要なタスクがないことを確認してから実行してください。

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

利用可能な環境変数を確認する

インストール手順で必要なのは BEAK_WS_URLAGENT_IDAGENT_API_KEY のみです。以下の変数は、トラブルシューティングやデフォルト値の上書きに使用します。特定の必要がない限り設定しないでください。

環境変数 手動設定が必要か 説明
BEAK_WS_URL はい Beak 設定 API のアドレス。例: https://agent-api.guance.com
AGENT_ID はい エージェントインスタンス ID。実行中の各インスタンスで一意である必要があります。
AGENT_API_KEY はい エージェントが Beak 設定 API および WebSocket にアクセスするために使用する認証情報。
BEAK_ENDPOINT いいえ コンテナのエントリポイントが Beak 設定 API を読み込む際に使用するフォールバックアドレス。未設定の場合は BEAK_WS_URL が使用されます。
HTTP_PROXY / http_proxy いいえ HTTP および WS リクエスト用の HTTP フォワードプロキシ。両方を設定する場合、大文字と小文字の変数は一致している必要があります。
HTTPS_PROXY / https_proxy いいえ HTTPS および WSS リクエスト用のプロキシ。プロキシエンドポイントには引き続き http:// を使用します。
NO_PROXY / no_proxy いいえ プロキシをバイパスするホスト、ドメイン、IP、または CIDR。少なくとも localhost,127.0.0.1,::1 を含めてください。
SSL_CERT_FILE / SSL_CERT_DIR いいえ プロキシが TLS 証明書を再署名する場合の、企業 CA ファイルまたはディレクトリ。
AGENT_NAME いいえ エージェントの表示名。手動で設定しない場合は、Beak 設定 API から配信されます。
AGENT_WORKDIR いいえ エージェントの作業ディレクトリ。コンテナのデフォルトは /app
AGENT_PROFILE_CACHE_DIR いいえ プロファイルキャッシュディレクトリ。コンテナのデフォルトは /var/lib/obs-agent/profile-cache
AGENT_PERMISSION_MODE いいえ ツールの権限モード。コンテナのデフォルトは standard
AGENT_LOCAL_TIMEZONE いいえ エージェントのローカルタイムゾーン。コンテナのデフォルトは Asia/Shanghai
AGENT_HTTP_ALLOWED_DOMAINS いいえ HTTP ツールがアクセスできるドメインを制限します(カンマ区切り)。
AGENT_UPDATE_ENABLED いいえ コンテナ化されたデプロイでは自己更新を無効のままにします。イメージまたはマニフェストを置き換えてアップグレードしてください。
AGENT_UPDATE_HELPER_PATH いいえ 自己更新ヘルパーのパス。通常、コンテナ化されたデプロイでは使用されません。
AGENT_UPDATE_BASE_URL いいえ 自己更新のリリースアドレス。通常、コンテナ化されたデプロイでは使用されません。
AGENT_UPDATE_CHECK_INTERVAL_SECONDS いいえ 自己更新のチェック間隔。デフォルトは 300
AGENT_UPDATE_STATE_PATH いいえ 自己更新の状態ファイルパス。
AGENT_UPDATE_HISTORY_PATH いいえ 自己更新の履歴ファイルパス。
AGENT_INSTALL_MODE いいえ インストールモードのマーカー。通常はインストーラーによって書き込まれます。
AGENT_SELF_HOST_STATE_PATH いいえ ホストインストールの状態ファイルパス。通常、コンテナ化されたデプロイでは使用されません。
AGENT_SELF_HOST_HISTORY_PATH いいえ ホストインストールの履歴ファイルパス。通常、コンテナ化されたデプロイでは使用されません。
AGENT_SKILL_DEP_INSTALLER いいえ スキル依存関係インストーラーのパス。通常はインストーラーまたはイメージによって提供されます。
AGENT_SKILL_DEP_STATE_PATH いいえ スキル依存関係の状態ファイルパス。
AGENT_SKILL_DEP_HISTORY_PATH いいえ スキル依存関係の履歴ファイルパス。
LLM_BASE_URL いいえ Beak 設定 API から配信されます。
LLM_API_KEY いいえ Beak 設定 API から配信されます。デフォルトは AGENT_API_KEY
LLM_MODEL いいえ 手動設定は不要です。未設定の場合、エージェントはデフォルトのモデルを使用します。
LLM_TEMPERATURE いいえ LLM の temperature。デフォルトは 0.2
LLM_MAX_TOKENS いいえ LLM 出力トークンの最大数。デフォルトの 0 はモデルのデフォルトを使用することを意味します。
AI_HUB_BASE_URL いいえ AI Hub のアドレス。未設定の場合は LLM_BASE_URL が使用されます。
LOG_LEVEL いいえ ログレベル。コンテナのデフォルトは info
LOG_FORMAT いいえ ログ形式。コンテナのデフォルトは text
LOG_PATH いいえ ログの出力先。コンテナのデフォルトは stdout
LOG_RELATIVE_PATH いいえ ログパスを作業ディレクトリからの相対パスとして解決するかどうか。デフォルトは true
LOG_MAX_SIZE_MB いいえ 1 つのログファイルの最大サイズ。デフォルトは 32
LOG_MAX_BACKUPS いいえ ログバックアップファイルの数。デフォルトは 5
OTEL_EXPORTER_OTLP_PROTOCOL いいえ OTEL エクスポートプロトコル。コンテナのデフォルトは http/protobuf
OTEL_EXPORTER_OTLP_ENDPOINT いいえ OTEL コレクターのエンドポイント。Beak 設定 API から配信されるか、トレースエクスポートが必要な場合に手動で上書きされます。
OTEL_EXPORTER_OTLP_HEADERS いいえ OTEL リクエストヘッダー。Beak 設定 API から配信されるか、トレースエクスポートが必要な場合に手動で上書きされます。
OTEL_LOGS_ENABLED いいえ OTEL ログをエクスポートするかどうか。デフォルトでは OTEL_EXPORTER_OTLP_ENDPOINT が設定されているかどうかに従います。
AGENT_MAX_TOOL_CALL_ITERATIONS いいえ 1 タスク内の LLM 呼び出しに対する緊急ハードリミット。デフォルトは 512。通常の継続は動的リースによって制御されます。
AGENT_TOOL_LOOP_INITIAL_LEASE_LLM_CALLS いいえ 初期の LLM 呼び出しリース。デフォルトは 120 は動的リースを無効にします。
AGENT_TOOL_LOOP_LEASE_EXTENSION_LLM_CALLS いいえ 新しい構造化された証拠が検出された後に追加される呼び出し数。デフォルトは 8
AGENT_TOOL_LOOP_NO_PROGRESS_ROUNDS いいえ 進捗のない連続したツールラウンド数。デフォルトは 8。エージェントは一度再計画し、その後も進捗がない場合は一時停止します。
AGENT_MAX_RUN_TOKENS いいえ タスクごとの累積トークン予算のハードリミット。デフォルトは 40000000 は無効にします。
AGENT_MAX_RUN_DURATION いいえ タスクごとの実時間予算のハードリミット。デフォルトは 2h0s は無効にします。
AGENT_MAX_LLM_MESSAGES いいえ LLM コンテキストメッセージの最大数。デフォルトは 256
AGENT_MAX_LLM_MESSAGE_CHARS いいえ LLM メッセージあたりの最大文字数。デフォルトは 512000
AGENT_MAX_SYSTEM_PROMPT_CHARS いいえ システムプロンプトの最大文字数。デフォルトは 512000
AGENT_RECENT_CHAT_HISTORY_MESSAGES いいえ 直近のチャット履歴メッセージの数。デフォルトは 20
AGENT_QUERY_SESSION_CHAT_HISTORY_LIMIT いいえ セッション履歴のクエリ制限。デフォルトは 20
AGENT_CONTEXT_BUDGET_TOKENS いいえ コンテキストトークン予算。デフォルトは 262144
AGENT_CONTEXT_BUDGET_CHARS いいえ コンテキスト文字予算。デフォルトは 262144
AGENT_CONTEXT_COMPACT_THRESHOLD いいえ コンテキスト圧縮のしきい値。デフォルトは 0.6
AGENT_TOOL_LOOP_RECENT_INTERACTIONS いいえ ツールループ検出ウィンドウ。デフォルトは 4
AGENT_TOOL_SAME_ERROR_LIMIT いいえ 同一ツールエラーの繰り返し回数の制限。デフォルトは 20
AGENT_TOOL_TOTAL_FAILED_LIMIT いいえ ツール失敗の合計回数の制限。デフォルトは 50
AGENT_TOOL_SAME_ACTION_LIMIT いいえ 同一ツールアクションの繰り返し回数の制限。デフォルトは 3
AGENT_TOOL_MALFORMED_ARGUMENTS_LIMIT いいえ 不正な形式のツール引数の制限。デフォルトは 2
AGENT_REASONING_DISPLAY_MODE いいえ 推論の表示モード。hidden または raw をサポートします。デフォルトは hidden
AGENT_PROFILE_SYNC_DISABLE いいえ プロファイル同期を無効にするかどうか。デフォルトは false
AGENT_PROFILE_SYNC_INTERVAL いいえ プロファイル同期間隔。デフォルトは 5m
AGENT_DEFAULT_APPROVAL_TTL_SECONDS いいえ デフォルトの承認 TTL。デフォルトは 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 キー ID。
AGENT_MESSAGE_HPKE_PRIVATE_KEY いいえ HPKE 秘密鍵の内容。
AGENT_MESSAGE_HPKE_KEY_PATH いいえ HPKE 秘密鍵ファイルのパス。
AGENT_MESSAGE_HPKE_ROTATION_INTERVAL いいえ HPKE キーのローテーション間隔。デフォルトの 0 は自動ローテーションなしを意味します。
OWL_BASE_URL いいえ Owl 依存関係のダウンロードアドレス。通常はイメージに組み込まれるか、Beak 設定 API から配信されます。
OWL_INSTALL_URL いいえ Owl インストールスクリプトのアドレス。通常は Beak 設定 API から配信されます。
OWL_REGISTRY_ENDPOINT いいえ Owl レジストリのアドレス。通常は Beak 設定 API から配信されます。
OWL_TOKEN いいえ Owl レジストリのアクセストークン。通常は Beak 設定 API から配信されます。
OWL_DIR いいえ Owl の作業ディレクトリ。コンテナのデフォルトは ${AGENT_WORKDIR}/.owl、または /app/.owl。obs-agent はこれを read_file および list_dir 用の共有読み取り専用ルートとして公開します。古いデプロイの明示的なパスも引き続きサポートされます。
AGENT_IMAGE_PRINT_VERSIONS いいえ コンテナ起動時に obs-agent および owl のバージョンを出力するかどうか。デフォルトは false

注意事項

  • Docker と Helm は、同じ AGENT_ID を同時にオンラインで使用することはできません。実行中の各インスタンスには独立したエージェントが必要です。
  • イメージのみを置き換えてアップグレードした古いデプロイでは、Owl ボリュームが /var/lib/obs-agent/work/.owl にマウントされたままの場合、OWL_DIR が未設定であればエントリポイントがそれを検出して引き続き使用します。新しい Compose、Kubernetes、Helm のテンプレートは /app/.owl を使用します。移行中は両方の Owl ボリュームをマウントしないでください。
  • obs-agent.yml は専用の ServiceAccount を作成し、Kubernetes のサービスアカウントトークンの自動マウントを無効にします。
  • コンテナはホストインストールスクリプトを実行せず、systemd に依存しません。
  • コンテナ化されたデプロイでは、ローカルの自己更新は有効になりません。イメージのタグまたはダイジェストを置き換えてアップグレードしてください。
  • 本番環境では、イメージダイジェストを使用してバージョンを固定してください。

フィードバック

このページは役に立ちましたか?