コンテンツにスキップ

CLI Reference

chat-cli は Chat アプリの Typer エントリポイントです。同じユースケースを chat-web も呼び出すので、両者は concierge.settings.ChatSettings を共有します。

uv run chat-cli --help

トップレベル構造:

chat-cli
├── conversation     # create / list / get / delete
├── message          # post / list / reply
├── realtime         # status
└── db               # init / ping / drop  (postgres / azure-postgres 専用)

observability のグローバルオプション

chat-cli でも共通トグルを利用できます。

  • --tracing: Foundry/Azure Monitor tracing を有効化(tracer 名: concierge-chat
  • --mlflow: mlflow.langchain.autolog() を有効化
  • --verbose: ローカルログを DEBUG に設定

memory バックエンドはプロセスごとに独立

uv run chat-cli ... は毎回新しい Python プロセスを起動するため、memory バックエンドのストアは毎回空からやり直しです。createpost のような複数ステップを CLI で行うときは postgres バックエンドに切り替えてください(chat-cli db init を一度実行)。

コマンドリファレンス

conversation create

新しい会話を作成し JSON を出力します。

uv run chat-cli conversation create --title "general" --display-name "alice"
# → {"id": "...", "title": "general", "participants": [...], ...}
オプション 必須 デフォルト 説明
--title はい 会話タイトル(1〜200 文字)
--display-name いいえ user-<short-uuid> 他参加者に見える表示名
--user-id いいえ コール毎に新しい UUID。または $CHAT_USER_ID 送信者の UUID

conversation list

会話一覧を表示。--mine を付けるとユーザが参加している会話に絞ります。

uv run chat-cli conversation list
uv run chat-cli conversation list --mine
uv run chat-cli conversation list --mine --user-id "$CHAT_USER_ID"

conversation get

uv run chat-cli conversation get <conversation_id>

conversation delete

会話と関連メッセージを削除。成功時は deleted を出力します。

uv run chat-cli conversation delete <conversation_id>

message post

会話に参加(冪等)したうえでユーザメッセージを投稿。作成されたメッセージを JSON で出力します。

uv run chat-cli message post <conversation_id> \
  --content "こんにちは" --display-name "alice"

message list

uv run chat-cli message list <conversation_id> --limit 100
uv run chat-cli message list <conversation_id> --before "2026-05-16T02:00:00+00:00"

message reply

AI エージェント応答をストリーミング表示し、最後に永続化された AGENT メッセージを JSON で出力します。AZURE_AI_PROJECT_ENDPOINT 設定済みが必須。レスポンダ未設定または会話 ID が存在しないときは終了コード 1。設定手順は AI チャットボット応答(任意) を参照。

uv run chat-cli message reply <conversation_id>
# 部分トークンが逐次出力され、最後に改行して:
# {"id": "...", "role": "AGENT", "content": "...", ...}
# 未設定 → "Chatbot is not configured" (exit 1)

db(SQL バックエンド専用)

CHAT_REPOSITORY_BACKEND=memory の場合は分かりやすいメッセージで失敗します。

uv run chat-cli db ping        # → Connection OK.
uv run chat-cli db init        # → Database schema initialised successfully.
uv run chat-cli db drop --yes  # 破壊的

realtime status

リアルタイム音声設定の正常性をチェックする非対話コマンドです。 AZURE_AI_PROJECT_ENDPOINT_REALTIMECHAT_REALTIME_MODELCHAT_REALTIME_VOICE を 読み取り、リアルタイム機能が有効かどうかを表示します。実際の WebSocket 接続は 行わないため、CI からも安全に実行できます。

uv run chat-cli realtime status

設定済みの場合の出力例:

AZURE_AI_PROJECT_ENDPOINT_REALTIME : https://myresource.openai.azure.com/
CHAT_REALTIME_MODEL               : gpt-realtime-1.5
CHAT_REALTIME_VOICE               : alloy
導出 WSS ホスト                   : wss://myre****azure.com/openai/v1/realtime
ステータス: ✅ 設定済み

未設定の場合の出力例:

AZURE_AI_PROJECT_ENDPOINT_REALTIME : (未設定)
CHAT_REALTIME_MODEL               : gpt-realtime-1.5
CHAT_REALTIME_VOICE               : alloy
ステータス: ❌ 未設定 — リアルタイム機能は無効です

未設定のときは終了コード 1、設定済みのときは 0 です。 詳細は リアルタイム音声(任意) を参照してください。

ウォークスルー(postgres バックエンド)

CLI 体験としてはこれが一番スムーズです。すべての呼び出しが同じ SQL ストアを共有します。

# 0. 初回セットアップ
docker compose up -d postgres
echo "CHAT_REPOSITORY_BACKEND=postgres" >> .env
uv run chat-cli db ping
uv run chat-cli db init

# 1. 全コマンドで同じ送信者として動くようユーザ ID を固定
export CHAT_USER_ID=$(python -c 'import uuid; print(uuid.uuid4())')

# 2. 会話を作成して ID を取得
CONV_ID=$(uv run chat-cli conversation create --title "general" --display-name "alice" \
  | python -c 'import json,sys; print(json.load(sys.stdin)["id"])')
echo "CONV_ID=$CONV_ID"

# 3. 投稿と取得
uv run chat-cli message post "$CONV_ID" --content "こんにちは" --display-name "alice"
uv run chat-cli message list "$CONV_ID"

# 4. (任意)AI 応答を要求(`AZURE_AI_PROJECT_ENDPOINT` 設定済みが必要)
uv run chat-cli message reply "$CONV_ID"
uv run chat-cli message list "$CONV_ID"

# 5. 後片付け
uv run chat-cli conversation delete "$CONV_ID"

合格条件:

  • 手順 2・3 が想定フィールドを含む JSON を返す
  • 手順 3 の message list に直前の投稿が含まれる
  • 手順 5 で deleted が表示され、再度 conversation get "$CONV_ID" を打つと 1 で終了し Conversation not found が出る

環境変数

変数 デフォルト 説明
CHAT_REPOSITORY_BACKEND memory ChatRepositoryBackend 列挙型 永続化バックエンド
CHAT_CONVERSATIONS_TABLE_NAME chat_conversations 文字列 会話テーブル名オーバーライド
CHAT_PARTICIPANTS_TABLE_NAME chat_participants 文字列 参加者テーブル名オーバーライド
CHAT_MESSAGES_TABLE_NAME chat_messages 文字列 メッセージテーブル名オーバーライド
CHAT_USER_ID 未設定 UUID 文字列 CLI 既定の送信者 ID
CHAT_BOT_MODEL azure_ai:gpt-5 文字列 init_chat_model に渡すモデル識別子
CHAT_BOT_SYSTEM_PROMPT 日本語の既定プロンプト 文字列 レスポンダが使うシステムメッセージ
CHAT_BOT_DISPLAY_NAME Concierge AI 文字列 ボット参加者の表示名
CHAT_BOT_PARTICIPANT_ID 00000000-0000-0000-0000-000000000001 UUID ボット参加者の固定 ID
CHAT_BOT_HISTORY_LIMIT 20 int モデルに渡すコンテキストの最大件数
CHAT_BOT_AGENT_TYPE foundry 文字列 レスポンダ選択。foundry(既定、ストリーミング)か登録済みエージェント名(echo / langgraph / github-copilot-sdk / microsoft-agent-framework
AZURE_AI_PROJECT_ENDPOINT 未設定 URL 文字列 Foundry レスポンダ有効化に必須(未設定のとき message reply は終了コード 1)
AZURE_AI_PROJECT_ENDPOINT_REALTIME 未設定 URL 文字列 リアルタイム音声有効化に必須。https://<r>.openai.azure.com/ / https://<r>.services.ai.azure.com/ の両形式を受け付け、自動正規化します。空のとき realtime status は終了コード 1。
CHAT_REALTIME_MODEL gpt-realtime-1.5 文字列 リアルタイムモデルのデプロイ名
CHAT_REALTIME_VOICE alloy 文字列 ボイス識別子:alloy / ash / ballad / coral / echo / sage / shimmer / verse
CHAT_REALTIME_LOCALE ja-JP 文字列 文字起こし言語。ja-JP のような BCP-47 値は Foundry への転送時に ISO-639-1 主サブタグ(ja)に縮約されます
CHAT_REALTIME_SYSTEM_PROMPT 日本語の既定プロンプト 文字列 リアルタイムセッションで使うシステムメッセージ
CHAT_REALTIME_AUDIO_SAMPLE_RATE_HZ 24000 int PCM16 サンプルレート(Foundry 固定値)
CHAT_REALTIME_MAX_SESSION_SECONDS 600 int サーバ側セッションタイムアウト(秒)
CHAT_REALTIME_TRANSCRIPTION_MODEL "" 文字列 入力音声の transcription 用 Azure デプロイ名。空のとき session.updatetranscription ブロックを含めません。