背景や目的
最近、「AIエージェント」という言葉が広まりましたね。
どこを見ても、「新しいAIエージェントをリリースしました」や「近日中に公開予定です」といった情報があふれています。
でも、そもそも「AIエージェントって何?」と思う人も多いはずです。
見る人の観点や知識によって、その理解は大きく変わってもいそう。
よく理解するために、AIエージェントを実際に手を動かして作ってみました。
作成環境は、その代表的存在と思われるOpenAI Agents SDKを使いました。
「AIエージェント」って何ですか?
AIエージェントは、例えばテレビのニュース(WBS等)では、こう定義されています。
・生成AI => 受動的にアウトプット
・AIエージェント => 能動的に自分で考える
そして、マーケットでの各社の取り組みをいくつかピックアップしてみました。
1. GensparkAI(2025年4月にAIエージェントの会社として起業)
何でも尋ねて何でも作成してくれる、ようです。スライド作成等を頼めるようです。参考URL
→google風の画面で色んなAI機能を提供しているようです。
2. freee(日本の有名な会計ソフト)
freeeのAIエージェント版(freee AI(β))がリリースされたようです。例えば「まほう経費精算」は、上長とのチャット内容を自動解析して事前申請を行う仕組み、のようです。参考URL
→slack等会話情報をAIに投げて分析加えて処理するのかな。
3. ラクス(楽楽精算でお馴染みの会社)
問い合わせ管理ソフトで自動メール返信をするようです(第1弾)。さらに、社内申請フローを処理する能動型AIエージェントとして、2025年内に新機能リリース予定です。参考URL
→メール情報をコンテクストとして、AIに推論して処理する機能ようですね。
4. SoftBank(通信・投資大手)
孫正義氏さんは、年内に10億AIエージェント、社員一人1000体体制構という構想を発表しました。1人が1000個使う、とはどういう事かな?なんだろうね。未来の開発がどうなるか、楽しみです。 参考URL
沢山ありますが、結局は…AI的機能を追加したもの?それとも推論+サポートツール?気になりますね。
実現したい事
でも、やっぱり良く分からないので、自分で手を動かしてみる事にしました。
AIエージェントを作るためのツールを使って、とにかくAI的機能?を作ってみます。発想が降りてくる事を祈りつつ。
旅行先を提案してくれるAIエージェントを作ってみます。イメージは以下の通りです。


構築手順サマリー
手順のサマリーとしては以下の通りです。
1.OpenAI環境準備
2.RAG情報ソースをアップロード
3.AIエージェントのコード作成
順番に紹介してゆきます。
構築1)OpenAI環境準備
まだない場合は、OpenAIアカウントを作成し、APIキーを取得します。
OpenAIのAPIコンソールページのAPI keysメニューで「Create new secret key」を押し作成。
具体的な手順が必要であればこちらをご参照下さい。
→「OpenAIでAPIキーを取得する方法」(石際様作成記事)
作成したAPIキーを使えば、OpenAIのAgents SDKや他のAPI(chat.completionsなど)をプログラムから利用できます。
構築2)RAG情報ソースをアップロード
AIエージェントの処理は、まずRAGで検索し、その後にWeb検索をするものにします。まずはRAGの準備をしましょう。
※(RAG=検索拡張生成)
RAGで参照する情報ソースとして、観光地に関するファイル10件を準備しました。
以下が実際に使用したファイルです。
| ファイル名 | 内容 |
|---|---|
| 観光地1.txt | 日光東照宮 (栃木県):徳川家康を祀る豪華絢爛な神社で、世界遺産にも登録されています。 |
| 観光地2.txt | あしかがフラワーパーク (栃木県):藤の花で有名で、四季折々の花を楽しめるテーマパークです。 |
| 観光地3.txt | 箱根 (神奈川県):温泉、美術館、大自然など、多様な魅力を持つ観光地です。 |
| 観光地4.txt | 鎌倉 (神奈川県):歴史的な寺社仏閣や海、食べ歩きが楽しめる古都です。 |
| 観光地5.txt | 川越 (埼玉県):江戸時代の面影を残す街並みが魅力の小江戸です。 |
| 観光地6.txt | 那珂湊 (茨城県):新鮮な海鮮料理が楽しめる港町です。 |
| 観光地7.txt | 軽井沢 (長野県):避暑地として有名な高原リゾートで、ショッピングや自然散策が楽しめます。 |
| 観光地8.txt | マザー牧場 (千葉県):動物との触れ合いや自然体験ができる観光牧場です。 |
| 観光地9.txt | 東京ドイツ村 (千葉県):季節ごとの花やイルミネーションが楽しめるテーマパークです。 |
| 観光地10.txt | 国営ひたち海浜公園 (茨城県):ネモフィラやコキアなど、美しい花畑が広がります。 |
チャンクミスを避けるため、今回は10件を1つにまとめず、別々のファイルで準備しました。
以下の手順で全ファイルをアップします。
全ファイルをアップする前に、AIエージェントが参照できるベクトルストアをOpenAIコンソール上で作成する必要がありますので作成します。
・OpenAIコンソールにログインして右上部でDashboard押し左側メニュー「Storage」を押し、表示された画面で「Vector stores」タブを押します。

・「+Create」を押下します。

・ベクトルストアは作成されて、適正な名前に設定します。(※私は「DevAIs」と設定した)
・次はファイルをアップするため、「+Add files」を押下します。


・全ファイルをドラッグ&ドロップでアップして、「Attach」を押したらアップ完了です。
・各ファイルは「Files attached」に追加され、参照可能な状態です。

