エージェントコンテナインストールマニュアル¶
このドキュメントでは、Docker および Kubernetes を使用して obs-agent をインストールする方法を説明します。Kubernetes にインストールする場合は Helm を推奨します。
コンテナは起動時に BEAK_WS_URL、AGENT_ID、AGENT_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'
イメージアドレスを準備します。
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}"
ステータスを確認します。
以下のログ行は、起動が成功したことを示します。
イメージをアップグレードします。
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 コマンドは、セッション/タスク履歴および関連データを完全に削除します。復元または継続が必要なタスクがないことを確認してから実行してください。
Kubernetes YAML でインストールする¶
Helm を使用しない場合は、OSS に公開されているベースマニフェストを直接使用できます。
ベースマニフェストは 3 つの PVC(20 GiB、5 GiB、5 GiB)を作成してマウントします。インストール前に、クラスターには動的プロビジョニング用のデフォルト StorageClass、または PVC がバインドできる事前作成済みの PV が必要です。PVC がバインドされていない間、Pod は Pending のままになります。Pod の再構築やアップグレードによってアクティブなセッション/タスクの JSONL 履歴および関連データが失われるため、emptyDir で置き換えないでください。
マニフェストをダウンロードします。
特定バージョンのマニフェストをダウンロードします。
名前空間を作成します。
マニフェスト内のプレースホルダーを現在のエージェント情報に置き換えます。
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 get pods
kubectl -n obs-agent get deploy
kubectl -n obs-agent logs -f deploy/obs-agent
アップグレードする際は、新しい obs-agent.yml をダウンロードし、現在の BEAK_WS_URL、AGENT_ID、AGENT_API_KEY を維持したうえで、次を実行します。
アップグレード中は既存の PVC を保持して再利用してください。PVC または名前空間を削除すると、StorageClass の再利用ポリシーによっては、基盤となる PV データも削除される場合があります。
YAML インストールを削除します。
以下のコマンドは、マニフェストによって作成された PVC を削除します。基盤となる PV データが保持されるかどうかは、StorageClass の再利用ポリシーによって異なります。復元または継続が必要なタスクがないことを確認してから実行してください。
Kubernetes Helm でインストールする¶
Helm チャートはデフォルトで 3 つの PVC(20 GiB、5 GiB、5 GiB)を作成してマウントします。インストール前に、デフォルトの StorageClass を設定するか、persistence.work.existingClaim、persistence.profileCache.existingClaim、persistence.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 -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 の再利用ポリシーによって異なります。これらのコマンドは、復元または継続が必要なタスクがないことを確認してから実行してください。
利用可能な環境変数を確認する¶
インストール手順で必要なのは BEAK_WS_URL、AGENT_ID、AGENT_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 呼び出しリース。デフォルトは 12。0 は動的リースを無効にします。 |
AGENT_TOOL_LOOP_LEASE_EXTENSION_LLM_CALLS |
いいえ | 新しい構造化された証拠が検出された後に追加される呼び出し数。デフォルトは 8。 |
AGENT_TOOL_LOOP_NO_PROGRESS_ROUNDS |
いいえ | 進捗のない連続したツールラウンド数。デフォルトは 8。エージェントは一度再計画し、その後も進捗がない場合は一時停止します。 |
AGENT_MAX_RUN_TOKENS |
いいえ | タスクごとの累積トークン予算のハードリミット。デフォルトは 4000000。0 は無効にします。 |
AGENT_MAX_RUN_DURATION |
いいえ | タスクごとの実時間予算のハードリミット。デフォルトは 2h。0s は無効にします。 |
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 に依存しません。
- コンテナ化されたデプロイでは、ローカルの自己更新は有効になりません。イメージのタグまたはダイジェストを置き換えてアップグレードしてください。
- 本番環境では、イメージダイジェストを使用してバージョンを固定してください。