Closed7

軽量マルチモーダルエージェントフレームワーク「Agno」の各コンポーネント ④Applications

kun432kun432

Agnoを実際にアプリケーションとして、フロントエンドなりとインテグレーションする場合の例が紹介されている。紹介されているのは以下の6パターン。

  • Agno PlayGround
  • FastAPI
  • Whatsapp
  • AG-UI
  • Slack
  • Discord

とりあえず一番使いそうな FastAPI でのインテグレーションを試してみる。

なお、Agno Playgroundについては以下で試しているので、そちらを参照

https://zenn.dev/link/comments/49d38edd718da8

kun432kun432

FastAPI

https://docs.agno.com/applications/fastapi/introduction

FastAPIを使う場合は、エージェントをFastAPIAppでラップして.serve()で起動するだけ

・・・なのだが結論からいうとドキュメントの更新が追いついていない様子(2025/8/5時点)で、ChangeLogを見ると色々変わっている。いろいろ調べてみて動いたのが以下。

uvでプロジェクト作成

uv init -p 3.12 agno-work-fastapi && cd $_

パッケージインストール。今回はLLMにOpenAIを使う。

uv add agno openai fastapi uvicorn[standard]
出力
 + agno==1.7.7
(snip)

OpenAI APIキーを環境変数にセット

export OPENAI_API_KEY=XXXXXXXXXX

コード。

main.py
from agno.agent import Agent
from agno.app.fastapi.app import FastAPIApp
from agno.models.openai import OpenAIChat

basic_agent = Agent(
    name="Basic Agent",
    agent_id="basic_agent",     # この1行が必要!
    model=OpenAIChat(id="gpt-4o"),
    add_history_to_messages=True,
    num_history_responses=3,
    add_datetime_to_instructions=True,
    markdown=True,
)

fastapi_app = FastAPIApp(
    agents=[basic_agent],
    name="Basic Agent",
    app_id="basic_agent",
    description="A basic agent that can answer questions and help with tasks.",
)

app = fastapi_app.get_app()

if __name__ == "__main__":
    fastapi_app.serve(app="basic:app", port=8001, reload=True)

実行

uv run main.py

8001番ポートでサーバが起動した

出力
INFO Starting API on localhost:8001
INFO:     Will watch for changes in these directories: ['/Users/kun432/work/agno-work-fastapi']
INFO:     Uvicorn running on http://localhost:8001 (Press CTRL+C to quit)
INFO:     Started reloader process [21046] using WatchFiles
INFO:     Started server process [21049]
INFO:     Waiting for application startup.
INFO:     Application startup complete.

/docs でAPIドキュメントにアクセスできる。ドキュメントとだいぶ違う・・・

ドキュメントではなくAPIドキュメントどおりにアクセスしてみる(ここはFastAPIのドキュメントもちょっとわかりにくい)

curl -s -X POST "http://localhost:8001/runs?agent_id=basic_agent" \
    -H 'accept: application/json' \
    -H 'Content-Type: multipart/form-data' \
    -F 'message="こんにちは!"' \
    | jq -r .content
出力
こんにちは!何かお手伝いできることがあれば教えてくださいね。

このagent_id、過去にAgnoを試した際には全く使用されていなくて、なんだろう?と思ったのだけど、

  • エージェント初期化時、何も指定しなければエージェントには一意のIDが自動付与される(UUID)。ただし、普通に使う分には特に意識しなくても使える印象。
  • FastAPIAppで起動した場合、このエージェントIDが引数として必須になるが、自動生成だとあえて確認しておかない限り(例えばエージェント初期化後にprintさせておくとか)わかりようがない。

という感じなので、明示的に指定を追加している。

FastAPIで簡単にラップしてくれているのは良いが、よくわからないパラメータが必須になっていて、かつ、ドキュメントにも詳しく書かれていない、ってのは果たしてどうしたものだろうか・・・(更新が追いつかないってのはわからんではないけども)

あえてこれを使わなくても、これならFastAPI部分を自分で実装したほうが確実な気もしている。

kun432kun432

なお、agent_id の使い方がいまいちよくわからないので、果たしてこれが正しいアプローチなのかは不明。Discordがあるのでそこで聞いてみたが、まだ返事はない。返事があれば追記する。

kun432kun432

Agent API

コンセプトのドキュメントからは少しずれるのだけど、Agnoを実際にアプリケーションとして提供するためのもう一つのアプローチとしてAgent APIというのが用意されている。

https://docs.agno.com/agent-api/introduction

Agent API

エージェントをAPIとして提供するための、堅牢で本番環境に対応したアプリケーション

Simple Agent APIへようこそ: Agent APIは、エージェントをAPIとして提供する堅牢で本番環境対応のアプリケーションです。以下の機能が含まれます:

  • APIリクエストを処理するためのFastAPIサーバー
  • エージェントのセッション、知識、記憶を格納するためのPostgreSQLデータベース
  • スタートポイントとして使用できる事前構築済みのエージェントのセット

