アシスタント API は関数呼び出しをサポートしています。この機能により、エージェントは外部関数を自動的に呼び出して、テキスト翻訳などのタスクを実行できます。このトピックでは、簡単な「翻訳エージェント」の例を通して、関数呼び出しの基本を素早く理解できるように説明します。
クイックスタート
この例では、翻訳エージェントと、そのエージェントが呼び出すことができる translate_text という名前の関数を作成します。次に、エージェントに "Hello world" を中国語に翻訳するように依頼します。
事前準備
次のコマンドを実行して、requests や dashscope などの必要な依存関係ライブラリをインストールできます。
ステップ 1:「translate_text」関数の作成
まず、簡単な翻訳関数を作成します。この関数は、デモンストレーション目的で事前定義された翻訳テーブルを使用します。
- 翻訳機能:事前定義された翻訳テーブルを使用して翻訳機能をシミュレートし、多言語間の変換をサポートします。
- エラー処理:この関数には、あらゆる状況で適切な応答を返すことを保証するための基本的なエラー処理メカニズムが含まれています。
translate_text 関数を呼び出して翻訳サービスを提供します。
ステップ 2:「translate_text」関数の記述
エージェントに translate_text 関数を記述する必要があります。エージェントはこの記述を使用して関数を正しく呼び出します。
- name:関数の名前は
translate_textです。エージェントはこの名前を使用して関数を呼び出します。 - description:エージェントがその目的を理解するのに役立つツールの説明です。
- parameters:翻訳するテキストとターゲット言語を含む、関数のパラメーターを定義します。
ステップ 3:エージェントの作成
これで、アシスタントインスタンスを作成できます。このインスタンスは、定義した翻訳ツールを使用するエージェントです。
- model:使用するモデルを指定します。この例では、言語理解とタスク処理をサポートする
qwen-plusを使用します。 - name:エージェントの名前です。値を「Translation Assistant」に設定します。
- description:ユーザーのテキスト翻訳を支援するというエージェントの目的の説明です。
- tools:以前に定義した
translation_toolを登録します。これにより、エージェントがツールを呼び出すことができます。
ステップ 4:会話スレッドを作成し、エージェントと対話する
新しい会話スレッドを作成し、それにユーザーメッセージを追加してから、エージェントを実行してユーザーのクエリを処理します。
- Threads.create():後続のメッセージのために新しい会話スレッドを作成します。
- Messages.create():スレッドにユーザーメッセージを追加します。この場合、ユーザーは「Hello world」を中国語に翻訳するように依頼します。
- Runs.create():エージェントをトリガーして、ユーザーメッセージの処理を開始します。
- Runs.wait():エージェントの処理が完了するのを待ちます。
ステップ 5:関数呼び出しを処理し、結果を返す
エージェントが処理中にツールを呼び出す必要がある場合、translate_text 関数が呼び出され、結果が返されます。
- 関数呼び出しの確認:エージェントが関数を呼び出す必要がある場合、コードは要求された関数が
translate_textであるかどうかを確認し、以前に定義された関数を使用して翻訳を実行します。 - 結果の送信:
Runs.submit_tool_outputsを使用して翻訳結果をエージェントに送信し、エージェントの次の応答を待ちます。
ステップ 6:エージェントの応答を取得する
エージェントの処理が完了したら、会話スレッドからエージェントの応答を取得し、ユーザーに表示できます。
まとめ
これらのステップに従うことで、ユーザーの翻訳リクエストを処理し、翻訳関数を使用してテキスト変換を実行できるエージェントを正常に作成できました。アシスタント API を使用すると、複雑なタスク駆動型のエージェントを簡単かつ効率的に構築できます。
必要に応じて、ツールの追加やエージェントの動作命令の変更など、エージェントの機能を拡張できます。
ビジネス関数の説明の迅速な生成
クイックスタートの例では、エージェントに「translate_text」関数を記述する必要があります。このプロセスは面倒な場合があります。そのため、ビジネス関数を迅速に記述するのに役立つ簡単な変換関数を提供します。
translate_text 関数を考えてみましょう。
translate_text 関数は自動的に次のように変換されます。
ストリーミング出力の使用
ストリーミング出力を使用する場合、ステップ 5:関数呼び出しを処理し、結果を返すのコードロジックを変更する必要があります。これは、Runs オブジェクトがアシスタントイベントストリームを返すようになったためです。
アシスタントが関数を呼び出すことを決定すると、Runs オブジェクトは thread.run.requires_action イベントと、大規模言語モデル (LLM) によって提供される入力パラメーター data.required_action.submit_tool_outputs.tool_calls を返します。この時点で関数出力を送信する必要があります。
run = Runs.submit_tool_outputs で関数出力を送信する際にも、ストリーミング出力を有効にする必要があることに注意してください。
for ループの外側に追加の while ループがあることにお気づきかもしれません。これは、関数出力を送信すると、システムが新しい Runs オブジェクトを生成するためです。while ループは、最新のイベントストリームを自動的に追跡するのに役立ちます。これにより、アシスタントは関数呼び出しの結果を受け取った後も応答の生成を続けることができます。