コンテンツにスキップ
Twexapi
日本語
Esc
移動開く⌘Jプレビュー
このページの内容

Pydantic AI

TwexAPI MCP 経由で Pydantic AI Twitter API エージェントを構築し、型付きツイート検索、プロフィール、フォロワー、レビュー済み X アクションを実現する。

TwexAPI の MCP サーバー経由で Pydantic AI Twitter API エージェントを構築します。ツイート検索、プロフィール確認、すべての永続ハンドオフを Pydantic モデルで検証します。投稿、返信、いいね、フォロー、DM の各提案をレビューしてください。

TwexAPI と Pydantic AI を組み合わせる理由

Pydantic AI はモデルツール呼び出しと型付き Python 出力を組み合わせます。TwexAPI は MCP ツール exploretwexapi_request 経由で Twitter API ルートを提供します。

Boundary Pydantic AI control Twitter agent benefit
MCP 接続 MCPServerStreamableHTTP 認証情報をプロセス内に保持
最終レスポンス Pydantic output_type 不正なツイート行とカーソルを拒否
書き込みアクション 人間レビューステップ 投稿、返信、フォロー前に一時停止
接続ライフサイクル async with agent 関連呼び出し間で1つの MCP セッションを再利用

ツイート検索またはプロフィールエンリッチメントには1つの型付きエージェントを使用してください。各エージェントは焦点を絞ってください。

前提条件

  • Python 3.10 以降
  • TwexAPI API キー
  • ツール呼び出し対応の Pydantic AI サポートモデル
  • 書き込みアクション用の Twitter cookie または auth_token

インストール

python -m pip install "pydantic-ai[mcp]" python-dotenv

シークレットはソース管理外に保存してください。

export TWEXAPI_API_KEY="YOUR_API_KEY"
export ANTHROPIC_API_KEY="YOUR_ANTHROPIC_KEY"

型付きツイート検索エージェントを構築

エージェント作成前に最終ハンドオフを定義します。Pydantic AI はこのスキーマに対してモデル出力を検証します。

import asyncio
import os
from pathlib import Path
from typing import Literal

from dotenv import load_dotenv
from pydantic import BaseModel
from pydantic_ai import Agent
from pydantic_ai.mcp import MCPServerStreamableHTTP


class TweetRow(BaseModel):
    tweet_id: str
    text: str
    author_username: str | None = None
    created_at: str | None = None
    url: str | None = None


class TweetSearchHandoff(BaseModel):
    query: str
    route_used: str
    tweets: list[TweetRow]
    has_more: bool
    next_cursor: str | None = None
    stop_reason: Literal["complete", "requested_limit", "cursor_stalled"]


async def main() -> None:
    load_dotenv()

    server = MCPServerStreamableHTTP(
        "https://api.twexapi.io/mcp",
        headers={"x-api-key": os.environ["TWEXAPI_API_KEY"]},
    )

    agent = Agent(
        "anthropic:claude-sonnet-4-20250514",
        toolsets=[server],
        output_type=TweetSearchHandoff,
        instructions=(
            "Use TwexAPI MCP for Twitter API requests. Call explore before twexapi_request. "
            "Preserve exact IDs and cursors. Never invent missing tweet fields. "
            "Ask for confirmation before read_only: false actions."
        ),
    )

    result = await agent.run(
        "Search 25 recent tweets about Pydantic AI MCP. "
        "Return the query, route, tweet rows, cursor state, "
        "and an explicit stop reason."
    )

    Path("twexapi-pydantic-ai-handoff.json").write_text(
        result.output.model_dump_json(indent=2),
        encoding="utf-8",
    )


asyncio.run(main())

エージェントは exploretwexapi_request を発見します。ルートまたはパラメータ形状が不明な場合は先に explore を呼び出してください。

保存前にフィールドを検証

出力モデルでこれらのソースフィールドを変更しないでください。

  • ツイート行: tweet_id, text, author_username, created_at, url
  • プロフィール行: user_id, username, name, description, フォロワー数
  • ページ状態: has_more, next_cursor, または言語固有カーソル名
  • 書き込みレシート: ルート名、返されたツイート ID、確認ステータス

大きな ID を浮動小数点数にキャストしないでください。ソース ID は出力モデルで tweet_id または user_id にのみマップしてください。

has_more が true のまま空ページがあっても継続してください。カーソルが存在しない、またはサーバーがカーソルを繰り返す場合に停止し、収集行数とともに cursor_stalled を返してください。

型付きハンドオフを構築

ツイート高度検索

クエリ、ルート、ツイート ID、著者、URL、has_more, next_cursor, 停止理由を保存。

プロフィール詳細検索

user_id, username, name, description, フォロワー数を保存。

フォロワーページ

ソースユーザー名、フォロワー行、カーソルチェックポイントを保存。

書き込みアクション

ルート、プレビューテキスト、cookie 要件、承認記録を保存。

API キーをエージェント出力外に保持してください。Agent MCP Handoff を参照してください。

MCP 接続を再利用

複数実行が1つの接続を共有する場合は関連呼び出しをラップします。

async def collect_two_search_pages(agent: Agent) -> None:
    async with agent:
        first_page = await agent.run(
            "Search 25 tweets about Pydantic AI MCP. Preserve the next cursor."
        )
        cursor = first_page.output.next_cursor
        if not first_page.output.has_more or cursor is None:
            return

        second_page = await agent.run(
            f"Continue tweet search for {first_page.output.query!r}. "
            f"Use explore, then twexapi_request with cursor {cursor!r}."
        )
        _ = second_page

X アクション前に承認を必須に

読み取り専用エージェントは自動的にツイートを検索できます。書き込み可能エージェントはすべての X アクション前に人間の判断が必要です。

class WritePlan(BaseModel):
    action: str
    endpoint: str
    preview_text: str
    requires_human_confirmation: bool = True

read_only: false ルート呼び出し前にエージェントを停止してください。CLI --dry-run でペイロードをプレビューし、承認後 Python SDK または REST 経由で実行してください。

エラー処理

Status Pydantic AI decision
400 リトライ前にリクエストを修正
401 停止し、認証情報を差し替え
403 アクセスまたはクレジット問題を報告
429 バックオフし、カーソルを保持
5xx 安全な読み取りに上限付きバックオフでリトライ

タイムアウト後、返されたステータスを確認せずに保留中の書き込みを再作成しないでください。

Pydantic AI MCP か REST か

要件 選択肢 理由
モデルがツイートまたはプロフィール操作を選択 Pydantic AI MCP エージェントが explore でルートを発見
アプリケーションコードが1つの既知ルートを呼び出し Python SDK リクエストが決定論的
人間が X アクションをレビュー必須 Pydantic AI MCP + 手動 REST 実行前に一時停止
モデルなしスケジュールエクスポート Prefect または REST モデル判断不要

パッケージバージョン

Package Supported range
Python >=3.10
pydantic-ai >=0.8
pydantic >=2.7

次のステップ

このページは役に立ちましたか?