以下のレポジトリで提供されている

https://github.com/agno-agi/agent-api

っていうかこれは実装済みテンプレートというかボイラープレートって感じだな。

必要なカスタマイズを行ってdocker compose出来どうすれば、簡単にエージェントをAPIで建てれるようになっている。なので、これをそのまま使っても良し、ディレクトリ構成などを参考に自分で実装しても良し、という感じに思える。まあこういうのがあるのは助かるっちゃ助かる。

軽く動かしてみる。

git clone https://github.com/agno-agi/agent-api && cd agent-api

OpenAI APIキーを環境変数にセット

export OPENAI_API_KEY=XXXXXXXXXXX

あとAPIアクセスの確認はcurlで行えるのだけども、Agnoのクラウド上のPlaygroundからも行える。Playgroundからのアクセスを有効にする場合は、compose.yaml の以下のコメントアウトを外しておく。

compose.yaml
  api:
    (snip)
    environment:
      OPENAI_API_KEY: ${OPENAI_API_KEY}
      AGNO_MONITOR: "True"    # デフォルトではコメントアウトされている
      AGNO_API_KEY: ${AGNO_API_KEY}    # デフォルトではコメントアウトされている
      DB_HOST: pgvector
      DB_PORT: 5432
      (snip)

そして、AgnoのAPIキー(Agnoのクラウドで確認できる)も環境変数にセットしておく。

export AGNO_API_KEY=XXXXXXXXXX

docker composeで起動

docker compose up -d

APIサーバとPostgreSQLが起動している様子。

docker compose ps
出力
NAME                   IMAGE                COMMAND                   SERVICE    CREATED              STATUS              PORTS
agent-api-api-1        agent-api:latest     "/app/scripts/entryp…"   api        About a minute ago   Up About a minute   0.0.0.0:8000->8000/tcp, [::]:8000->8000/tcp
agent-api-pgvector-1   agnohq/pgvector:16   "docker-entrypoint.s…"   pgvector   About a minute ago   Up About a minute   0.0.0.0:5432->5432/tcp, [::]:5432->5432/tcp

/docsにアクセスしてみるとAPIドキュメントが確認できる。

Agno Playgroundから確認してみる。右のメニューからエンドポイントを追加。

READMEでは http://localhost:8000 とあるが、実際にはhttp://localhost:8000/v1 を追加する。名前は適宜。

追加したエンドポイントを選択(出てこない場合は更新アイコンをクリック)

エラーメッセージが表示されずに、緑色になっていればOK

ではチャットしてみる。デフォルトでは以下のようなエージェントが事前に用意されている。

事前構築済みエージェント

/agents フォルダーには、初期設定として使用できる事前構築済みのエージェントが含まれています。

  • Web 検索エージェント: ウェブを検索できるシンプルなエージェントです。
  • Agno Assist: Agno に関する質問に回答するのを支援するエージェントです。
    • 重要: このエージェントを使用する前に、agno_assist 知識ベースを必ず読み込んでください。
  • 財務エージェント: YFinance API を使用して株価や財務データを取得するエージェントです。

ここでは財務エージェントを使って、NVIDIAの最新の株価を聞いてみる。

ローカルのAPIコンテナではデバッグログが出力されているので

docker logs -f agent-api-api-1

等として確認しながらやると良い。

ではローカルでcurlでやってみる。

まず最初にエージェントIDを取得する。

curl -s http://localhost:8000/v1/agents \
    -H 'Content-type: applicaiton/json' | jq -r .
出力
[
  "web_agent",
  "agno_assist",
  "finance_agent"
]

エージェントにメッセージを送信するには /v1/agents/<エージェントID>/runs で良さそう。

curl -X POST \
  http://localhost:8000/v1/agents/finance_agent/runs \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "message": "NVIDIAの株価について教えて",
  "stream": false,
  "model": "gpt-4.1",
  "user_id": "kun432",
  "session_id": "test-session-001"
}' | jq -r .
出力
# NVIDIA(NASDAQ: NVDA)株価分析レポート

## Executive Summary
NVIDIAはAIブームとデータセンター事業の成長を牽引し、注目度が極めて高い半導体企業です。現在の株価は史上最高値圏に近く、アナリスト評価も引き続き強気が目立ちますが、AI関連セクター全体のボラティリティや競合との関係も意識が必要です。

---

## Market Overview

|  指標              | 最新値(2025/8/7時点)                 |
|--------------------|----------------------------------------|
| 現在株価           | $179.42(終値ベース)                  |
| 52週高値           | $183.30                                |
| 52週安値           | $86.62                                 |
| 時価総額           | $4.38兆(Trillion)                    |

📈 株価はこの1年間で大きく上昇し、直近で史上最高値に迫る勢いです。

