AIエージェントって何?

背景や目的


最近、「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上コードセルを実行します。

Google Colabo
pip install openai-agents

・AIエージェントのコードは以下の通りです。65行目以降で集めた情報を使った最終文章を作成しています。

Google Colabo
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エージェントの作成・利用することを楽しみに。)

ご連絡フォーム


フィードバックを是非お願いします。
本記事の方法での問題点や、よりよい方法のアイデアを頂けると大変助かります。

・この記事に関して

・その他のご連絡

DevAIsをもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む