・最後に、次セクションのコードで使用するベクトルストアの「ID」を控えておけば、RAGソースの準備は完了です。
構築3)AIエージェントのコード作成
AIエージェントの処理を考えてコードを書きましょう。
AIエージェントの処理開始時に、以下の3ステップで順に実行されるように構成します。
1.file_searchでRAG検索
2.RAG結果のおすすめ場所の天気情報をWebSearchTool()でWeb検索
3.上記の1、2の取得結果をもとに最終回答をchat.completionsで生成する。
※file_searchとWebSearchTool()がOpenAI AgentsSDKのBuilt-in toolsです。
以下のようにコードを作成します。
ステップ1.のコードを作成するためにFile searchを使います。Filesearchリンク

ステップ2でWeb検索のために、WebSearchTool()を利用します。ResponsesAPIと「tools」を使って定義します。
ちなみに、以下はOpenAIが提供しているツールの一覧(費用も含めて)です。ご参考まで。

・コードはGoogleColab上で書いて実験します。AgentsSDKをインストールし、shift+enterでColab上コードセルを実行します。
pip install openai-agents
・AIエージェントのコードは以下の通りです。65行目以降で集めた情報を使った最終文章を作成しています。
from openai import OpenAI
from agents import Agent, Runner, WebSearchTool
from dataclasses import dataclass
from typing import Optional
import os
import asyncio
#先ほど作成済みのOpenAI API keyを設定
os.environ["OPENAI_API_KEY"] = "sk-*****"
@dataclass
class FileSearchTool:
vector_store_ids: list[str]
max_num_results: Optional[int] = None
include_search_results: bool = False
ranking_options: Optional[dict] = None
filters: Optional[dict] = None
@property
def name(self):
return "file_search"
# --- RAG検索 ---
def get_rag_suggestion_with_file_search(
question: str,
vector_store_id: str,
model: str = "gpt-4.1",
instructions: str = "質問に関する旅行先を1件だけ提案してください。"
) -> str:
client = OpenAI()
response = client.responses.create(
model=model,
input=question,
instructions=instructions,
tools=[{
"type": "file_search",
"vector_store_ids": [vector_store_id]
}]
)
suggestion = response.output_text
return suggestion
# --- Web検索 ---
weather_agent = Agent(
name="WeatherWebSearchAgent",
instructions="提案文を元に、旅行地の地域名を抽出し、その地域の明日の天気を調べてください。",
tools=[WebSearchTool()]
)
class TravelHelper:
def __init__(self):
self.vector_store_id = "vs_*****" # 先ほどメモしたOpenAI ベクトルストア ID
async def run(self, question: str) -> str:
# Step 1: file_searchでRAG検索
suggestion = get_rag_suggestion_with_file_search(
question=question, #質問
vector_store_id=self.vector_store_id
)
#print("RAG 結果:", suggestion)
# Step 2: 天気をWeb検索する
web_search_result = await Runner.run(weather_agent, suggestion)
# Step 3: 最後回答
summary_prompt = f"""
以下の2つの情報を使って、旅行をお勧めする文を作成してください。
- 行き先: {suggestion}
- 天気情報: {web_search_result}
文章は以下を守って作成してください。
- 1文目は、「◯◯をおすすめします。」の形にして下さい。
- 天気の事を含めてください。
- 文字数は200文字程度でお願いします。「。」の後には「\n」を追記してください。
"""
client = OpenAI()
summary_response = client.chat.completions.create(
model="gpt-4.1",
messages=[
{"role": "system", "content": "あなたは旅行提案のまとめをする日本語アシスタントです。"},
{"role": "user", "content": summary_prompt}
]
)
return summary_response.choices[0].message.content.strip()
# --- ボタン無しで実行ために ---
if __name__ == "__main__":
travel_ai_agent = TravelHelper()
question = "明日のお休みに日帰り旅行をしたい。温泉がいいな。"
final_output = await travel_ai_agent.run(question)
print("\n", final_output)試してみましょう!
AIエージェントの準備が整ったので、早速テストしてみます。
作ったAIエージェント画面はこれです。

明日旅行に行きたいおじさんが、
「旅行先提案」を押します。


処理後は結果が表示されました!箱根がおすすめに選ばれたので、そろそろ荷造り開始ですね。
RAGで箱根が提案され、天気検索でも明確な情報と注意点も得られ、適切に処理されました。
できれば、交通手段や宿泊先の空き状況も表示されて、「行く」と答えたらチケットまで手配してくれると嬉しいですが。
今回はここまでです。
まとめ
とにかくAgents SDKを使ってAIエージェントを作ってみました。今回はラフなアイデアを持ち、それを段階的にコーディングする事で色々と理解が深まりました。OpenAI Agents SDKは、初期設定が少しありますが、便利でした。
ただ作成するには普通にコーディングをするので、通常の開発と本質的には大きく変わらないとも感じました。そして、どんなものを作りたいか、は自分で考える必要がありました。当たり前ですが、それは重要だとも思います。現時点のAIエージェントの姿として。
今回作成した「旅行先提案AIエージェント?」に、チケット購入機能を付加し、それがその時点の最安値である事を保証したり、来月同じ曜日にあなたのスマホに提案してきたら、商用のツールになるのかなぁ。。
こうしたAI的機能を社内システムや各案件で組み込んだら良さそうですね。がんばります。
AI ಏಜೆಂಟ್ಗಳನ್ನು ರಚಿಸಿ ಬಳಸೋಣ.
(AIエージェントの作成・利用することを楽しみに。)
