会議中の AI カンペは何故 1.5 秒で出すのか — Bedrock / Anthropic ハイブリッド設計

最終更新: 2026-05-01
Issue-Axis 編集部
技術AIBedrockAnthropicLLM

戦略会議でリアルタイム提示する AI カンペを「発話終了から 1.5 秒前後で出す」 ことを設計目標にした理由と、 Bedrock + Anthropic Direct API のハイブリッド構成、 プロンプトキャッシュ運用、 latency / cost の現実的なトレードオフを実装ベースで解説。

Issue-Axis(戦略会議をリアルタイム支援する AI)の核は、 会議中に発話終了から 1.5 秒前後で「論点抜け」 「想定質問」 「So What 補完」 のカンペを画面右端に出す機能です。

「1.5 秒」 という目標値はなぜそこなのか、 そしてその目標を満たすために採用した Bedrock(AWS)+ Anthropic Direct API のハイブリッド構成について、 実装ベースで共有します。

なぜ 1.5 秒なのか

「リアルタイム」 を謳う AI プロダクトは多いですが、 体感の質は応答時間で全く変わります。 設計時に内部で議論した時間軸はおおむね以下です。

体感発話終了 → 提示までの時間
即座(人間の追従が追いつく)〜 1.0 秒
自然(軽い違和感、 多くのユーザーが許容)1.0 〜 2.0 秒
「ちょっと遅い」2.0 〜 3.5 秒
会議の流れを止めるほど遅い3.5 秒以上

会議で「直前の発言を踏まえた助け舟」 を出す用途では、 議論の流れに置いていかれない限界が体感 2 秒程度。 ここに STT(音声認識)の遅延 + ネットワーク往復 + LLM 推論が乗るので、 LLM 単独の予算は「1.0 〜 1.5 秒以内」 が現実的な上限です。

その制約を起点に技術選定を逆算しました。

モデル選定の前提

戦略会議のカンペ生成タスクで必要な能力は以下です。

  • 論理構造の把握: 「経営会議の発話の流れ」 を MECE / Issue Tree で読む
  • 戦略コンサル思考フレームの内蔵: So What / Why So / ピラミッドストラクチャー
  • 日本語の自然さ: ビジネス文脈での言い回し、 敬語、 用語選択
  • 業種文脈の対応: SaaS / 金融 / 製造業 / 小売 等で当然の論点が変わる

候補に挙がったのは Claude Haiku 4.5 / Claude Sonnet 4.7 / GPT-4o-mini / Gemini 2.x Flash 等。 dogfooding で評価した結果:

  • Haiku 4.5: 速い・安い・日本語の自然さもビジネス用途で十分・思考フレームの追従度も実用的
  • Sonnet 4.7: 論理飛躍検出・複雑な議論の構造把握では Haiku を上回る、 ただし latency と cost が 2-3 倍

最終的に 「Light プランは Haiku、 Pro プランは Sonnet」 の二段構成 + ユーザー切替可とし、 会議中のカンペ生成は基本 Haiku 固定(Sonnet にすると latency が体感閾値を超える)に決めました。

なぜ Bedrock + Anthropic Direct のハイブリッドか

Claude を本番運用する場合、 主な経路は 2 つあります。

経路強み弱み
Anthropic Direct API最新モデルが即日提供、 token streaming が滑らかリージョンが米国中心、 日本からの latency が +50-100ms
AWS Bedrock東京リージョン提供、 IAM / VPC で AWS と統合運用、 latency が国内最短最新モデル提供が Direct から数日〜数週間遅れ、 一部機能差分あり

両方使える状況で、 会議中のリアルタイム経路は Bedrock 東京、 会議準備 / 議事録生成は Anthropic Direct という割り当てに行き着きました。

判断軸:

  1. latency 最優先 = リアルタイム Cue 生成: Bedrock 東京を選択。 同じ Haiku でも国内 endpoint で東京 -> us-east 間の往復 50-100ms を削れる
  2. 品質重視 + バッチ的処理 = prepare / postmeeting: Anthropic Direct を選択。 LLM 推論が 5-15 秒かかっても許容、 最新モデルで品質を取りに行く
  3. 災害時の冗長: Bedrock が一時障害なら Anthropic Direct にフェイルオーバー、 逆も同様。 単一プロバイダ依存の可用性リスクを避ける

「ハイブリッド」 と言っても、 アプリケーション層で経路を抽象化していて、 内部の bedrock-client.tsanthropic-client.ts を呼び分ける薄い dispatcher を 1 枚挟んでいるだけです。

レイテンシの内訳と最適化ポイント

実測ベースで「発話終了 → カンペ提示」 の内訳はおおむね以下です(条件: 良好な ネットワーク、 国内ユーザー、 Haiku, Bedrock 東京)。

工程標準最適化後
STT 確定(Deepgram interim → final)800-1,200ms600ms(VAD chunking 調整 + interim 採用)
アプリ → Bedrock 往復 + queueing100-200ms80ms
Bedrock 推論(Haiku、 入力 ~2K token / 出力 ~150 token)700-1,000ms400-600ms(プロンプトキャッシュ HIT 時)
クライアント描画50-100ms50ms
合計1,650-2,500ms1,130-1,330ms