---

## 株価推移(過去1年、週足)

| 期間            | 始値    | 終値    |
|-----------------|---------|---------|
| 1年前           | $104.72 | $179.42 |
(主要な節目のみ抜粋。全データはご要望に応じて提供可能)

- 1年前:約$104 → 現在:約$179と約70%上昇
- 52週レンジでみても、暴落局面から力強い反発、右肩上がりのトレンドが続いています

---

## Financial Deep Dive

| 指標               | NVDA最新値        | 業界平均(参考)  |
|--------------------|------------------|-------------------|
| PER(株価収益率)  | 43.5             | 30前後(半導体)  |
| PBR(株価純資産倍率)| 52.2             | 5-8(業界上位クラス)|
| 配当利回り         | 0.02%            | 低水準            |
| EPS(一株利益)    | $3.10            |                   |
| β値(市場感応度)  | 2.15             | 1.2〜1.5           |

- PER/PBRともに業界平均を大幅に上回り、「プレミアム評価」が継続中
- 配当利回りはほぼゼロ。成長期待の株価重視型
- β値が高く、市場全体の変動にも大きく反応しやすい傾向

---

## Analyst Recommendations(2025年8月 現在)

| 推奨    | 件数 |
|---------|------|
| 強気買い | 11   |
| 買い     | 47   |
| ホールド | 6    |
| 売り     | 1    |
| 強く売り | 0    |

- アナリストのほとんどが「買い」「強気買い」
- 推奨トレンドに大きな変化なく、依然強気

---

## 最新ニュース・話題
- [Nvidiaの「過小評価」されているネットワーキング事業が急成長](https://finance.yahoo.com/news/nvidias-most-underappreciated-business-is-taking-off-like-a-rocket-ship-183615113.html) (Yahoo Finance/2025-8-6)
  - データセンター関連のネットワーク事業が急速拡大
- AMD、AI半導体競争で伸び悩み(Q2決算で-6%下落)。→ 相対的にNVIDIA優勢
- 「AI関連銘柄ラリーは続くが一時的な調整にも注意」との識者見解も

---

## 市場コンテキスト・競合状況
- AI/データセンター市場の拡大とともに需要超過が続く
- 主要競合AMDやSuper Micro Computerは足踏みや下方修正
- NVIDIAはネットワーキングやソフトウェア面の事業拡大も加速

---

## リスク・懸念点
- 📉 PER・PBRの高さに見られる「成長期待先行」の反動リスク
- 米中摩擦や半導体規制リスク
- AIバブル的過熱感への懸念(バリュエ―ションの巻き戻しリスク)
- β値が高いため、市場全体の下落時には大きな変動性

---

## Outlook(今後の見通し)

- 中長期的にAIとデータセンター新規需要が追い風。ただしプレミアム評価のため、決算や市場全体の波に大きく影響される可能性大。
- 短期ではVolatility(価格変動の大きさ)に十分な注意が必要。

---

### <ご参考:解説用語>
- **PER(株価収益率)**:株価が1株当たり純利益の何倍かを示す指標。成長株は高い傾向。
- **PBR(株価純資産倍率)**:株価が1株あたり純資産の何倍か。高すぎる場合は割高懸念。
- **EPS(Earnings Per Share)**:1株あたりの純利益。

---

ご質問やさらに詳細な指標のご希望があればお気軽にご連絡ください。

同じユーザIDとセッションIDを使えばコンテキストは維持されるので、ステートフルにやりとりできる。

curl -X POST \
  http://localhost:8000/v1/agents/finance_agent/runs \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "message": "それって今は買い時?簡潔に教えて。",
  "stream": false,
  "model": "gpt-4.1",
  "user_id": "kun432",
  "session_id": "test-session-001"
}' | jq -r .
出力
### NVIDIAは今「買い時」か?【簡潔解説】

#### ✅ ポジティブ材料
- 強いAI需要・高い成長性
- アナリストは圧倒的に「買い」推奨が多い
- 業績・シェアともに絶好調

#### ⚠ 注意点・リスク
- 株価は既に過去最高水準、PERも非常に高い(割高懸念)
- 市場全体やAI分野に調整が入ると大きく下落するリスク
- 決算発表などイベント前後は特に値動きが激しい

---

### 📊 まとめ
- 長期成長には期待大 ➡ 現状は「高値掴み」のリスクも高い
- 今から買う場合は“短期調整(下落)覚悟 or 分割投資”が無難

---

**総評:強い企業だが、今は“割高”なので慎重にエントリー推奨。リスク許容度に合わせて判断を。**
kun432kun432

Agnoだと結構シンプルに実装できてしまうので、スクラッチから書き始めてもいいとは思うんだけど、それでも公式からリファレンス実装的なものが用意されているのはとても助かる。

このスクラップは26日前にクローズされました