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 zodimport { 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
daysen 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 de0.5antes de que lo vea el modelo si tus prompts necesitan sólo lo que claramente trata del tema.