5月21日、Microsoft Build 2024 において Azure OpenAI の Assistants API v2 が公開されました。ファイル検索および Browse ツール、強化されたデータ セキュリティ機能、改善されたコントロール、新しいモデル、リージョン サポートの拡張、さまざまな機能強化、新機能が含まれます。
新機能
- ファイル検索ツールとベクトルストアの追加(パブリック プレビュー)
- Azure OpenAI On Your Data 連携 *2024 年 7 月に提供予定
- Browse ツール(Bing Web Search) *2024 年 7 月に提供予定
- Assistant 出力の制御とコストの管理(パブリック プレビュー)
- Assistant オブジェクトと Run オブジェクトでの
pressure
、response_format
(JSON モード)、top_p
などの一般的なモデルパラメーターのサポート - アシスタントのスレッド状態とファイルのカスタマーマネージド キー (CMK) サポート
モデルサポートの拡張
-
GPT-4o
のサポート(パブリック プレビューは 2024 年 6 月に予定) - Finetuned モデルのサポート(パブリック プレビュー)
- Vision サポート(パブリック プレビューは 2024 年 6 月に予定)
- 利用可能な地域の拡大(パブリック プレビュー): 東日本、英国南部、インド南部、米国西部、米国西部3(→まだ反映されていないようだ)
拡張機能
- ストリーミングとポーリングのサポート
- スレッド内のカスタム会話履歴 (パブリック プレビュー)
- Python、JavaScript/TypeScript、.NET、Java、Go SDK のサポート(パブリック プレビュー) .NET のサポートは 6 月に、Java/Go は 7 月に予定
- PromptFlow SDK を使用したアシスタントのトレースと評価(パブリック プレビューは 2024 年 6 月に公開予定)
- AutoGen 連携(GPTAssistantAgent)→すでに検証済み
- Azure Logic Apps を利用して関数呼び出しを備えたアシスタントを構築(パブリック プレビュー)
注目の新機能
ファイル検索ツールとベクトルストアの追加 (プレビュー)
Retrieval としてのファイル検索ツールによって簡単に RAG 機能を実現できます。さらにドキュメントを自動的に解析してチャンク化し、Embeddings を作成して保存し、ベクトル検索とキーワード検索の両方を使用して関連コンテンツを取得してユーザーのクエリに答えます。
ファイル検索ツールの機能
- ユーザークエリを書き換えて検索用に最適化
- 複雑なユーザー クエリを複数の検索に分割し、並列処理
- アシスタントとスレッド ベクトルストアの両方でキーワード検索とセマンティック検索の両方を実行
- 最終的な応答を生成する前に、検索結果をリランクして最も関連性の高いものを選択
- デフォルトでは、ファイル検索ツールは次の設定を使用
- チャンクサイズ: 800 トークン
- チャンクの重複: 400 トークン
- Embeddings モデル:
text-embedding-3-large
256 次元 - コンテキストに追加されるチャンクの最大数: 20
- 各ベクトルストアには最大 10,000 個のファイルを保存できる
- 最大ファイルサイズは512M
- ファイルごとに 5,000,000 トークン以下である必要がある
- ベクトルストアはアシスタントとスレッドの両方にアタッチできる
- 現在、アシスタントには最大 1 つのベクトル ストアをアタッチでき、スレッドには最大 1 つのベクトル ストアをアタッチできる
なるほど、セマンティック検索、リランキングを使ったベクトルストアですか…🤔 Build 2024 の Keynote では Satya が以下のように発言していますので、Assistants API のバックエンドには Azure AI Search が使われているということです。
In Fact, ChatGPT supports for GPTs, their Assistants API are all powerd by Azure AI Search today.
あと text-embedding-3-large
を 3072 -> 256 に次元削減しても運用できる精度だったということ?
ファイル検索を有効にする
tools
に {"type": "file_search"}
を追加します。
from openai import AzureOpenAI
client = AzureOpenAI(
api_key=os.getenv("AZURE_OPENAI_API_KEY"),
api_version="2024-05-01-preview",
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT")
)
assistant = client.beta.assistants.create(
name="Travel Assistant",
instructions="あなたは Contoso 社の社員の出張を支援するためのアシスタントです。あなたは以下の業務を遂行します。",
model="gpt-4-turbo",
tools=[{"type": "file_search"}],
)
ベクトルストアの作成とファイルの追加
単一の API 呼び出しでベクトルストアを作成し、そこにファイルを追加できます。
vector_store = client.beta.vector_stores.create(
name="Travel Documentation",
file_ids=['file_1', 'file_2', 'file_3', 'file_4', 'file_5']
)
ベクトルストアへのファイルの追加は非同期操作です。操作を確実に完了するには、公式 SDK の「作成とポーリング」ヘルパー create_and_poll
を使用することをお勧めします。
ベクトルストアのアタッチ
tool_resources
パラメーターを使用して、ベクトルストアをアシスタントまたはスレッドにアタッチできます。
assistant = client.beta.assistants.create(
instructions="あなたは Contoso 社の社員の出張を支援するためのアシスタントです。あなたは以下の業務を遂行します。",
model="gpt-4-turbo",
tools=[{"type": "file_search"}],
tool_resources={
"file_search": {
"vector_store_ids": ["vs_1"]
}
}
)
thread = client.beta.threads.create(
messages=[ { "role": "user", "content": "有楽町駅近辺でイタリアンのレストランを探しています。"} ],
tool_resources={
"file_search": {
"vector_store_ids": ["vs_2"]
}
}
)
有効期限ポリシーによるコストの管理
vector_store
オブジェクトに関連するコストの管理を支援するために、vector_store
オブジェクトに有効期限ポリシーのサポートが追加されました。これらのポリシーは、vector_store
オブジェクトの作成または更新時に設定できます。デフォルトは最後にアクティブになった後 (ベクトルストアが実行の一部であった最後の時間として定義) 7 日間という有効期限ポリシーがあります。
vector_store = client.beta.vector_stores.create_and_poll(
name="Product Documentation",
file_ids=['file_1', 'file_2', 'file_3', 'file_4', 'file_5'],
expires_after={
"anchor": "last_active_at",
"days": 7
}
)
後ほどさらなる検証を行います。
参考
関連記事
Azure OpenAI の Assistants API によるエージェント開発メモ①
Assistants API 解説