マルチモーダルエージェントを構築するための軽量フレームワーク「Agno」を試す
GitHubレポジトリ
o4-mini-highによる翻訳
Agnoとは?
Agno は、メモリ、知識、推論を備えたマルチエージェントシステムを構築するためのフルスタックフレームワークです。
次の5つのエージェンシックシステムのレベルを構築するために Agno を使用してください:
- レベル1: ツールと命令を持つエージェント。
- レベル2: 知識とストレージを持つエージェント。
- レベル3: メモリと推論を持つエージェント。
- レベル4: 推論と協働が可能なエージェントチーム。
- レベル5: 状態と決定論を備えたエージェンシックワークフロー。
例: YFinance APIを使用して質問に回答するレベル1推論エージェント:
from agno.agent import Agent from agno.models.anthropic import Claude from agno.tools.reasoning import ReasoningTools from agno.tools.yfinance import YFinanceTools reasoning_agent = Agent( model=Claude(id="claude-sonnet-4-20250514"), tools=[ ReasoningTools(add_instructions=True), YFinanceTools(stock_price=True, analyst_recommendations=True, company_info=True, company_news=True), ], instructions="Use tables to display data.", markdown=True, )
はじめに
Agno を初めて使用する場合は、ドキュメントを読んで最初のエージェントを構築し、Playgroundで対話し、agno.comで監視してください。
その後、Examples Galleryを確認し、Agno で実際のアプリケーションを構築しましょう。
Agno を選ぶ理由
Agno は最高クラスの高性能エージェンシックシステム構築を支援し、調査やボイラープレート作成の時間を節約します。Agno の他と異なる主な機能は以下の通りです:
- モデル非依存: 23以上のモデルプロバイダーへの統一インターフェースを提供し、ロックインを回避。
- 高性能: エージェントのインスタンス化は平均 約3μs、メモリ使用量は平均 約6.5KiB。
- 推論を第一級市民としてサポート: 推論は信頼性を高め、複雑な自律エージェントに必須。Agno は3つの推論アプローチをサポート:Reasoning Models、
ReasoningTools
、独自のchain-of-thought
アプローチ。- ネイティブマルチモーダル: テキスト、画像、音声、ビデオを入力として受け取り、同様に出力可能。
- 高度なマルチエージェントアーキテクチャ: 推論、メモリ、共有コンテキストを備えた業界最先端のエージェントチーム(Agent Teams)を提供。
- 組み込みのエージェンシックサーチ: 実行時に20以上のベクターデータベースで情報検索。Agno は最先端のエージェンシックRAGをフル非同期かつ高性能で提供。
- 組み込みのメモリ&セッションストレージ: 組み込みの
Storage
とMemory
ドライバーで、エージェントに長期メモリとセッションストレージを付与。- 構造化出力: モデル提供の構造化出力や
json_mode
を使用し、完全に型付けされた応答を返却可能。- 事前構築された FastAPI ルート: エージェントを構築した後、事前構築の FastAPI ルートでサーブ。数分で本番環境へ。
- 監視: agno.com でエージェントセッションとパフォーマンスをリアルタイム監視。
パフォーマンス
Agno ではパフォーマンスに強くこだわっています。理由は、単純な AI ワークフローでも数千ものエージェントが生成される可能性があるからです。ユーザー数が適度に増えると、パフォーマンスがボトルネックになります。Agno は高性能なエージェンシックシステム構築のために設計されています:
- エージェントのインスタンス化:平均約3μs
- メモリ使用量:平均約6.5KiB
Apple M4 MacBook Pro 上でテスト。
エージェントの実行時間は推論に依存しますが、実行時間の最小化、メモリ使用量の削減、ツール呼び出しの並列化を徹底する必要があります。これらの数値は一見些細に思えますが、適度な規模でも累積効果があることが経験で示されています。
インスタンス化時間
1つのツールを持つエージェントが起動するまでの時間を測定し、1000回評価してベースラインを取得します。ご自身のマシンで評価を実行してください。結果を鵜呑みにしないようご注意ください。
# 仮想環境のセットアップ ./scripts/perf_setup.sh source .venvs/perfenv/bin/activate # または手動で依存関係をインストール # pip install openai agno langgraph langchain_openai # Agno python evals/performance/instantiation_with_tool.py # LangGraph python evals/performance/other/langgraph_instantiation.py
LangGraph は右側、まず LangGraph を開始してヘッドスタートを与えましょう。
Agno は左側で、LangGraph が実行時間測定の半分にも到達していないうちに完了し、メモリ測定すら開始していません。これほど高速です。
メモリ使用量
メモリ使用量の測定には
tracemalloc
ライブラリを使用します。空の関数を実行してベースラインメモリ使用量を算出し、その後エージェントを1000回実行して差分を計算します。この方法でエージェントのメモリ使用量を(比較的)孤立して測定できます。ご自身のマシンで評価を実行し、仕組みを確認してください。誤りがあればお知らせください。
結論
Agno のエージェントはパフォーマンスを重視して設計されており、他のフレームワークとのベンチマークも共有しますが、速度よりも正確性と信頼性を重視しています。
各フレームワークは異なるため、Agno のようにチューニングできないことを考慮し、今後のベンチマークでは自社内のみを比較対象とします。
完全なドキュメントインデックス
LLM や AI アシスタントが Agno の完全なドキュメントを理解・参照しやすいよう、LLMs.txt または LLMs-Full.txt を提供しています。
Cursor セットアップ
Agno エージェントを構築する際、Agno ドキュメントを Cursor のソースとして使用すると開発が高速化されます。
- Cursor の「Cursor Settings」メニューを開く。
- 「Indexing & Docs」セクションを見つける。
https://docs.agno.com/llms-full.txt
をドキュメント URL のリストに追加。- 変更を保存。
これで Cursor が Agno ドキュメントにアクセスできるようになります。
ドキュメント、コミュニティ & その他の例
- ドキュメント: https://docs.agno.com
- クックブック: https://github.com/agno-agi/agno/tree/main/cookbook
- Communityフォーラム: https://community.agno.com/
- Discord: https://discord.gg/4MtYHHrgA8
テレメトリ
Agno はエージェントが使用したモデルの情報をログに記録し、人気プロバイダーの優先的アップデートを行います。環境変数
AGNO_TELEMETRY=false
を設定すると無効化できます。
以前はPhidataという名前だったのがリブランドしたみたい。
🚨 Phidata は Agno に生まれ変わりました!🚨
移転しました!新しいホームページ Agno AGI をご覧ください。
ライセンスはMPL-2.0ライセンス
公式ドキュメントはこちら
GitHubのREADMEにもあるけど、サンプルとしてレベル1〜5のエージェント実装を試すのがQuickstartって感じになっている。
レベル1〜3: ツール・ナレッジ・メモリ/Reasoningを使ったエージェント
レベル4〜5: マルチエージェント
上から順にやってみる。Colaboratoryで。
インストール
パッケージインストール。サンプルでは全般的にAnthropicを使用しているようだが、自分はOpenAIで。
!pip install -U agno openai
!pip freeze | grep -i "agno"
agno==1.7.2
OpenAI APIキーをセットしておく
from google.colab import userdata
import os
os.environ["OPENAI_API_KEY"] = userdata.get('OPENAI_API_KEY')
その他のパッケージは都度必要な時に追加することとする。
Level 1: Agents with tools and instructions
レベル1は、エージェントにツールと指示を持たせて、タスクを処理する。今回ツールはyfinance
というYahoo! Finance's APIにアクセスして株価情報などを取得するパッケージを使う。
パッケージを追加
!pip install -U yfinance
エージェントを定義して、指示とツールを与える。シンプルで直感的に書ける。
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools.yfinance import YFinanceTools
agent = Agent(
model=OpenAIChat(id="gpt-4.1"),
tools=[YFinanceTools(stock_price=True)],
instructions="データを表示するには表を使用してください。その他のテキストは含めないでください。",
markdown=True,
)
agent.print_response("アップルの株価は?", stream=True)
なるほど、出力がこんな感じで出せるのね。色々試しているときはこういうのだと良いね。
▰▰▰▰▱▱▱ Thinking...
┏━ Message ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ アップルの株価は? ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━ Tool Calls ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ • get_current_stock_price(symbol=AAPL) ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━ Response (2.6s) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ ┃
┃ ┃
┃ 銘柄 株価 (USD) ┃
┃ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ┃
┃ アップル (AAPL) 211.16 ┃
┃ ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
ちなみに、エージェントそのものはステートレスっぽい。ここは次のレベルで。
agent.print_response("さっき聞いた株価はなんだっけ?", stream=True)
▰▰▰▰▱▱▱ Thinking...
┏━ Message ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ さっき聞いた株価はなんだっけ? ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━ Response (0.9s) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ ┃
┃ ┃
┃ 内容 詳細 ┃
┃ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ┃
┃ 情報 直前に取得・表示した株価データはありません。 ┃
┃ ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
Level 2: Agents with knowledge and storage
レベル2は 会話履歴を保持したRAGエージェント。
- エージェントの会話履歴は
Storage
を使う- モデルAPIはステートレス、つまり会話履歴などを持たない。
- 上でもやったけどエージェントインスタンスもそのままだとステートレスっぽい
-
Storage
を使うと会話履歴が記録され、セッションを跨いでも会話履歴が保持される。 - いくつかのモジュールがあるようだが、今回はSQLiteを使った
SqliteStorage
を使う
- モデルAPIはステートレス、つまり会話履歴などを持たない。
- RAGのドキュメント検索などの「ナレッジ」には
Knowledge
を使う- ベクトルDBとEmbeddingモデルを紐づけて使う。今回はベクトルDBにLanceDB、EmbeddingモデルにOpenAI text-embedding-3-smallを使う。
- ナレッジの取得方法に応じておそらくいろいろモジュールがある様子。今回使用する
UrlKnowledge
はおそらくURLからドキュメントを追加するものっぽい。
ということで必要なパッケージを追加する。tantivy
ってのはどうやらRust製の全文検索ライブラリみたい。
!pip install -U lancedb tantivy sqlalchemy
エージェントにナレッジとストレージを与えて実行
from agno.agent import Agent
from agno.embedder.openai import OpenAIEmbedder
from agno.knowledge.url import UrlKnowledge
from agno.models.openai import OpenAIChat
from agno.storage.sqlite import SqliteStorage
from agno.vectordb.lancedb import LanceDb, SearchType
# RAGで使用するナレッジの定義
# 今回は Agno のナレッジベースにあるドキュメントを使う
# また、Agnoは LLMS.txt(`https://docs.agno.com/llms-full.txt`)を提供しているので
# それを使っても良い
knowledge = UrlKnowledge(
urls=["https://docs.agno.com/introduction.md"],
vector_db=LanceDb(
uri="tmp/lancedb",
table_name="agno_docs",
search_type=SearchType.hybrid,
# OpenAI Embeddingを使う
embedder=OpenAIEmbedder(id="text-embedding-3-small", dimensions=1536),
),
)
# 会話履歴ストレージの定義
storage = SqliteStorage(table_name="agent_sessions", db_file="tmp/agent.db")
# エージェントに、指示・ナレッジ・ストレージを与えて定義
agent = Agent(
name="Agno Assist",
model=OpenAIChat(id="gpt-4.1"),
instructions=[
"質問に答える前に、自分の知識を検索してください。",
"出力のみを回答に含めてください。その他のテキストは含めないでください。",
],
knowledge=knowledge,
storage=storage,
add_datetime_to_instructions=True,
# メッセージ会話履歴を追加する
add_history_to_messages=True,
# 実行時の履歴数
num_history_runs=3,
markdown=True,
)
agent.knowledge.load(recreate=False)
agent.print_response("Agnoとはどういうものですか?", stream=True)
実行はされるもののエラー・・・
INFO Creating table: agno_docs
INFO Loading knowledge base
INFO Added 2 documents to knowledge base
▰▰▰▰▱▱▱ Thinking...
┏━ Message ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ Agnoとはどういうものですか? ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━ Tool Calls ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ • search_knowledge_base(query=Agno とは) ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━ Response (2.3s) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ 「Agno」という言葉について、私の知識ベースには情報がありませんでした。文脈や分野(例:地名、製品名、用語など) ┃
┃ を教えていただけますと、さらに詳しく調べることができます。 ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
ERROR Error searching for documents: The lance library is required to use this function. Please install with
`pip install pylance`.
pylanceが足りないらしい。んー、と思ったけど型チェックで使うPylanceではなく、どうもLanceDBのパッケージみたい。これを追加する。
!pip install -U pylance
再度実行してみると今度はうまくいった。
INFO Loading knowledge base
INFO Skipped 2 existing/duplicate documents.
INFO Added 0 documents to knowledge base
▰▰▰▰▱▱▱ Thinking...
┏━ Message ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ Agnoとはどういうものですか? ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━ Tool Calls ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ • search_knowledge_base(query=Agno とは) ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━ Response (15.3s) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ ┃
┃ Agnoとは? ┃
┃ ┃
┃ Agnoは、Pythonで動作するマルチエージェントシステム構築のためのフレームワークです。エンジニアや研究者が複数の知 ┃
┃ 識や推論機能を持ったエージェントを簡単に設計・構築できるよう設計されています。 ┃
┃ ┃
┃ 主な特徴 ┃
┃ ┃
┃ • マルチエージェント設計:共有メモリ・ナレッジ・推論能力を持ったエージェントやチームが作れる ┃
┃ • モデル非依存:23種類以上のモデルプロバイダーに対応し、ロックインなし ┃
┃ • 高パフォーマンス:エージェントの起動やメモリ消費が非常に効率的 ┃
┃ • 推論能力重視:推論(reasoning)モデル・ツールチェーンを標準でサポート ┃
┃ • マルチモーダル対応:テキスト、画像、音声、動画を入力・出力として扱える ┃
┃ • 知識ベース検索&RAG:20種類以上のベクトルDBと統合可能なリアルタイム検索機能 ┃
┃ • メモリとストレージ:エージェントの長期記憶・セッション管理に対応 ┃
┃ • 構造化出力:型付きレスポンスやJSONモード対応 ┃
┃ ┃
┃ できることの例 ┃
┃ ┃
┃ • ツール・指示書付きのエージェント作成 ┃
┃ • メモリや知識を持つエージェント設計 ┃
┃ • エージェント同士のチーム化と協働 ┃
┃ • 決定論的・状態管理型ワークフローの実装 ┃
┃ ┃
┃ 使い始め ┃
┃ ┃
┃ • ドキュメント ┃
┃ • 公式サイト ┃
┃ ┃
┃ Agnoは研究開発だけでなく、実用的アプリケーション構築にも適した最新のエージェント・フレームワークです。 ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
INFO Found 3 documents
Level 3: Agents with memory and reasoning
レベル3では、エージェントにメモリとReasoningを追加する。
- エージェントに「考えて」「解析させる」ような「深い推論」の場合には
reasoning
を使う- 今回は
ReasoningTools
を使う。このあたりを見る限り、どうやらツール実行結果を一度LLMに解析させるような推論ステップが追加されるようなイメージ
- 今回は
- 上で会話履歴の話をしたけども、
memory
は会話履歴とは別で、ユーザの好みやパーソナライズに関するものを、会話履歴からLLMに抽出させるといったものみたい。
from agno.agent import Agent
from agno.memory.v2.db.sqlite import SqliteMemoryDb
from agno.memory.v2.memory import Memory
from agno.models.openai import OpenAIChat
from agno.tools.reasoning import ReasoningTools
from agno.tools.yfinance import YFinanceTools
# メモリの定義
memory = Memory(
# メモリを作成・管理するモデルを指定
model=OpenAIChat(),
# SQLiteにメモリを保存
db=SqliteMemoryDb(table_name="user_memories", db_file="tmp/agent.db"),
# メモリの削除を有効化。なお、デフォルトは無効になっている
delete_memories=True,
clear_memories=True,
)
# エージェントの定義
agent = Agent(
model=OpenAIChat(),
tools=[
# 推論ツールを使用
ReasoningTools(add_instructions=True),
YFinanceTools(stock_price=True, analyst_recommendations=True, company_info=True, company_news=True),
],
# メモリを保持するためのユーザIDを指定、指定がなければ`default`がデフォルト
user_id="ava",
instructions=[
"データを表で表示してください。",
"回答には出典を記載してください。",
"回答にはレポートのみを含めてください。その他のテキストは含めないでください。",
],
memory=memory,
# エージェントにメモリを管理させる
enable_agentic_memory=True,
markdown=True,
)
# ユーザID"ava"のお気に入りの株はNVIDAとTESLAというメモリが作成される
agent.print_response(
"私のお気に入りの株は NVIDIA と TSLA です。",
stream=True,
show_full_reasoning=True,
stream_intermediate_steps=True,
)
# メモリを使って質問に答える
agent.print_response(
"私のお気に入りの株を比較して。",
stream=True,
show_full_reasoning=True,
stream_intermediate_steps=True,
)
結果
▰▰▰▱▱▱▱ Thinking...
┏━ Message ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ 私のお気に入りの株は NVIDIA と TSLA です。 ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━ Tool Calls ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ • update_user_memory(task=ユーザーのお気に入りの株をNVIDIAとTSLAとして記録する。) ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━ Response (5.5s) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ 記録しました。NVIDIAとTSLAがあなたのお気に入りの株ですね。何かお手伝いできることがあれば教えてください。 ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
▰▰▰▰▰▱▱ Thinking...
┏━ Message ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ 私のお気に入りの株を比較して。 ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━ Tool Calls ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ • get_current_stock_price(symbol=NVDA) ┃
┃ • get_current_stock_price(symbol=TSLA) ┃
┃ • get_company_info(symbol=NVDA) ┃
┃ • get_company_info(symbol=TSLA) ┃
┃ • get_analyst_recommendations(symbol=NVDA) ┃
┃ • get_analyst_recommendations(symbol=TSLA) ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━ Response (15.6s) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ 以下は、NVIDIAとTeslaの株の比較です。 ┃
┃ ┃
┃ ┃
┃ 指標 NVIDIA (NVDA) Tesla (TSLA) ┃
┃ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ┃
┃ 株価 $164.92 USD $313.51 USD ┃
┃ 時価総額 $4,022,003,040,256 USD $1,009,803,198,464 USD ┃
┃ セクター テクノロジー 一般消費財 ┃
┃ 業種 半導体 自動車メーカー ┃
┃ 本社所在地 サンタクララ, カリフォルニア州, 米国 オースティン, テキサス州, 米国 ┃
┃ EPS(1株あたりの利益) 3.1 1.76 ┃
┃ PER(株価収益率) 53.2 178.13 ┃
┃ 52週の最安値と最高値 $86.62 - $167.89 $182.00 - $488.54 ┃
┃ アナリスト推薦 強く買い 保持 ┃
┃ 推薦詳細(0ヶ月前) 強く買い: 12, 買い: 46, 保持: 7, 売り: 強く買い: 7, 買い: 14, 保持: 16, 売り: ┃
┃ 1, 強く売り: 0 7, 強く売り: 3 ┃
┃ 従業員数 36,000 125,665 ┃
┃ 総現金 $53,690,998,784 USD $36,996,001,792 USD ┃
┃ フリーキャッシュフロー $55,443,001,344 USD $3,360,000,000 USD ┃
┃ 営業キャッシュフロー $76,158,001,152 USD $16,837,001,192 USD ┃
┃ EBITDA $88,247,001,088 USD $12,549,999,616 USD ┃
┃ 売上成長率 69.2% -9.2% ┃
┃ 総利益率 70.107% 17.662% ┃
┃ EBITDAマージン 59.419996% 13.111% ┃
┃ ┃
┃ ┃
┃ 出典: 各企業の最新情報、アナリストのレコメンデーション ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
Level 4: Agent Teams that can reason and collaborate
ここからがマルチエージェント。一般的に、タスクが複雑な場合やツールが多い場合はこれを分解して、個々のエージェントにある程度スコープを狭くしたタスクを与えて、お互いに協調させつつ、結果を集約するといった形にするほうがパフォーマンスが上がるらしい。
レベル4では、半導体市場を分析する2つのエージェントで構成されたチームにタスクを与えて解決させる。今回はAnthropicとOpenAIの両方を使ってみる。
パッケージを追加。なお、ドキュメントのサンプルではDuckDuckGoを使用しているようだが、どうもDuckDuckGoのライブラリ側でアップデートがあったようで、やまほどWarningが出てうまく行っているのかどうかが判断しにくかったので、Tavilyに変更した。
pip install -U anthropic tavily-python
AnthropicとTavilyのAPIキーもセット
from google.colab import userdata
import os
os.environ["ANTHROPIC_API_KEY"] = userdata.get('ANTHROPIC_API_KEY')
os.environ["TAVILY_API_KEY"] = userdata.get('TAVILY_API_KEY')
では推論
from agno.agent import Agent
from agno.models.anthropic import Claude
from agno.models.openai import OpenAIChat
from agno.team.team import Team
from agno.tools.tavily import TavilyTools
from agno.tools.reasoning import ReasoningTools
from agno.tools.yfinance import YFinanceTools
# 検索エージェントの定義
web_agent = Agent(
name="Web検索エージェント",
role="Web検索の依頼や一般的な調査に対応する",
model=OpenAIChat(id="gpt-4.1"),
tools=[TavilyTools()], # Tavily検索ツールを与える
instructions="出典を必ず記載してください",
add_datetime_to_instructions=True,
)
# 財務エージェントの定義
finance_agent = Agent(
name="財務エージェント",
role="財務データのリクエストや市場分析を処理する",
model=OpenAIChat(id="gpt-4.1"),
tools=[
YFinanceTools(
stock_price=True,
stock_fundamentals=True,
analyst_recommendations=True,
company_info=True
)
],
instructions=[
"表を使用して、株価、ファンダメンタル分析(P/E、時価総額)、および推奨事項を表示してください。"
"会社名とティッカーシンボルを明確に記載してください。",
"実用的な財務情報に焦点を当ててください。",
],
add_datetime_to_instructions=True,
)
# チームを構成
reasoning_finance_team = Team(
name="財務分析チーム",
mode="coordinate",
model=Claude(id="claude-sonnet-4-20250514"),
members=[web_agent, finance_agent],
tools=[ReasoningTools(add_instructions=True)],
instructions=[
"包括的な財務および投資に関する洞察を提供するために協力してください",
"ファンダメンタル分析と市場センチメントの両方を考慮してください。",
"データを明確かつ専門的に表示するために、表やグラフを使用してください。",
"調査結果を構造化された、わかりやすい形式で提示してください",
"個々のエージェントの回答ではなく、最終的に統合された分析のみを出力してください",
],
markdown=True,
show_members_responses=True,
enable_agentic_context=True,
add_datetime_to_instructions=True,
success_criteria=(
"チームは、データ・視覚化・リスク評価・定量分析・市場調査に裏打ちされた"
"実行可能な投資推奨事項を含む、包括的な財務分析を提供した。"
)
)
# チームにタスクを与える
reasoning_finance_team.print_response("""\
テクノロジー業界の巨人(AAPL、GOOGL、MSFT)の業績を比較してください:
1. 3社の財務データを取得してください
2. テクノロジー業界に影響を与える最近のニュースを分析してください
3. 比較指標と相関関係を計算してください
4. ポートフォリオの配分比率を推奨してください""",
stream=True,
show_full_reasoning=True,
stream_intermediate_steps=True,
)
3〜4分ほどかけて結果が生成された。長くてZennでは収まらないので、Gistに貼った。
結果
Level 5: Agentic Workflows with state and determinism
レベル5は「ワークフロー」。「ワークフロー」は、商用アプリケーションのために作られた、決定論的でステートフルなマルチエージェントプログラム。ポイントとしては、
- 細かい制御(ループ・条件分岐・エラー処理とか)をピュアPythonで全部書ける。
- 状態(ステート)を持ち、途中で一旦停止・そこから再開なども可能。
- WorkflowのロジックはピュアPythonなので、AIコードエディタなどの恩恵も受けれる。
という感じなのかな。
サンプルで上がっているのは、実行結果をキャッシュするワークフローの例
from typing import Iterator
from agno.agent import Agent, RunResponse
from agno.models.openai import OpenAIChat
from agno.utils.log import logger
from agno.utils.pprint import pprint_run_response
from agno.workflow import Workflow
class CacheWorkflow(Workflow):
# エージェントやチームをワークフローの属性として追加
agent = Agent(model=OpenAIChat(id="gpt-4o-mini"))
# `run()`メソッドにロジックを書く
def run(self, message: str) -> Iterator[RunResponse]:
logger.info(f"キャッシュをチェック: '{message}'")
# 出力がすでにキャッシュされているかをチェック
if self.session_state.get(message):
logger.info(f"キャッシュヒット: '{message}'")
yield RunResponse(
run_id=self.run_id,
content=self.session_state.get(message)
)
return
logger.info(f"キャッシュミス: '{message}'")
# エージェントを実行してレスポンスをyieldする
yield from self.agent.run(message, stream=True)
# レスポンスがyieldされたら出力をキャッシュ
self.session_state[message] = self.agent.run_response.content
# CacheWorkflowクラスのインスタンスを作成してワークフローを定義
workflow = CacheWorkflow()
# ワークフローを実行(〜1秒程度かかる)
response: Iterator[RunResponse] = workflow.run(message="なにか面白いジョークを言って.")
# 結果を出力
pprint_run_response(response, markdown=True, show_time=True)
# サイドワークフローを実行(キャッシュされているためすぐに完了する)
response: Iterator[RunResponse] = workflow.run(message="なにか面白いジョークを言って.")
# 結果を出力
pprint_run_response(response, markdown=True, show_time=True)
ただWorkflowにはどうやら不具合があるようで、以下で修正されている。自分がインストールしたバージョンのパッケージではまだ対応できていない様子なので、そのうち治ると思われる。
とりあえず実行するとこんな感じ
INFO キャッシュをチェック: 'なにか面白いジョークを言って.'
INFO キャッシュミス: 'なにか面白いジョークを言って.'
╭──────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Response │ もちろん!では、こんなジョークはいかがでしょう? │
│ (1.3s) │ │
│ │ なぜ海は青いの? │
│ │ │
│ │ 魚があまりにも多く泳いでいるから、みんなが「ブルー」になっちゃうんだ! │
╰──────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────╯
INFO キャッシュをチェック: 'なにか面白いジョークを言って.'
INFO キャッシュヒット: 'なにか面白いジョークを言って.'
WARNING Workflow.run() should only yield RunResponseEvent objects, got: <class 'agno.run.response.RunResponse'>
キャッシュされた出力は表示されていないけども、キャッシュされていることはわかる。
ここまでのまとめ
エージェントフレームワークとしての書きっぷりみたいなものは過去色々見てきたものとそんなに違いはないと思うので、まあだいたいどれもこんな感じの設計になるよね、という感。
ただ、後発だけあって、かなりスッキリ書けて、あとツール実行とか裏で何やっているか?がちゃんときれいに出力されていたりしてわかりやすいのは良さそう。コンポーネント設計もスッキリしてるような気がした。
あと、Xで言及されているのをいろいろ見る限り、なんとなくMastraと並んで書かれることが多い印象がある。Mastraの評判が非常に良さそうので、そこと並んで書かれると、なんとなく期待できそう、みたいに思ってしまう。根拠ゼロなんだけど。
エージェントフレームワークも多数あって、ここしばらく色々お試ししていたのだけども、自分の中ではこんな感じのグループ分けになった。
- プロプライエタリベンダー起点
- OpenAI Agents SDK
- Google Agent Development Kit
- サードパーティ・オープンソースプロジェクト起点
- 第一次(結構以前からあるもの)
- LangChain/LangGraph
- LlamaIndex
- AutoGen
- CrewAI
- 第二次(比較的新しめ)
- Pydantic AI
- SmolAgents
- Mastra
- Agno
- 第一次(結構以前からあるもの)
他にもたくさんあって、まあなんていうか、多すぎると逆に選べない、みたいな様相。結局どれも触ってみないとわからないし、ユースケースとかに合う合わないもまああるよね。
Agnoについては他の機能についてももう少し色々見てみる。
Playground
Agnoにはテストややりとりを行うためのインタフェースとしてPlaygroundが標準で用意されていて、以下のような特徴がある。
- ストリーミングサポート: リアルタイムの応答ストリーミングと中間状態をユーザーに返します。
- セッション履歴: プレイグラウンド内で会話履歴を可視化できます。
- ユーザーメモリ: 会話全体にわたるユーザーの詳細と設定を可視化できます。
- 設定: エージェントパラメーター、モデル設定、ツール設定を確認できる包括的な設定インターフェースを提供します。
- 推論サポート:: プレイグラウンドインターフェースに詳細な推論トレースを表示する組み込みサポート。
- Human in Loopサポート: 専門の監視と承認によるエージェントワークフローへの手動介入を可能にします。
- マルチモーダルサポート: テキスト、画像、音声、その他のメディアタイプの処理と生成をサポートします。
- マルチエージェントシステム: マルチエージェントチームとワークフローをサポートします。
ただざっと見た感じ、どうやらAgnoのクラウドサービスの利用が必要になるように読める。Agnoの公式サイトの料金のところを見ると・・・
どうやらまだ有料プランは始まっていないみたいだが、Agent playgroundは無料プランの中にあるので使えそう。
とりあえずアカウントを作成して、ログインするとこんな画面。
認証の設定についてはあとでやることとする。
では今回はローカルにAgnoをインストールして試す。uv で Python仮想環境を作成。
uv init -p 3.12 agno-work && cd $_
パッケージインストール。
uv add openai duckduckgo-search yfinance sqlalchemy 'fastapi[standard]' agno
+ agno==1.7.5
サンプルコードはこんな感じ。なるほど、Playground
にエージェントを渡してサーバを起動する、といった感じになるっぽい。
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.playground import Playground
from agno.storage.sqlite import SqliteStorage
from agno.tools.duckduckgo import DuckDuckGoTools
from agno.tools.yfinance import YFinanceTools
agent_storage: str = "tmp/agents.db"
web_agent = Agent(
name="Web Agent",
model=OpenAIChat(id="gpt-4o"),
tools=[DuckDuckGoTools()],
instructions=["常に情報源を含めてください。"],
# エージェントのセッションをSQLiteデータベースに保存
storage=SqliteStorage(table_name="web_agent", db_file=agent_storage),
# 指示に現在の日時を追加
add_datetime_to_instructions=True,
# メッセージに会話履歴を追加
add_history_to_messages=True,
# メッセージに追加する会話履歴の数
num_history_responses=5,
# メッセージにMarkdown形式でフォーマットを追加
markdown=True,
)
finance_agent = Agent(
name="Finance Agent",
model=OpenAIChat(id="gpt-4o"),
tools=[
YFinanceTools(
stock_price=True,
analyst_recommendations=True,
company_info=True,
company_news=True,
)
],
instructions=["データの表示は常に表で行ってください。"],
storage=SqliteStorage(table_name="finance_agent", db_file=agent_storage),
add_datetime_to_instructions=True,
add_history_to_messages=True,
num_history_responses=5,
markdown=True,
)
playground_app = Playground(agents=[web_agent, finance_agent])
app = playground_app.get_app()
if __name__ == "__main__":
playground_app.serve("playground:app", reload=True)
OpenAI APIキーをセット
export OPENAI_API_KEY=XXXXXX
そしてAgnoの認証。認証については以下にドキュメントがある。
認証には2つの方法がある。
- AgnoのCLIコマンドで認証
- Agno.comでAPIキーを作成して環境変数にセット
今回は前者でやってみる。AgnoのパッケージをインストーするとCLIもインストールされている。
uv run ag --help
Usage: ag [COMMAND] [OPTIONS]
Agno is a model-agnostic framework for building AI Agents.
Usage:
1. Run `ag ws create` to create a new workspace
2. Run `ag ws up` to start the workspace
3. Run `ag ws down` to stop the workspace
╭─ Options ───────────────────────────────────────────────────────────────────────────╮
│ --help Show this message and exit. │
╰─────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ──────────────────────────────────────────────────────────────────────────╮
│ setup Setup your account │
│ init Initialize Agno, use -r to reset │
│ reset Reset Agno installation │
│ ping Ping Agno servers │
│ config Print Agno config │
│ set Set current directory as active workspace │
│ start Start resources defined in a resources.py file │
│ stop Stop resources defined in a resources.py file │
│ patch Update resources defined in a resources.py file │
│ restart Restart resources defined in a resources.py file │
│ ws Manage workspaces │
╰─────────────────────────────────────────────────────────────────────────────────────╯
以下を実行すると認証およびワークスペースの設定がされるらしい。
uv run ag setup
Welcome to Agno!
Authenticating with agno.com
Your browser will be opened to visit:
https://app.agno.com/cli-auth?source=cli&action=signin&redirection_supported=true&redir
ecturi=http%3A%2F%2Flocalhost%3A9191%2Fauth
Waiting for a response from the browser...
自動的にブラウザが起動して認証画面が表示される。認証すると以下のように表示されて完了。
Welcome XXXXXXX
なお、APIキーを使う場合は、Agnoの管理画面の "Settings" から鍵アイコンをクリックすると取得できるので、これを環境変数にセットすれば良い。
では実行する。
uv run playground.py
以下のようにPlaygroundのURLが表示されるので、ブラウザでアクセス。なお、ローカルの方は7777番ポートで起動しているみたい。
INFO Starting playground on http://localhost:7777
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Agent Playground ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ ┃
┃ Playground URL: https://app.agno.com/playground?endpoint=localhost%3A7777/v1 ┃
┃ ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
INFO: Will watch for changes in these directories: ['/Users/kun432/work/agno-work']
INFO: Uvicorn running on http://localhost:7777 (Press CTRL+C to quit)
INFO: Started reloader process [63063] using WatchFiles
INFO: Started server process [63067]
INFO: Waiting for application startup.
INFO: Application startup complete.
ブラウザでアクセスとAgno.comのPlayground画面が表示される。サラッと使えるのかなと思いきや、ローカルのエンドポイントを登録する必要がある。右の"ENDPOINT" で "Add endpoint" を選択
エンドポイントURL(http://localhost:7777/v1
)と適当な名前を登録。
登録したエンドポイントを選択。表示されていなければ再読み込みアイコンをクリックすると表示されると思う。
ローカルで設定したエージェント名などが見えればOKっぽい。適当にチャットしてみる。
アップルの今日の株価を知りたい。
ツールの実行がうまくいかなかったが、Webエージェントを選択していたためで、かつ、どうもDuckDuckGoのライブラリが色々変わってしまったためだと思われる。
ローカルではこんなWarningが出ている。そういえば上でやったサンプルでもDuckDuckGoではうまく動かなくてTavilyにしていたのだった。
/Users/kun432/work/agno-work/.venv/lib/python3.12/site-packages/agno/tools/duckduckgo.py:71: RuntimeWarning: This package (`duckduckgo_search`) has been renamed to `ddgs`! Use `pip install ddgs` instead.
ddgs = DDGS(
/Users/kun432/.local/share/uv/python/cpython-3.12.10-macos-aarch64-none/lib/python3.12/json/encoder.py:414: ResourceWarning: unclosed resource <TCPTransport closed=False reading=False 0x129505df0>
def _iterencode(o, _current_indent_level):
/Users/kun432/.local/share/uv/python/cpython-3.12.10-macos-aarch64-none/lib/python3.12/json/encoder.py:356: ResourceWarning: unclosed resource <TCPTransport closed=False reading=False 0x1294c97e0>
items = dct.items()
なお、Financeエージェントの方ではちゃんと取得できた。
マルチエージェントで試す場合にはチームとか作って試すのだろうと思われる。
モニタリングとデバッグ
モニタリング
エージェントのモニタリングも Agno.com で行える。
1つ前の環境をそのまま使う。Agnoの認証はすでにできているという前提。
from agno.agent import Agent
agent = Agent(
markdown=True,
# エージェント単位でモニタリングを有効にできる
# なお、環境変数 `AGNO_MONITOR=true`をセットすると、
# 全てのエージェントがモニタリング対象となる
monitoring=True
)
agent.print_response("2文のホラーストーリーを作って。")
実行
uv run monitoring.py
INFO Setting default model to OpenAI Chat
┏━ Message ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ 2文のホラーストーリーを作って。 ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━ Response (3.4s) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ 子供が毎晩、クローゼットの中に誰かがいると言い張るので、私は彼の不安を和らげるため ┃
┃ に一緒に部屋を調べることにした。クローゼットのドアを開けた瞬間、私の顔をした「誰か ┃
┃ 」と目が合った。 ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
Agno.com の "SESSIONS" に記録されているのがわかる。先ほどのPlaygroundのものもあるね。
デバッグ
エージェントのデバッグモードを有効にする。
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools.yfinance import YFinanceTools
agent = Agent(
model=OpenAIChat(id="gpt-4o"),
tools=[YFinanceTools(stock_price=True)],
instructions="データの表示は常に表で行ってください。",
markdown=True,
debug_mode=True, # デバッグモードを有効化
)
agent.print_response("Appleの株価を教えて。", stream=True)
実行
uv run debug_logs.py
DEBUG ********** Agent ID: fdcd0573-22fb-46e8-99fd-c4f6bbf805c1 *********
DEBUG ********* Session ID: ce7d323b-f637-4398-920a-7f0b9158c648 ********
DEBUG Processing tools for model
DEBUG Added tool get_current_stock_price from yfinance_tools
DEBUG ****** Agent Run Start: 2542807c-e3fc-4fb0-8051-438ddf11e3df ******
DEBUG ------------------- OpenAI Response Stream Start ------------------
DEBUG -------------------------- Model: gpt-4o --------------------------
DEBUG ============================== system =============================
DEBUG <instructions>
データの表示は常に表で行ってください。
</instructions>
<additional_information>
- Use markdown to format your answers.
</additional_information>
DEBUG =============================== user ==============================
DEBUG Appleの株価を教えて。
DEBUG ============================ assistant ============================
DEBUG Tool Calls:
- ID: 'call_MSdyAvg3pJOuUwphUjo7UDtu'
Name: 'get_current_stock_price'
Arguments: 'symbol: AAPL'
DEBUG **************************** METRICS ****************************
DEBUG * Tokens: input=104, output=17, total=121
DEBUG * Prompt tokens details: {'audio_tokens': 0, 'cached_tokens': 0}
DEBUG * Completion tokens details: {'accepted_prediction_tokens': 0, 'audio_tokens':
0, 'reasoning_tokens': 0, 'rejected_prediction_tokens': 0}
DEBUG * Time: 1.0302s
DEBUG * Tokens per second: 16.5022 tokens/s
DEBUG * Time to first token: 0.9508s
DEBUG **************************** METRICS ****************************
DEBUG Running: get_current_stock_price(symbol=AAPL)
DEBUG Fetching current price for AAPL
DEBUG =============================== tool ==============================
DEBUG Tool call Id: call_MSdyAvg3pJOuUwphUjo7UDtu
DEBUG 211.1800
DEBUG ************************** TOOL METRICS *************************
DEBUG * Time: 0.6875s
DEBUG ************************** TOOL METRICS *************************
DEBUG ============================ assistant ============================
DEBUG 以下はAppleの現在の株価を表示している表です。
| 銘柄コード | 株価 (USD) |
|------------|------------|
| AAPL | 211.18 |
DEBUG **************************** METRICS ****************************
DEBUG * Tokens: input=135, output=46, total=181
DEBUG * Prompt tokens details: {'audio_tokens': 0, 'cached_tokens': 0}
DEBUG * Completion tokens details: {'accepted_prediction_tokens': 0, 'audio_tokens':
0, 'reasoning_tokens': 0, 'rejected_prediction_tokens': 0}
DEBUG * Time: 1.2554s
DEBUG * Tokens per second: 36.6423 tokens/s
DEBUG * Time to first token: 0.5330s
DEBUG **************************** METRICS ****************************
DEBUG -------------------- OpenAI Response Stream End -------------------
DEBUG Added RunResponse to Memory
DEBUG ******* Agent Run End: 2542807c-e3fc-4fb0-8051-438ddf11e3df *******
┏━ Message ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ Appleの株価を教えて。 ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━ Tool Calls ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ • get_current_stock_price(symbol=AAPL) ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━ Response (3.0s) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ 以下はAppleの現在の株価を表示している表です。 ┃
┃ ┃
┃ ┃
┃ 銘柄コード 株価 (USD) ┃
┃ ━━━━━━━━━━━━━━━━━━━━━━━━━ ┃
┃ AAPL 211.18 ┃
┃ ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
標準でもAgnoの実行時の出力は色々出力されてわかりすいと思うのだけど、デバッグモードを有効にするとさらに詳細に把握できる。
なお、実際にはもっとカラフルに表示される。
あとは各コンポーネントごとに見たり、サンプルを試したりという感じで。
長くなりそうので別記事にまとめる。
ちなみに、GitHubのREADMEにもあるけど、
完全なドキュメントインデックス
LLM や AI アシスタントが Agno の完全なドキュメントを理解・参照しやすいよう、LLMs.txt または LLMs-Full.txt を提供しています。
とかがあるので、AI IDEを使う場合にはこれを利用するのが良さそう。
あと、公式ドキュメントでAIにチャットで質問できる機能は結構色んなところで見かけるけども、Agnoのものは知りたいことをかなり詳しく説明してくれて、かなり優秀ではなかろうか、と感じる。
ただ、めちゃめちゃ生成量が多くて、かつ、途中で止まらないので、ちょっとだけ使いにくい。生成量が増えるとブラウザが重くなる気もする・・・