LlamaIndex

La búsqueda de noticias como herramienta para agentes y flujos de LlamaIndex.

Una herramienta sobre la API HTTP

Una herramienta de búsqueda de noticias es un pedido a nuestra API. Escríbela como una función con su docstring —el agente la lee para decidir cuándo llamarla— y envuélvela en un FunctionTool:

pip install llama-index httpx
import os
import httpx
from llama_index.core.agent.workflow import FunctionAgent
from llama_index.core.tools import FunctionTool
from llama_index.llms.openai import OpenAI


def search_news(query: str, days: int = 7) -> list[dict]:
    """Search recent news articles. Returns the title, URL, source, publication time
    and a relevance score (0-1) of each one."""
    res = httpx.post(
        "https://api.typesearch.ai/v1/search",
        headers={"Authorization": f"Bearer {os.environ['TYPESEARCH_API_KEY']}"},
        json={"query": query, "days": days, "mode": "fast", "max_results": 8},
        timeout=60,
    )
    res.raise_for_status()
    fields = ("title", "url", "source", "published_at", "score", "snippet")
    return [{k: r.get(k) for k in fields} for r in res.json()["results"]]


agent = FunctionAgent(
    tools=[FunctionTool.from_defaults(fn=search_news)],
    llm=OpenAI(model="gpt-4.1"),
    system_prompt="Responde con noticias recientes. Cita la fuente y el enlace de cada dato.",
)

response = await agent.run("¿Qué cambió esta semana con las regalías al litio en Chile?")

La búsqueda corre en modo fast, $1,40 cada 1.000 búsquedas. Cámbialo a "normal" para que los mejores resultados se lean antes de ordenarlos ($2,20); todos los parámetros están en la referencia de la API.

Como retriever

Para darle notas a un motor de consultas en vez de a un agente, convierte cada resultado en un Document, con su fragmento como texto y lo demás como metadatos:

from llama_index.core import Document

docs = [
    Document(text=r["snippet"] or r["title"], metadata={k: r[k] for k in ("title", "url", "source", "published_at")})
    for r in search_news("regalías al litio en Chile")
]

Devolvemos fragmentos breves, nunca páginas enteras. Para más texto sobre tu pregunta, agrega "highlights": true y usa el modo normal o deep: los mejores resultados vuelven con fragmentos textuales elegidos para tu consulta.

En esta página