🤖

Azure AI Foundry のエージェント機能を使ってウェブ検索を行う(TypeScript)

に公開

概要

Azure AI Foundry のエージェント機能を使うためには、@azure/ai-projects というパッケージを利用する。

Github で言うと、以下のディレクトリに該当する。
https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/ai/ai-projects

公式ドキュメントを見ようとしたものの、ドキュメントの量が膨大でよく分からなかったため、コードを書きながら利用方法を探ってみた。

リファレンス

読んでおくとよさそうな情報。

まずは以下のURLで表示される README の内容をさらっと見るのが良さそう。
https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/ai/ai-projects

それから、こちらのディレクトリにサンプルが格納されている。
https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/ai/ai-agents/samples/v1-beta/typescript/src

エージェントの基本的な使い方はこちら。
https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/ai/ai-agents/samples/v1-beta/typescript/src/agentsBasics.ts

注意事項

この記事を執筆している時点では、エージェント機能はまだプレビュー版であることに注意。

利用方法

以下、コードを書きながら @azure/ai-projects の使い方を探っていく。
ここでは、ちょっとしたウェブ検索をどう実装するかを調査。

AzureDefaultCredentials 認証

まずは認証を通す必要がある。

import { AIProjectClient } from '@azure/ai-projects';
import { DefaultAzureCredential } from '@azure/identity';

const client = new AIProjectClient(
    "ここにエンドポイント",
    new DefaultAzureCredential(),
);

未認証状態だと AIProjectClient のインスタンス化に失敗する。
自分の場合、Azure CLI を使って認証状態を作った。(適切な権限を持った Microsoft アカウントが必要)

他にも、環境変数による認証などもサポートされている。

エージェント操作

エージェントの作成・取得・削除。

// 生成
const agent = await client.agents.createAgent('モデル名');

// 取得
const agent = await client.agents.getAgent(agent.id);

// 削除
client.agents.deleteAgent(agent.id)

公式のサンプルコードを見る限り、処理を終えるたびにエージェントは削除するべき?

スレッド操作

スレッドの作成・取得・削除

// 作成
const thread = await client.agents.threads.create();

// 一覧取得
const threads = client.threads.list();

// 削除
await client.agents.threads.delete(thread.id);

スレッド作成時にIDを指定したい気もする…。

メッセージ作成と実行

メッセージを作成し、チャットを開始。

// メッセージ作成
const message = await client.agents.messages.create(
    thread.id
    'user',
    '明日の東京の天気は?',
);

// 実行!
const run = await client.agents.runs.createAndPoll(thread.id, agent.id, {
    pollingOptions: {
        intervalInMs: 2000,
    },
    onResponse: (response) => {
        console.log({ response });
    },
});

実行に成功すると、エージェントからの返答が JSON で返ってくる。

Discussion