最適化で効いたのは大きく 2 つ。

1. プロンプトキャッシュの HIT 率最大化

Anthropic の prompt caching は 「先頭から一致する部分」 を 5 分間キャッシュしてくれる機能で、 system prompt と長い文脈(プロジェクト履歴 / 添付資料抜粋 / 思考フレーム定義)を毎回頭に固定する設計にすると、 同じ会議中の 2 回目以降のカンペ生成で input token が事実上 0 token として課金されます。

実装の要点は 「変動する部分(直近 transcript)を末尾に置く」 こと。

``` [system prompt: 思考フレーム定義 + 業種文脈] <- キャッシュ対象(5 分有効) [文脈: プロジェクト履歴サマリ + 添付要約] <- キャッシュ対象 [直近 30 発話の transcript] <- 毎回変わる、 末尾に [user 指示: "次に検討すべき論点を 3 つ"] ```

これで会議中の 2 回目以降は input token 90%+ がキャッシュ HIT、 課金も latency も大幅に削減できます。

2. 出力 token の上限と stop sequence

カンペは「短い 3 行 × 3 件」 で十分、 出力が長くなるほど latency に直結します。 max_tokens を 200 程度に絞り、 さらに 「3 件目を出し終えたら止まる」 ような stop sequence で打ち切る運用にしました。

加えて、 streaming で受けて UI に逐次描画することで「全部生成し終えるまで何も出ない」 体感を避けています。 「最初の 1 行が出るまでの時間(TTFT, Time To First Token)」 こそが体感速度の鍵です。

コスト感

Issue-Axis Pro プラン(月 50 時間利用、 Haiku で会議中 Cue + Sonnet で議事録生成)の 想定コスト試算は概ね以下(公開時点の単価ベース、 実数値は変動)。

項目月間予算(推定)
Bedrock Haiku(会議中 Cue 生成、 50 時間 × 平均 60 回 / 時間)数百円〜数千円程度
Anthropic Sonnet(議事録 / 準備、 50 件 × 1 万 token)数百円〜数千円程度
Deepgram STT(50 時間 × $0.0043/分)約 1,500 円
Supabase / Vercel / Resend 固定費共通配賦

プロンプトキャッシュ HIT 率を 80%+ で維持できれば、 LLM コストは 想定 1 ユーザー月 1,000-2,000 円程度で収まる試算です。

具体額は使い方とモデル単価変動の影響を強く受けるので、 公開時点でも継続的に観測しています。

失敗 / 学び

実装途中で踏んだ落とし穴をいくつか。

学び 1: 「速い」 だけだと使われない

最初の prototype で latency 800ms のカンペを作った時、 dogfooding で「速いけど内容が薄くて結局見ない」 という FB をもらいました。 速度と品質はトレードオフなので、 「品質の下限を切らない速度」 を探すのが正しい問い。 出力 token 数を絞りすぎないこと、 system prompt に「具体的な思考フレーム」 をしっかり詰めることで、 同じ Haiku でも体感品質が大きく変わりました。

学び 2: streaming UI を作る時の race

stream で逐次描画していると、 「一瞬前の Cue がまだ完全に表示しきれていないうちに新しい Cue リクエストが来る」 状態が頻発します。 Cue を「現行版を maybe-stale にしながら新しい版を fade-in」 する UI 制御をミスすると、 ちらつきが酷くなります。 リクエスト ID で世代管理して、 古い世代の chunk を破棄するパターンに落ち着きました。

学び 3: Bedrock の rate limit は早めに上限申請

東京リージョン Haiku の default quota は意外と厳しく、 開発初期に何度か ThrottlingException を踏みました。 Bedrock コンソールから「Service quotas」 で各モデル別の TPM / RPM 上限申請を出しておくと、 本番で詰まりません(申請から有効化まで数日かかるので早めに)。

学び 4: フォールバックは静かに、 でもログに残す

Bedrock が一時障害で ServiceUnavailable を返した時、 自動で Anthropic Direct にフェイルオーバーする実装にしましたが、 ログを残さないと 2 日後に「コストが想定の倍出てる」 という事態に。 fallback 経路はメトリクスとアラートを必ず付けてから本番投入するべき。

まとめ

会議中のリアルタイム AI カンペを 1.5 秒前後で出すには、

  1. モデル選定: 体感閾値から逆算して Haiku を採用(Sonnet は latency 重視タスクには重い)
  2. 経路選定: Bedrock 東京 + Anthropic Direct のハイブリッド(latency と最新モデル / 冗長性を両立)
  3. プロンプトキャッシュ: system / 文脈を先頭固定、 transcript を末尾に
  4. streaming + 出力 token 上限: TTFT を最短に、 全文待たない UI

の 4 点を押さえることが肝要でした。 これから「リアルタイム LLM」 系の機能を作る方の参考になれば。

Issue-Axis 自体に興味を持っていただけた方は、 使い方ガイド で会議準備 → 会議中 → 議事録生成までの一連の体験を確認いただけます。 料金プラン で Light / Pro の違いをご覧ください。


関連記事 / 参考リンク

関連