コンテンツにスキップ

サードパーティ製ツール

python_only

ADKは高い拡張性を持つように設計されており、CrewAIやLangChainのような他のAIエージェントフレームワークのツールをシームレスに統合できます。この相互運用性は、開発時間を短縮し、既存のツールを再利用できるため、非常に重要です。

1. LangChainツールの使用

ADKは、LangChainエコシステムのツールをエージェントに統合するためのLangchainToolラッパーを提供します。

例: LangChainのTavilyツールを使用したウェブ検索

Tavilyは、AIエージェントのようなアプリケーションでの使用を目的とした、リアルタイムの検索結果から導き出された回答を返す検索APIを提供します。

  1. ADKのインストールとセットアップガイドに従います。

  2. 依存関係のインストール: 必要なLangChainパッケージがインストールされていることを確認します。例えば、Tavily検索ツールを使用するには、その特定の依存関係をインストールします。

    pip install langchain_community tavily-python
    
  3. TavilyのAPIキーを取得し、環境変数としてエクスポートします。

    export TAVILY_API_KEY=<APIキーに置き換えてください>
    
  4. インポート: ADKからLangchainToolラッパーと、使用したい特定のLangChainツール(例: TavilySearchResults)をインポートします。

    from google.adk.tools.langchain_tool import LangchainTool
    from langchain_community.tools import TavilySearchResults
    
  5. インスタンス化とラップ: LangChainツールのインスタンスを作成し、それをLangchainToolコンストラクタに渡します。

    # LangChainツールをインスタンス化
    tavily_tool_instance = TavilySearchResults(
        max_results=5,
        search_depth="advanced",
        include_answer=True,
        include_raw_content=True,
        include_images=True,
    )
    
    # ADK用にLangchainToolでラップ
    adk_tavily_tool = LangchainTool(tool=tavily_tool_instance)
    
  6. エージェントへの追加: ラップされたLangchainToolインスタンスを、エージェント定義のtoolsリストに含めます。

    from google.adk import Agent
    
    # ラップされたツールを含むADKエージェントを定義
    my_agent = Agent(
        name="langchain_tool_agent",
        model="gemini-2.0-flash",
        description="TavilySearchを使用して質問に答えるエージェント。",
        instruction="インターネットを検索してあなたの質問に答えることができます。何でも聞いてください!",
        tools=[adk_tavily_tool] # ラップされたツールをここに追加
    )
    

完全な例: Tavily検索

以下は、上記の手順を組み合わせて、LangChainのTavily検索ツールを使用するエージェントを作成し、実行する完全なコードです。

import os
from google.adk import Agent, Runner
from google.adk.sessions import InMemorySessionService
from google.adk.tools.langchain_tool import LangchainTool
from google.genai import types
from langchain_community.tools import TavilySearchResults

# Ensure TAVILY_API_KEY is set in your environment
if not os.getenv("TAVILY_API_KEY"):
    print("Warning: TAVILY_API_KEY environment variable not set.")

APP_NAME = "news_app"
USER_ID = "1234"
SESSION_ID = "session1234"

# Instantiate LangChain tool
tavily_search = TavilySearchResults(
    max_results=5,
    search_depth="advanced",
    include_answer=True,
    include_raw_content=True,
    include_images=True,
)

# Wrap with LangchainTool
adk_tavily_tool = LangchainTool(tool=tavily_search)

# Define Agent with the wrapped tool
my_agent = Agent(
    name="langchain_tool_agent",
    model="gemini-2.0-flash",
    description="Agent to answer questions using TavilySearch.",
    instruction="I can answer your questions by searching the internet. Just ask me anything!",
    tools=[adk_tavily_tool] # Add the wrapped tool here
)

session_service = InMemorySessionService()
session = session_service.create_session(app_name=APP_NAME, user_id=USER_ID, session_id=SESSION_ID)
runner = Runner(agent=my_agent, app_name=APP_NAME, session_service=session_service)


# Agent Interaction
def call_agent(query):
    content = types.Content(role='user', parts=[types.Part(text=query)])
    events = runner.run(user_id=USER_ID, session_id=SESSION_ID, new_message=content)

    for event in events:
        if event.is_final_response():
            final_response = event.content.parts[0].text
            print("Agent Response: ", final_response)

call_agent("stock price of GOOG")

