AI SDK de Vercel

Una herramienta de búsqueda de noticias para generateText, streamText y agentes hechos con el AI SDK de Vercel.

Una herramienta sobre la API HTTP

Una herramienta de búsqueda de noticias es un pedido a nuestra API. Defínela con tool() y dásela a cualquier modelo:

npm install ai zod
news-search.ts
import { tool } from 'ai';
import { z } from 'zod';

type Result = { title: string; url: string; source: string | null; published_at: string | null; score: number; snippet: string | null };

export const newsSearch = tool({
  description:
    'Search recent news articles. Returns the title, URL, source, publication time and a relevance score (0–1) of each one.',
  inputSchema: z.object({
    query: z.string().describe('What to search for, in any language'),
    days: z.number().int().min(1).max(365).optional().describe('Only articles from the last N days'),
  }),
  execute: async ({ query, days }) => {
    const res = await fetch('https://api.typesearch.ai/v1/search', {
      method: 'POST',
      headers: {
        Authorization: `Bearer ${process.env.TYPESEARCH_API_KEY}`,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({ query, days, mode: 'fast', max_results: 8 }),
    });
    if (!res.ok) throw new Error(`typesearch ${res.status}: ${await res.text()}`);
    const { results } = (await res.json()) as { results: Result[] };
    // Sólo lo que el modelo necesita para responder y citar: menos tokens en su contexto.
    return results.map(({ title, url, source, published_at, score, snippet }) => ({ title, url, source, published_at, score, snippet }));
  },
});
import { generateText, stepCountIs } from 'ai';
import { newsSearch } from './news-search';

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4.5',
  tools: { newsSearch },
  stopWhen: stepCountIs(5),
  prompt: '¿Qué cambió esta semana con las regalías al litio en Chile? Cita las fuentes.',
});

streamText y los agentes reciben la misma herramienta. 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.

Consejos

  • Devuelve poco. Pásale al modelo los campos que va a citar, como arriba: una respuesta completa trae más de lo que necesita.
  • Deja que el modelo elija la ventana de tiempo. Con days en el esquema puede pedir las noticias de hoy o las del último mes, según la pregunta.
  • Pon un umbral en score. Es una probabilidad calibrada: descarta lo que esté por debajo de 0.5 antes de que lo vea el modelo si tus prompts necesitan sólo lo que claramente trata del tema.

En esta página