Aller au contenu
Twexapi
Français
Esc
naviguerouvrir⌘Japerçu
Sur cette page

Haystack

Construisez des pipelines RAG Haystack avec les composants de recherche de tweets et de timelines TwexAPI, des Documents typés, des citations et la pagination.

Haystack est un framework open source pour les applications IA en Python. Utilisez x-api-scraper-haystack pour des tweets récents dans des pipelines RAG et des workflows d’agents. L’intégration est en lecture seule et ne donne jamais accès à l’écriture.

L’intégration fournit deux composants en lecture seule :

Rechercher des tweets publics

TwexApiTweetSearch recherche des mots-clés, hashtags, comptes et opérateurs de requête X via POST /twitter/advanced_search/page.

Récupérer des timelines utilisateur

TwexApiUserTweetsFetcher récupère la timeline d’un compte public via POST /twitter/{screen_name}/timeline/page.

Utilisez ces composants pour la recherche, les timelines, la surveillance et la génération augmentée par la récupération. Enveloppez TwexApiTweetSearch avec ComponentTool lorsqu’un agent a besoin d’un outil de recherche.

Utilisez l’API followers pour les exports d’abonnés. Utilisez l’API d’écriture pour la publication approuvée. Ces actions restent en dehors de cette intégration.

Installer Haystack et TwexAPI

Utilisez Python 3.10 ou plus récent. Verrouillez les deux packages pour des builds de pipeline reproductibles.

python -m pip install "x-api-scraper-haystack" "haystack-ai>=3.0.0"

Installez dans un environnement virtuel.

Créez une clé API TwexAPI, puis exportez-la localement.

export X_API_SCRAPER_KEY="YOUR_API_KEY"

Ne jamais intégrer des clés de production dans le YAML de pipeline, des notebooks ou le contrôle de version. Chargez la variable d’environnement via un objet Haystack Secret.

Rechercher des tweets Twitter en Python

TwexApiTweetSearch appelle POST /twitter/advanced_search/page. Il accepte la syntaxe de recherche X et renvoie des objets Haystack Document.

from haystack import Pipeline
from haystack.utils import Secret
from haystack_integrations.components.websearch.x_api_scraper import TwexApiTweetSearch

search = TwexApiTweetSearch(
    api_key=Secret.from_env_var("X_API_SCRAPER_KEY"),
    top_k=20,
)

pipeline = Pipeline()
pipeline.add_component("twitter_search", search)

result = pipeline.run(
    {
        "twitter_search": {
            "query": '"retrieval augmented generation" lang:en -filter:retweets'
        }
    }
)

documents = result["twitter_search"]["documents"]
links = result["twitter_search"]["links"]

Utilisez Latest pour la surveillance récente. Utilisez Top pour la découverte classée par engagement. Stockez les ID de tweet car les classements peuvent changer.

Enregistrez chaque requête de recherche à côté de ses ID de tweet. Définissez top_k pour limiter le nombre de tweets à chaque exécution.

Construire des recherches de tweets ciblées

Intention de recherche Exemple de requête
Phrase exacte "retrieval augmented generation"
Publications d’un compte from:deepset_ai haystack
Recherche par hashtag #haystack #rag
Plage de dates haystack since:2026-07-01 until:2026-08-01
Exclure les republications haystack -filter:retweets

Consultez Advanced Twitter Search pour toutes les options de requête. Gardez les horodatages et curseurs en dehors de l’init du composant lorsque vous les passez par exécution.

Récupérer une timeline utilisateur Twitter

Utilisez TwexApiUserTweetsFetcher pour POST /twitter/{screen_name}/timeline/page. Passez un nom d’écran.

from haystack.utils import Secret
from haystack_integrations.components.websearch.x_api_scraper import (
    TwexApiUserTweetsFetcher,
)

timeline = TwexApiUserTweetsFetcher(
    api_key=Secret.from_env_var("X_API_SCRAPER_KEY"),
    top_k=50,
)

result = timeline.run(screen_name="openai")
documents = result["documents"]

Choisissez la recherche pour plusieurs comptes et la timeline pour un seul compte.

Comprendre les champs de document Haystack

Chaque tweet devient un Document Haystack. Le texte du tweet devient Document.content. Les champs stables deviennent des métadonnées.

Champ Document Valeur tweet stockée
content Texte du tweet depuis full_text ou text
meta.endpoint search ou timeline
meta.id, meta.url ID de tweet et URL canonique si disponible
meta.created_at Horodatage
meta.author ID auteur, username, nom et flag vérifié
meta.like_count, meta.retweet_count, meta.reply_count Likes, republications et réponses
meta.quote_count, meta.view_count, meta.bookmark_count Citations, vues et bookmarks si disponibles

