事前質問例1
アウトプット例
このプロジェクトの目的は、LLM(大規模言語モデル)におけるストリーミング機能の実装です。最初に、標準出力(Stdout)へのストリーミングを実装し、その後、FastAPIを通じてエージェントによるストリーミングを扱います。1. 必要なライブラリのインストール
以下のライブラリが必要です:
openailangchainfastapiuvicorn2. LLMストリーミングへの標準出力
最も単純な形式のストリーミングは、生成されたトークンを単に「印刷」することです。これを設定するために、特定のパラメーターを持つLLM(すべてのLLMがストリーミングをサポートするわけではありません)を初期化する必要があります:
streaming=True:ストリーミングを有効にするcallbacks=[SomeCallBackHere()]:LangChainコールバッククラス(または複数を含むリスト)を渡します。3. エージェントの初期化
次に、エージェントを初期化します。エージェントは、ツールの使用、複数の「思考」ステップなど、より複雑なロジックを処理するためにLLMとは異なるアプローチを必要とします。
4. ストリーミング出力のクリーンアップ
エージェントを使用すると、LLMからの出力全体がストリーミングされる問題が発生します。実際のユースケースでこのストリーミングを少しクリーンアップするために、カスタムコールバックハンドラを構築するか、LangChainが提供する目的に合ったコールバックハンドラを使用することができます。
5. FastAPIを使ったエージェントのストリーミング
LLMやエージェントをAPIの後ろに配置する場合がほとんどです。FastAPIを使用して、エージェントによるストリーミングを実装する方法を見てみましょう。
FastAPIロジックを含む単純な
main.pyスクリプトを作成します。APIを実行するには、ディレクトリに移動してuvicorn main:app --reloadを実行します。完了したら、次のセルの出力で🤙ステータスを確認して、実行中であることを確認できます。FastAPIの
StreamingResponseオブジェクトを介してFastAPIにトークンをフィードするジェネレータ関数に、トークンを送信する必要があります。これを処理するためには、非同期コードを使用する必要があります。そうでなければ、ジェネレータは生成が完了するまで何も送信しません。キューはコールバックハンドラーによってアクセスされ、生成される各トークンがキューに入れられます。ジェネレータ関数は非同期的に新しいトークンがキューに追加されたことを確認し、トークンが追加されたと見るとすぐに、ジェネレータはトークンを取得して、
StreamingResponseにそれを提供します。実際に動作を見るために、クエリに応じてストリームリクエストを返す
get_stream関数を定義します。これにより、リアルタイムでデータをストリーミングし、FastAPIを通じてLLMまたはエージェントの応答をリアルタイムで取得できます。匿名
事前質問例2
このチュートリアルのシステム構成は?アウトプット例
このチュートリアルでは、LLM(大規模言語モデル)のストリーミング応答を扱うシステムを構築しています。システムは以下のコンポーネントで構成されています:
- 大規模言語モデル(LLM):
- LLMは、ストリーミングをサポートするように設定されます。
- 生成される各トークンは、コールバックを通じてリアルタイムで処理されます。
- エージェント:
- エージェントは、ツールの使用、複数の思考ステップ、およびその他の複雑なタスクを管理します。
- エージェントは、LLMの出力をさらに処理し、より高度な対話やタスク実行を可能にします。
- コールバックハンドラー:
- LLMからの各トークンに対して何かしらのアクションを実行するために使用されます。
- 最も単純な形式は、生成される各トークンを印刷することですが、より複雑な処理が可能です。
- FastAPI:
- FastAPIは、LLMやエージェントを外部から利用可能にするためのAPIエンドポイントを提供します。
- FastAPIを使用することで、HTTPリクエストを介してLLMやエージェントの機能にアクセスできます。
- ストリーミングロジック:
- FastAPIを介してLLMやエージェントからストリーミング応答を送信するための特別なロジックが必要です。
- これには、非同期コードと特別なストリーミングレスポンスの取り扱いが含まれます。
- 開発環境:
- Pythonライブラリ(
openai,langchain,fastapi,uvicornなど)が必要です。- これらのライブラリは、LLMの操作、ストリーミングの実装、およびFastAPIを介したエンドポイントの提供をサポートします。
この構成は、ユーザーがリアルタイムでLLMやエージェントと対話できるシステムを提供します。最終的には、エージェントが生成する応答をストリーミングし、ユーザーがこれをリアルタイムで見ることができるようになります。
事前質問例3
処理フローをmermaidでアウトプット例
以下は、このチュートリアルの処理フローを示すMermaidフローチャートです。このフローチャートは、大規模言語モデル(LLM)からのストリーミング応答を扱うシステムの主要なステップを表しています。このフローチャートは次のステップを示しています:
- ユーザーからのリクエスト: ユーザーがFastAPIを通じてリクエストを送信します。
- FastAPI: FastAPIがリクエストを受け取り、エージェントに渡します。
- エージェント初期化: エージェントが初期化され、LLMとの通信準備が行われます。
- LLMとの通信: エージェントがLLMと通信を始めます。
- ストリーミングパラメータ設定: LLMに対してストリーミングパラメータ(
streaming=Trueおよびcallbacks=[...])が設定されます。- トークン生成のリアルタイム監視: LLMがトークンをリアルタイムで生成し、監視します。
- コールバックハンドラの設定: 特定のアクションや処理を行うためのコールバックハンドラが設定されます。
- トークンのリアルタイム処理: 生成された各トークンがリアルタイムで処理されます。
- 特定のアクション実行: コールバックハンドラが特定のアクションを実行します。
- ストリーミング応答の構築: ストリーミング応答が構築されます。
- FastAPIを通じてユーザーに送信: 構築されたストリーミング応答がFastAPIを通じてユーザーに送信されます。
- ユーザーの端末に表示: ユーザーの端末にストリーミング応答が表示されます。
質問例
処理フローをmermaidでシーケンス図にしてくださいアウトプット例
以下は、このチュートリアルの処理フローを表すMermaidシーケンス図です。このシーケンス図は、LLMのストリーミング応答を扱うシステムの各コンポーネント間の相互作用を時系列に沿って示しています。このシーケンス図は、以下の相互作用を示しています:
- ユーザーからFastAPIへのリクエスト送信: ユーザーがFastAPIにリクエストを送信します。
- FastAPIからエージェントへのリクエスト受信: FastAPIがリクエストを受け取り、エージェントに渡します。
- エージェントからLLMへの設定: エージェントがLLMにストリーミングパラメータ(
streaming=Trueおよびcallbacks=[...])を設定します。- LLMからコールバックハンドラへのトークン生成のリアルタイム監視: LLMがトークンをリアルタイムで生成し、コールバックハンドラに通知します。
- コールバックハンドラによるトークンのリアルタイム処理: コールバックハンドラが生成された各トークンをリアルタイムで処理します。
- コールバックハンドラからFastAPIへのストリーミング応答の構築: コールバックハンドラがストリーミング応答を構築し、FastAPIに送信します。
- FastAPIからユーザーへのストリーミング応答送信: FastAPIが構築されたストリーミング応答をユーザーに送信します。
追加質問例1
participantは、ユーザー、フロントエンド、バックエンド、LLMとしてください。アウトプット例
以下は、指定された参加者(ユーザー、フロントエンド、バックエンド、LLM)を含む、システムの処理フローを示すMermaidシーケンス図です。このシーケンス図は以下のステップを示しています:
- ユーザーからフロントエンドへのリクエスト送信: ユーザーがフロントエンドにリクエストを送信します。
- フロントエンドからバックエンドへのリクエスト転送: フロントエンドがリクエストを受け取り、バックエンドに転送します。
- バックエンドからLLMへのストリーミングリクエスト: バックエンドがLLMに対してストリーミングリクエストを送信します。
- LLMからバックエンドへのストリーミングトークン送信: LLMが生成する各トークンをリアルタイムでバックエンドに送信します。
- バックエンドからフロントエンドへのストリーミングデータ転送: バックエンドが受け取ったストリーミングデータをリアルタイムでフロントエンドに転送します。
- フロントエンドからユーザーへのストリーミング応答送信: フロントエンドが構築されたストリーミング応答をリアルタイムでユーザーに送信します。
追加質問例2
アウトプット例
以下は、指定された参加者(ユーザー、フロントエンド、バックエンド、LLM)を使用し、使用しているAPIがわかるように処理内容を記載したMermaidシーケンス図です。このシーケンス図は以下のステップを示しています:
- ユーザーからFastAPIへのリクエスト送信 (
/chat): ユーザーがFastAPIにリクエストを送信します。- FastAPIからエージェントへのリクエスト転送 (
/initialize-agent): FastAPIがリクエストを受け取り、エージェントに転送します。- エージェントからLLMへのストリーミングパラメータ設定 (
streaming=True,callbacks=[...]): エージェントがLLMにストリーミングパラメータを設定します。- LLMからコールバックハンドラへのトークン生成のリアルタイム監視: LLMがトークンをリアルタイムで生成し、コールバックハンドラに通知します。
- コールバックハンドラによるトークンのリアルタイム処理: コールバックハンドラが生成された各トークンをリアルタイムで処理し、その結果をFastAPIに送信します (
/streaming-response)。- FastAPIからユーザーへのストリーミング応答送信: FastAPIが構築されたストリーミング応答をリアルタイムでユーザーに送信します。
chat.openai.com
chat.openai.com