Upgrade to Pro — share decks privately, control downloads, hide ads and more …

LLMチャットアプリケーション・アーキテクチャの工夫

 LLMチャットアプリケーション・アーキテクチャの工夫

LLM Night〜生成AIソフトウェアアーキテクチャ〜というイベントで発表した資料です。

イベントの概要と本資料のサマリーは以下のとおりです。
---------------
回は、生成AI/LLMを用いたアプリケーションのソフトウェアアーキテクチャにフォーカスして語ります。

生成AIを用いたアプリケーションの開発が行われるようになり、本番運用している企業も増えてきました。 一方、まだ生成AIを用いたソフトウェアの設計・ソフトウェアアーキテクチャに関する情報は多くはなく、まだベストプラクティスが出揃っていないと感じます。

・各社がどのようなソフトウェアアーキテクチャを用いて生成AIソフトウェアを開発しているのか

・各社がどのような設計パターンを導入して生成AIソフトウェアを開発しているのか

・アプリケーション開発を実施する上でどのような工夫を実施しているか

・アプリケーション開発を実施する上でどのような苦労があったのか などについて、生々しいお話を聞ける機会も多くはありません。

今回は、生成AI/LLMアプリケーションを実際に開発・運用している各社にお集まりいただき、各社のソフトウェアアーキテクチャ設計事例、アプリケーション開発上の工夫や苦労、最新のモデルや機能をどう捉えているか、などを語り合います。
----------------
PharmaXは、オンライン完結で医薬品を購入可能な薬局を運営するスタートアップです。PharmaXでは、薬剤師がチャットする内容をLLMでサジェストするシステムを本番運用しています。 チャットアプリケーションにLLMを組み込むには、バックエンド・フロントエンド双方で様々な工夫が必要です。今回はアプリケーションとしての設計の工夫に重点を置いてお話いたします。

More Decks by PharmaX(旧YOJO Technologies)開発チーム

Other Decks in Technology