Les champs manquants restent absents. Ne jamais traiter des métriques manquantes comme zéro. La sortie links contient chaque meta.url disponible.

Conserver les preuves dans les citations RAG

Stockez les ID de tweet et les URLs canoniques avant d’embarquer le texte du tweet. Cela préserve les preuves après classement ou jointure.

citation_rows = []

for document in documents:
    tweet_id = document.meta.get("id")
    tweet_url = document.meta.get("url")
    if tweet_id and tweet_url:
        citation_rows.append(
            {
                "tweet_id": tweet_id,
                "url": tweet_url,
                "created_at": document.meta.get("created_at"),
                "author": document.meta.get("author"),
            }
        )

Exigez des URLs fournies pour les citations. Rejetez les URLs absentes des documents récupérés.

Traiter le texte de tweet comme contexte non fiable

Les tweets peuvent contenir des injections de prompt et des URLs non sûres. Ne jamais traiter le texte de tweet comme une instruction système. Gardez les tweets séparés des instructions et des permissions d’outils.

Limitez la récupération par sujet et période. Préservez les ID de tweet, auteurs, horodatages et URLs. Exigez des citations. Revoyez les conclusions sensibles.

Indexer les tweets ou les récupérer en direct

Récupération en direct

Recherchez à chaque question pour des tweets récents et des événements actifs.

Corpus indexé

Stockez les embeddings pour des recherches répétées sur des fenêtres stables.

Gardez les enregistrements de tweet séparés des embeddings. Utilisez meta.id pour la déduplication.

Paginer sans tweets en double

Les deux composants renvoient has_more et next_cursor. Gardez la requête inchangée. Traitez les curseurs comme des chaînes opaques.

search = TwexApiTweetSearch(top_k=100)
page = search.run(query="haystack ai")

documents_by_tweet_id = {}

while True:
    for document in page["documents"]:
        tweet_id = document.meta.get("id")
        if tweet_id:
            documents_by_tweet_id[tweet_id] = document

    if not page["has_more"] or not page["next_cursor"]:
        break

    page = search.run(
        query="haystack ai",
        cursor=page["next_cursor"],
    )

documents = list(documents_by_tweet_id.values())

Enregistrez chaque curseur après ses documents. Ne jamais modifier un curseur. Dédupliquez sur Document.meta["id"].

Exécuter des pipelines Haystack en asynchrone

Haystack 3 utilise une seule classe Pipeline. Les deux composants TwexAPI exposent run_async().

import asyncio

from haystack import Pipeline
from haystack_integrations.components.websearch.x_api_scraper import TwexApiTweetSearch


async def search_tweets():
    pipeline = Pipeline()
    pipeline.add_component(
        "twitter_search",
        TwexApiTweetSearch(top_k=25),
    )
    return await pipeline.run_async(
        {"twitter_search": {"query": "haystack agents"}}
    )


result = asyncio.run(search_tweets())

Utilisez les exécutions async dans les serveurs web. Utilisez les exécutions sync pour les scripts et les tâches planifiées.

Gérer les erreurs

L’intégration remonte les erreurs HTTP du client TwexAPI. Branchez sur le statut avant de réessayer.

Statut Signification Action
400 Requête invalide Corrigez. Ne pas réessayer sans modification.
401 Clé API invalide Ajoutez une clé API valide.
403 Accès refusé Vérifiez l’accès au compte et les crédits.
429 Limite de débit dépassée Ralentissez avant de réessayer.
5xx Erreur serveur transitoire Réessayez avec backoff borné.

Enregistrez les codes de statut, jamais les identifiants. Limitez les retries pour éviter des boucles d’agent non bornées.

Composant Haystack ou API REST directe

Votre pipeline renvoie déjà des objets Document ? Ajoutez ces composants directement. Ils normalisent le texte de tweet, les métadonnées, les URLs et la pagination.

Utilisez les routes REST TwexAPI directes ou le SDK Python pour les abonnés, following, réponses, citations, listes, communautés, médias, tendances et écritures approuvées.

Les deux approches utilisent les mêmes contrats TwexAPI. Les composants ne supportent que la recherche de tweets et les timelines utilisateur.

Alternative de handoff MCP

Lorsqu’un agent découvre d’abord les endpoints, utilisez Twexapi MCP pour la collecte et convertissez les lignes en objets Haystack Document manuellement. Préférez les composants Haystack lorsque le pipeline s’exécute déjà dans Haystack et que vous voulez une pagination typée sans découverte par agent.

Source et contrats

Cette page vous a-t-elle été utile ?