2. CrewAIツールの使用

ADKは、CrewAIライブラリのツールを統合するためのCrewaiToolラッパーを提供します。

例: CrewAIのSerper APIを使用したウェブ検索

Serper APIは、プログラムによるGoogle検索結果へのアクセスを提供します。これにより、AIエージェントのようなアプリケーションが、ウェブページを直接スクレイピングすることなく、リアルタイムのGoogle検索(ニュース、画像などを含む)を実行し、構造化されたデータを取得できます。

  1. ADKのインストールとセットアップガイドに従います。

  2. 依存関係のインストール: 必要なCrewAIツールパッケージをインストールします。例えば、SerperDevToolを使用するには、次のようにします。

    pip install crewai-tools
    
  3. Serper APIキーを取得し、環境変数としてエクスポートします。

    export SERPER_API_KEY=<APIキーに置き換えてください>
    
  4. インポート: ADKからCrewaiToolと、目的のCrewAIツール(例: SerperDevTool)をインポートします。

    from google.adk.tools.crewai_tool import CrewaiTool
    from crewai_tools import SerperDevTool
    
  5. インスタンス化とラップ: CrewAIツールのインスタンスを作成します。それをCrewaiToolコンストラクタに渡します。重要なのは、ADKの基盤となるモデルがいつツールを使用するかを理解するために名前と説明が使用されるため、ADKラッパーにこれらを提供する必要があることです。

    # CrewAIツールをインスタンス化
    serper_tool_instance = SerperDevTool(
        n_results=10,
        save_file=False,
        search_type="news",
    )
    
    # ADK用にCrewaiToolでラップし、名前と説明を提供
    adk_serper_tool = CrewaiTool(
        name="InternetNewsSearch",
        description="Serperを使用して、特に最近のニュース記事をインターネットで検索します。",
        tool=serper_tool_instance
    )
    
  6. エージェントへの追加: ラップされたCrewaiToolインスタンスを、エージェントのtoolsリストに含めます。

    from google.adk import Agent
    
    # ADKエージェントを定義
    my_agent = Agent(
        name="crewai_search_agent",
        model="gemini-2.0-flash",
        description="Serper検索ツールを使用して最近のニュースを見つけるエージェント。",
        instruction="最新のニュースを見つけることができます。どのトピックに興味がありますか?",
        tools=[adk_serper_tool] # ラップされたツールをここに追加
    )
    

完全な例: Serper API

以下は、上記の手順を組み合わせて、CrewAIのSerper API検索ツールを使用するエージェントを作成し、実行する完全なコードです。

import os
from google.adk import Agent, Runner
from google.adk.sessions import InMemorySessionService
from google.adk.tools.crewai_tool import CrewaiTool
from google.genai import types
from crewai_tools import SerperDevTool


# Constants
APP_NAME = "news_app"
USER_ID = "user1234"
SESSION_ID = "1234"

# Ensure SERPER_API_KEY is set in your environment
if not os.getenv("SERPER_API_KEY"):
    print("Warning: SERPER_API_KEY environment variable not set.")

serper_tool_instance = SerperDevTool(
    n_results=10,
    save_file=False,
    search_type="news",
)

adk_serper_tool = CrewaiTool(
    name="InternetNewsSearch",
    description="Searches the internet specifically for recent news articles using Serper.",
    tool=serper_tool_instance
)

serper_agent = Agent(
    name="basic_search_agent",
    model="gemini-2.0-flash",
    description="Agent to answer questions using Google Search.",
    instruction="I can answer your questions by searching the internet. Just ask me anything!",
    # Add the Serper tool
    tools=[adk_serper_tool]
)

# Session and Runner
session_service = InMemorySessionService()
session = session_service.create_session(app_name=APP_NAME, user_id=USER_ID, session_id=SESSION_ID)
runner = Runner(agent=serper_agent, app_name=APP_NAME, session_service=session_service)


# Agent Interaction
def call_agent(query):
    content = types.Content(role='user', parts=[types.Part(text=query)])
    events = runner.run(user_id=USER_ID, session_id=SESSION_ID, new_message=content)

    for event in events:
        if event.is_final_response():
            final_response = event.content.parts[0].text
            print("Agent Response: ", final_response)

call_agent("what's the latest news on AI Agents?")