---
title: "Pydantic AI"
description: "TwexAPI MCP üzerinden tipli tweet arama, profiller, takipçiler ve incelenen X eylemleri için Pydantic AI Twitter API agent'ları oluşturun."
---

TwexAPI'nin MCP sunucusu aracılığıyla bir Pydantic AI Twitter API agent'ı oluşturun. Tweet arayın, profilleri inceleyin ve her kalıcı devri bir Pydantic modeliyle doğrulayın. Önerilen her gönderi, yanıt, beğeni, takip veya doğrudan mesajı inceleyin.

## Pydantic AI'yi TwexAPI ile neden kullanmalısınız?

Pydantic AI, model araç çağrılarını tipli Python çıktısıyla birleştirir. TwexAPI, MCP araçları `explore` ve `twexapi_request` aracılığıyla Twitter API rotaları sağlar.

| Sınır | Pydantic AI kontrolü | Twitter agent faydası |
| -------------------- | ---------------------- | -------------------------------------------- |
| MCP bağlantısı | `MCPServerStreamableHTTP` | Kimlik bilgilerini sürecinizde tutun |
| Son yanıt | Pydantic `output_type` | Hatalı tweet satırlarını ve imleçleri reddedin |
| Yazma işlemleri | İnsan inceleme adımı | Göndermeden, yanıtlamadan veya takip etmeden önce duraklatın |
| Bağlantı yaşam döngüsü | `async with agent` | İlgili çağrılar arasında tek bir MCP oturumunu yeniden kullanın |

Tweet araması veya profil zenginleştirmesi için tek bir tipli agent kullanın. Her agent'ı odaklı tutun.

## Önkoşullar

* Python 3.10 veya daha yeni
* [TwexAPI API anahtarı](https://twexapi.io/dashboard)
* Araç çağırma destekli Pydantic AI uyumlu bir model
* Yazma işlemleri için Twitter çerezi veya `auth_token`

## Kurulum

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

Gizlileri kaynak kontrolü dışında saklayın.

```bash
export TWEXAPI_API_KEY="YOUR_API_KEY"
export ANTHROPIC_API_KEY="YOUR_ANTHROPIC_KEY"
```

## Tipli tweet arama agent'ı oluşturun

Agent'ı oluşturmadan önce son devri tanımlayın. Pydantic AI model çıktısını bu şemaya göre doğrular.

```python
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())
```

Agent `explore` ve `twexapi_request` araçlarını keşfeder. Agent bir rota veya parametre şeklini bilmediğinde önce `explore` çağırın.

## Depolamadan önce alanları doğrulayın

Bu kaynak alanlarını çıktı modelinizde değiştirmeden tutun:

* Tweet satırları: `tweet_id`, `text`, `author_username`, `created_at`, `url`
* Profil satırları: `user_id`, `username`, `name`, `description`, takipçi sayıları
* Sayfa durumu: `has_more`, `next_cursor` veya dile özgü imleç adları
* Yazma makbuzları: rota adı, dönen tweet kimliği, onay durumu

Büyük kimlikleri asla kayan noktalı sayıya dönüştürmeyin. Kaynak kimliklerini yalnızca çıktı modelinizde `tweet_id` veya `user_id` olarak eşleyin.

`has_more` true kaldığında boş bir sayfada devam edin. İmleç yoksa veya sunucu bir imleci tekrarladığında durun. Toplanan satır sayısıyla `cursor_stalled` döndürün.

## Tipli devir oluşturun

<CardGroup cols={2}>
  <Card title="Tweet arama" icon="search">
    Sorgu, rota, tweet kimlikleri, yazarlar, URL'ler, `has_more`, `next_cursor` ve durma nedeni saklayın.
  </Card>

  <Card title="Profil sorgulama" icon="user-round">
    `user_id`, `username`, `name`, `description` ve takipçi sayılarını saklayın.
  </Card>

  <Card title="Takipçi sayfaları" icon="users">
    Kaynak kullanıcı adı, takipçi satırları ve imleç kontrol noktasını saklayın.
  </Card>

  <Card title="Yazma işlemleri" icon="send">
    Rota, önizleme metni, çerez gereksinimi ve onay kaydını saklayın.
  </Card>
</CardGroup>

API anahtarlarını agent çıktısının dışında tutun. Bkz. [Agent MCP Handoff](/mcp/agent-handoff).

## MCP bağlantısını yeniden kullanın

Birden fazla çalıştırma tek bağlantıyı paylaşmalıysa ilgili çağrıları sarın.

```python
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 eylemlerinden önce onay gerektirin

Salt okunur agent'lar tweet'leri otomatik arayabilir. Yazma yetenekli agent'lar her X eyleminden önce insan kararı gerektirir.

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

`read_only: false` rotalarını çağırmadan önce agent'ı durdurun. Yükleri [CLI](/sdks/cli) `--dry-run` ile önizleyin, ardından onaydan sonra REST veya [Python SDK](/sdks/python) ile yürütün.

## Hata yönetimi

| Durum | Pydantic AI kararı |
| ------ | ---------------------------------------------- |
| `400` | Yeniden denemeden önce isteği düzeltin |
| `401` | Durdurun ve kimlik bilgisini değiştirin |
| `403` | Erişim veya kredi sorunlarını bildirin |
| `429` | Geri çekilin ve imleci koruyun |
| `5xx` | Güvenli okumaları sınırlı geri çekilme ile yeniden deneyin |

Zaman aşımından sonra dönen durumu kontrol etmeden bekleyen bir yazma işlemini yeniden oluşturmayın.

## Pydantic AI MCP mi REST mi?

| Gereksinim | Seçin | Neden |
| ------------------------------------------------ | --------------- | --------------------------------------------------- |
| Bir model tweet veya profil işlemlerini seçer | Pydantic AI MCP | Agent `explore` ile rotaları keşfeder |
| Uygulama kodu tek bilinen rotayı çağırır | [Python SDK](/sdks/python) | İstek deterministik kalır |
| Bir insan X eylemini incelemelidir | Pydantic AI MCP + manuel REST | Yürütmeden önce duraklatın |
| Zamanlanmış dışa aktarma model olmadan çalışır | [Prefect](/guides/prefect) veya REST | Model kararı gerekmez |

## Paket sürümleri

| Paket | Desteklenen aralık |
| ------------------ | --------------- |
| Python | `>=3.10` |
| `pydantic-ai` | `>=0.8` |
| `pydantic` | `>=2.7` |

## Sonraki adımlar

* [MCP Tools](/mcp/tools)
* [Agent MCP Handoff](/mcp/agent-handoff)
* [LangChain](/guides/langchain)
* [Python SDK](/sdks/python)