Transcript

  1. (C)PharmaX Inc. 2024 All Rights Reserve 2 自己紹介 上野彰大 PharmaX共同創業者・エンジニアリング責任者

    好きな料理はオムライスと白湯とコーラ 登壇前にやることは入念なストレッチです X:@ueeeeniki
  2. (C)PharmaX Inc. 2024 All Rights Reserve 5 本発表のスコープや注意事項について PharmaXのLLMアプリケーションで取り組んで来たことや今後の展望をお話します •

    PharmaXで取り組んできたこと、今後のどのようなことをやっていきたいのかについて中心にお 話します ◦ 個人的な感想や考えを多分に含みます • マルチエージェントLLMアプリケーションのベストプラクティスが出揃っておらず、今回お話する 内容をどの程度取り入れるかは皆さまでご判断いただければと幸いです • できる限りPharmaXでのリアルな事例や実験結果をお伝えしますが、より詳しく聞きたい方やお 困りごとについて議論したい方は是非 DM等いただければ幸いです
  3. (C)PharmaX Inc. 2024 All Rights Reserve 7 医療アドバイザーに体調 のことをいつでも気軽に相 談できる

    相談型医療体験 30種類以上の漢方薬からあ なたに合ったものを月毎に 提案 パーソナライズ漢方薬 定期的に漢方をお届けし、 一人ひとりに寄り添うかか りつけ医療を提供 継続的なかかりつけ 一生涯にわたって寄り添うかかりつけ漢方薬局「 YOJO」
  4. (C)PharmaX Inc. 2024 All Rights Reserve 15 User 会話分類プロンプトのイメージ まず会話内容の分類するルールと

    few-shotを与えて、会話内容のタイプ(複数回答可)を分類させる メッセージ作成用プロンプト System あなた(assistant)は、ユーザーから受信したメッセージ内容を もとに、会話内容がどの分類にあたるのかを判定してください。 ...(略)… ・会話内容のタイプは、下記のA〜Nの14分類の中から複数選 択されることもあります。配列形式で、分類名(A~Nの記号)をカ ンマ区切りで返してください。 ・userとchat-assistantとの会話の流れは以下の通りです。直近 の会話だけを抜き出します。 ーーー {会話の流れ} ーーーーーーーーーーーーーーー 漢方提案前確認のチャットを送るべきかどうか判定してください。 条件を元にJSON形式で、{ "reason": {判断理由}, "会話内容タ イプ": [{タイプの配列}]}を返してください。
  5. (C)PharmaX Inc. 2024 All Rights Reserve 17 フェーズ切替えエージェントの役割 漢方提案前確認フェーズ フェーズ切替えエージェントは、フェーズ切替えメッセージを送るタイミングを判断する

    どのタイミングでフェーズ切り替え メッセージを送るべきかを判定 共感フェーズ 実際にメッセージが送られたら フェーズを切り替える
  6. (C)PharmaX Inc. 2024 All Rights Reserve 22 共感フェーズのメッセージ提案部のフロー ① ②

    ③ ④ メッセージが提案されるまでに 4段階のLLM処理が実行されている
  7. (C)PharmaX Inc. 2024 All Rights Reserve 23 LLMエージェントの設計上の工夫 • メッセージ作成までに複数のLLM処理が行われるために実行時間が長く、

    処理を実行しようとするときには状態が変わっている可能性があるので、 トランザクション管理を導入している ◦ 処理を決定したときに本当に実行していいのかを再度確認し、処理して問題な いなら処理を実行する • デバックしやすいように&精度向上のために会話分類や評価などの出力に reasonやその他プロパティを付与している ◦ その分、レスポンスは遅くなってしまっている
  8. (C)PharmaX Inc. 2024 All Rights Reserve 24 LLM処理のトランザクション管理 ①前処理 ②LLM処理

    (APIの実行) ③後処理 LLMの処理 トランザクションを開始 LLMの処理結果を渡す トランザクションを完了 LLM モデル • LLM処理を開始すべきか判定 • トランザクション開始 …etc • ルールベースの判定 • 会話分類 • フェーズ切替判定 • メッセージ作成 …etc • LLM処理の完了時アクションを 実行すべきかの判定 • LLM処理のアクションを実行 • トランザクション結果記録 …etc
  9. (C)PharmaX Inc. 2024 All Rights Reserve 25 LLM処理のトランザクションのシーケンス図 ワーカー サーバー

    ワーカー サーバー 前処理 前処理 LLM処理 LLM処理 LLM API LLM API 後処理 DB 後処理 DB LLM処理の起動 トランザクション処理を開始すべきかの判定 LLMトランザクションを発行 LLM API 実行① LLM API 実行② ・ ・ ・ 処理結果と完了時のアクションを記録 LLM処理終了通知 完了時アクションを実行すべきか判定 完了時アクションの実行 トランザクション結果の記録
  10. (C)PharmaX Inc. 2024 All Rights Reserve 26 LLM処理のトランザクションのシーケンス図 ワーカー サーバー

    ワーカー サーバー 前処理 前処理 LLM処理 LLM処理 LLM API LLM API 後処理 DB 後処理 DB LLM処理の起動 トランザクション処理を開始すべきかの判定 LLMトランザクションを発行 LLM API 実行① LLM API 実行② ・ ・ ・ 処理結果と完了時のアクションを記録 LLM処理終了通知 完了時アクションを実行すべきか判定 完了時アクションの実行 トランザクション結果の記録
  11. (C)PharmaX Inc. 2024 All Rights Reserve 27 User 会話分類プロンプトのイメージ まず会話内容の分類するルールと

    few-shotを与えて、会話内容のタイプ(複数回答可)を分類させる メッセージ作成用プロンプト System あなた(assistant)は、ユーザーから受信したメッセージ内容を もとに、会話内容がどの分類にあたるのかを判定してください。 ...(略)… ・会話内容のタイプは、下記のA〜Nの14分類の中から複数選 択されることもあります。配列形式で、分類名(A~Nの記号)をカ ンマ区切りで返してください。 ・userとchat-assistantとの会話の流れは以下の通りです。直近 の会話だけを抜き出します。 ーーー {会話の流れ} ーーーーーーーーーーーーーーー 漢方提案前確認のチャットを送るべきかどうか判定してください。 条件を元にJSON形式で、{ "reason": {判断理由}, "会話内容タ イプ": [{タイプの配列}]}を返してください。
  12. (C)PharmaX Inc. 2024 All Rights Reserve 28 フェーズ切替判定エージェントのプロンプトのイメージ 各フェーズ切替判定エージェントは、フェーズ切替メッセージを送るべきタイミングかどうかを判定する System

    あなた(assistant)には別のassistant(chat-assistant)が漢方 提案前確認のメッセージを送るべきかどうか判定していただき ます。 ...(略)… 信頼関係を構築するための会話をしたユーザーに対して、十分 状態を深ぼったと判断したら、「他になにか伝えておきたいこと はありませんか?問題なければ、おすすめの漢方薬をご提案さ せていただきます😊」という漢方提案前確認のチャットを送るべ きかどうか判定してください。 User ・userとchat-assistantとの会話の流れは以下の通りです。直近 の会話だけを抜き出します。 ーーー {会話の流れ} ーーーーーーーーーーーーーーー 漢方提案前確認のチャットを送るべきかどうか判定してください。 条件を元にJSON形式で、{"reason": {判断理由}, "判定結果": true or false }を返してください。 評価用プロンプト
  13. (C)PharmaX Inc. 2024 All Rights Reserve 30 • 現状はほとんどの処理が直列でなされているので、できる限り処理を並列化するこ とによって処理時間を短縮する

    ◦ 評価などの並列処理可能な処理を並列化する ◦ (コストは高くなるが、)不要になる可能性があっても後続の処理を開始してお くことで、処理時間を短縮できる • アウトプットをシンプルにすることで出力時間が短縮される ◦ デバックはできなくなるが、処理を高速化するためにアウトプットをシンプル化 する ◦ アウトプットが正しいかどうか正解ラベルを付与できる環境の整備もセットで行 う必要はあるが LLM処理の高速化 LLM処理の並列化と、アウトプットのシンプル化によって一連の LLM処理の高速化を実現する
  14. (C)PharmaX Inc. 2024 All Rights Reserve 31 • 評価や会話分類など、本来LLMでやる必要性のない教師あり学習の処理をML化 することで高速化

    ◦ MLにするにはデータ量が必要なので、アノテーションできる環境が必要 ◦ LLMの良さは、学習データがなくとも、ルールを記述したりFew-shotすること で、人間と同じような判断ができること ▪ その結果PDCAサイクルを回しやすいため初期的な検証では威力をを発 揮する ▪ 一方で、教師あり学習の精度には限界がある&コストが高く&速度も遅 い 一部のLLM処理をML化することで高速化 教師あり学習で解決可能なタスクは ML化することによって高速化することも可能