最近、OpenAIは、開発者がマルチエージェントワークフローを簡単に構築できるよう設計された、軽量かつ強力なフレームワークであるAgents SDKを新しく発表しました。この新しいSDKにより、LLMを活用したエージェントのオーケストレーションプロセスが簡素化され、各エージェントには具体的な指示、ツール、ガードレール、ハンドオフが備わっているため、複雑なタスクのシームレスな実行が可能になります。
OpenAIのAgents SDKの基本的な概念
Agents SDKは、その基盤として、いくつかの主な機能を導入しています。
- エージェント: 指示、ツール、実行制約を備えた構成可能なLLM。
- ハンドオフ: エージェントが特殊なタスクに対する制御を他のエージェントに移すことを可能にするメカニズム。
- ガードレール: 入出力を検証し、制約やガイドラインへの準拠を確保する方法。
- トレース: エージェントのワークフローをキャプチャ、デバッグ、最適化するために組み込まれた実行トレース。
OpenAI AgentsとBoxの併用
この新しいSDKの機能を探るために、OpenAI AgentsとBoxを統合し、エージェントがBoxに保存されているドキュメントを見つけてクエリを実行できるようにするデモを作成しました。目標は、Boxに保存されているコンテンツにアクセスすると同時に、OpenAIの強力な新しいWebSearchToolとLLMを使用してそのコンテンツを分析し、インサイトを生成するための一連のツールをエージェントに提供することでした。
このデモをカスタマイズしたい場合、ソースコードはコミュニティのGitHubリポジトリで入手できます。
ユースケース: 第4四半期の財務調査の分析
実装をテストするために、さまざまなテクノロジ企業の第4四半期の収益報告書をBoxにアップロードしました。その後、OpenAI搭載のエージェントには、以下のタスクを課しました。
- ユーザーのクエリに基づいて特定の報告書を探す。
- 各ドキュメントから関連情報を抽出する。
- 企業間の財務実績を比較する分析レポートを生成する。
- この分析に基づいて特定のトピックに関するより深いインサイトを、BoxとWebSearchを組み合わせて取得する。
このエージェントのアプローチ、つまり、ドキュメントの取得とデータ抽出が可能なBoxに特化した1つのエージェントにより、懸念事項を効果的に分離することができました。ここから、話をOpenAIに戻します。
この統合の主な利点
- ドキュメント検索の自動化: エージェントは、メタデータと自然言語クエリを使用して、Boxに保存されたレポートを効率よく見つけることができます。
- 構造化データのシームレスな抽出: BoxのAI機能とOpenAIの処理能力により、主要な財務指標を自動的に抽出できます。
- ハンドオフによるマルチステップ推論: エージェントのコラボレーションにより、各ステップで適切な専門エージェントにタスクが渡されます。
- WebSearchTool(): 1回のインポートと1行のコードで、インターネットのライブデータを独自の企業データに簡単に追加して、さらに広範なインサイトを得ることができます。
実装内容
このサンプルの核となる部分は非常に単純です。エージェントとそのエージェントで使用可能なツールを定義します。
name="Box Agent",
instructions="""
You are a very helpful agent. You are a financial expert.
You have access to a number of tools from Box that allow you
to search for files in Box either holistically or by set criteria.
You can also ask Box AI to answer questions about the files or you
can retriever the text from the files. Your goal is to help the user
find the information they need.
""",
'''
あなたは非常に役立つエージェントで、金融の専門家です。
Boxが提供する多数のツールを利用できるため、Box内のファイルを
全体的に検索することも、設定された条件で検索することもできます。
また、ファイルに関する質問への回答をBox AIに要求することや、ファイルから
テキストを取得することも可能です。目標は、ユーザーが必要な情報を
見つけられるようにすることです。
'''
tools=[
file_search,
ask_box,
get_text_from_file,
box_search_folder_by_name,
box_list_folder_content_by_folder_id,
WebSearchTool(),
],
)
エージェントを操作するための簡単なユーザー入力は以下のとおりです。
user_msg = input("How can I help you today:\n") #今日は何かお手伝いできることはありますか
agent = box_agent
inputs: list[TResponseInputItem] = [{"content": user_msg, "role": "user"}]
while True:
result = Runner.run_streamed(
agent,
input=inputs,
)
async for event in result.stream_events():
if isinstance(event, ResponseTextDeltaEvent):
print(event.delta, end="", flush=True)
elif isinstance(event, ResponseContentPartDoneEvent):
print("\n")
answer = strip_markdown(result.final_output)
answer.replace("\n\n", "\n")
print(f"{answer}\n")
inputs = result.to_input_list()
print()
user_msg = input("Follow up:\n") #フォローアップ
inputs.append({"content": user_msg, "role": "user"})
エージェントがBoxにアクセスするためのさまざまなツールを実装します。たとえば、次のように、OpenAIがBox AIにファイルについて質問するためのツールを実装できます。
async def ask_box(file_id: str, prompt: str) -> str:
"""
Ask box ai about a file in Box. #Box AIにBox内のファイルについて質問します
Type: function #関数
Args:
file_id (str): The ID of the file to read. #読み取るファイルのID
prompt (str): The prompt to ask the AI. #AIに質問するためのプロンプト
type: function #関数
return:
str: The text content of the file. #ファイルのテキストコンテンツ
"""
ai_agent = box_ai_agent_ask()
response = box_file_ai_ask(
BoxAuth().get_client(), file_id, prompt=prompt, ai_agent=ai_agent
)
return response
最後段階では、実際にBox APIを操作します。
client: BoxClient,
file_id: str,
prompt: str,
ai_agent: AiAgentAsk = None
) -> str:
mode = CreateAiAskMode.SINGLE_ITEM_QA
ai_item = AiItemBase(id=file_id, type=AiItemBaseTypeField.FILE)
response = client.ai.create_ai_ask(
mode=mode, prompt=prompt, items=[ai_item], ai_agent=ai_agent
)
return response.answer
実装したツール
- file_search — クエリ、ファイル拡張子、その他のパラメータを使用してBox内のファイルを検索する
- get_text_from_file — 特定のBoxファイルのテキストコンテンツを読み取る
- ask_box — ファイルの内容についてBox AIに質問する
- box_search_folder_by_name —Box内のフォルダを名前で検索する
- box_list_folder_content_by_folder_id — フォルダのコンテンツのリストを取得する
- WebSearchTool() — ウェブから関連するインサイトを得て、独自のデータを補完する
今後の予定
上記のとおり、新しいOpenAI SDKを使用してBox内のコンテンツにアクセスするエージェントを作成しました。
これらの概念の応用は、より多くのコンテキストソースが関与する場合に真価を発揮します。さらに多くのエージェントを組み合わせて、自社の内部記録システムにアクセスしたり、内部ウェブサイトから最新情報を読み取ったり、Salesforceやその他のSaaSシステムにアクセスしたりすることを想像してみてください。
OpenAIのAgents SDKをワークフロー内でどのように使用できるかに興味がある方は、マルチエージェントワークフローをアプリケーションでどのように利用したいかをぜひお聞かせください。
- トピックス:
- 開発者