サードパーティ製ツール¶
ADKは高い拡張性を持つように設計されており、CrewAIやLangChainのような他のAIエージェントフレームワークのツールをシームレスに統合できます。この相互運用性は、開発時間を短縮し、既存のツールを再利用できるため、非常に重要です。
1. LangChainツールの使用¶
ADKは、LangChainエコシステムのツールをエージェントに統合するためのLangchainTool
ラッパーを提供します。
例: LangChainのTavilyツールを使用したウェブ検索¶
Tavilyは、AIエージェントのようなアプリケーションでの使用を目的とした、リアルタイムの検索結果から導き出された回答を返す検索APIを提供します。
-
ADKのインストールとセットアップガイドに従います。
-
依存関係のインストール: 必要なLangChainパッケージがインストールされていることを確認します。例えば、Tavily検索ツールを使用するには、その特定の依存関係をインストールします。
-
TavilyのAPIキーを取得し、環境変数としてエクスポートします。
-
インポート: ADKから
LangchainTool
ラッパーと、使用したい特定のLangChain
ツール(例:TavilySearchResults
)をインポートします。 -
インスタンス化とラップ: LangChainツールのインスタンスを作成し、それを
LangchainTool
コンストラクタに渡します。 -
エージェントへの追加: ラップされた
LangchainTool
インスタンスを、エージェント定義のtools
リストに含めます。
完全な例: 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検索(ニュース、画像などを含む)を実行し、構造化されたデータを取得できます。
-
ADKのインストールとセットアップガイドに従います。
-
依存関係のインストール: 必要なCrewAIツールパッケージをインストールします。例えば、
SerperDevTool
を使用するには、次のようにします。 -
Serper APIキーを取得し、環境変数としてエクスポートします。
-
インポート: ADKから
CrewaiTool
と、目的のCrewAIツール(例:SerperDevTool
)をインポートします。 -
インスタンス化とラップ: CrewAIツールのインスタンスを作成します。それを
CrewaiTool
コンストラクタに渡します。重要なのは、ADKの基盤となるモデルがいつツールを使用するかを理解するために名前と説明が使用されるため、ADKラッパーにこれらを提供する必要があることです。 -
エージェントへの追加: ラップされた
CrewaiTool
インスタンスを、エージェントのtools
リストに含めます。
完全な例: 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?")