# Develop Ai Functions Example > Desarrolla ejemplos para las funciones del AI SDK; úsalo al crear, ejecutar o modificar ejemplos bajo examples/ai-functions/src para validar soporte de providers o demostrar features. Fuente: https://skillsagentes.com/skills/vercel/ai/develop-ai-functions-example Markdown: https://skillsagentes.com/skills/vercel/ai/develop-ai-functions-example.md Repositorio: https://github.com/vercel/ai Autor: vercel Licencia: NOASSERTION Actualizado: el mes pasado Coste de contexto: 49 tok instalada, 2k tok al activarse, 2k tok con todos los archivos del bundle Bundle: 1 archivo, 8 KB Permisos que pide: ninguno declarado ## Instalación Un skill son archivos markdown: los mismos archivos valen para cualquier agente y lo único que cambia es el directorio de destino, es decir la bandera `--agent`. Añade `-g` para instalarlo en todos los proyectos de la máquina. ```bash # Claude Code npx -y skills add vercel/ai --skill develop-ai-functions-example --agent claude-code # Cursor npx -y skills add vercel/ai --skill develop-ai-functions-example --agent cursor # Codex npx -y skills add vercel/ai --skill develop-ai-functions-example --agent codex # Gemini CLI npx -y skills add vercel/ai --skill develop-ai-functions-example --agent gemini # Windsurf npx -y skills add vercel/ai --skill develop-ai-functions-example --agent windsurf # Cline npx -y skills add vercel/ai --skill develop-ai-functions-example --agent cline ``` ## Qué hace - Define convenciones de nomenclatura y estructura de carpetas para ejemplos en examples/ai-functions/src - Provee plantillas para generateText, streamText, tool calling y generateObject usando el wrapper run() de lib/run.ts - Documenta utilidades compartidas como print.ts, print-full-stream.ts, save-raw-chunks.ts y save-audio.ts - Explica cuándo crear ejemplos: nuevo provider, nueva feature, reproducir bug o generar fixtures de test ## Cuándo usarla - Al crear, ejecutar o modificar ejemplos bajo examples/ai-functions/src - Al validar soporte de un provider - Al demostrar una feature del AI SDK - Al crear fixtures de test para respuestas de API ## Qué la activa - "Crea un ejemplo de generateText para el provider openai" - "Añade un ejemplo de streaming con tool calls en stream-text" - "Genera un fixture de test capturando la respuesta de la API de Anthropic" - "Crea un ejemplo de generateObject con un schema de zod" ## Antes de instalar - Requiere pnpm y tsx, y variables de entorno cargadas desde .env para las llamadas a los providers. - Necesita en el PATH: pnpm ## Archivos - SKILL.md — 8 KB ## SKILL.md Reproducido tal cual desde vercel/ai bajo NOASSERTION. Esta sección es el documento original y está en inglés. ## AI Functions Examples The `examples/ai-functions/` directory contains scripts for validating, testing, and iterating on AI SDK functions across providers. ## Example Categories Examples are organized by AI SDK function in `examples/ai-functions/src/`: | Directory | Purpose | | ------------------ | ---------------------------------------------------- | | `generate-text/` | Non-streaming text generation with `generateText()` | | `stream-text/` | Streaming text generation with `streamText()` | | `generate-object/` | Structured output generation with `generateObject()` | | `stream-object/` | Streaming structured output with `streamObject()` | | `agent/` | `ToolLoopAgent` examples for agentic workflows | | `embed/` | Single embedding generation with `embed()` | | `embed-many/` | Batch embedding generation with `embedMany()` | | `generate-image/` | Image generation with `generateImage()` | | `generate-speech/` | Text-to-speech with `generateSpeech()` | | `transcribe/` | Audio transcription with `transcribe()` | | `rerank/` | Document reranking with `rerank()` | | `middleware/` | Custom middleware implementations | | `registry/` | Provider registry setup and usage | | `telemetry/` | OpenTelemetry integration | | `complex/` | Multi-component examples (agents, routers) | | `lib/` | Shared utilities (not examples) | | `tools/` | Reusable tool definitions | ## File Naming Convention Group examples by function and provider. Name the entry example `basic.ts` and use descriptive `kebab-case.ts` names for additional examples: | Pattern | Example | Description | | --------------------------------------------------- | ------------------------------------------------------ | -------------------------- | | `//basic.ts` | `generate-text/openai/basic.ts` | Basic provider usage | | `//.ts` | `stream-text/openai/tool-call.ts` | Specific feature | | `//.ts` | `stream-text/amazon-bedrock/anthropic.ts` | Provider with sub-provider | | `//-.ts` | `stream-text/google/vertex-anthropic-cache-control.ts` | Sub-provider with feature | Do not create flat provider files such as `generate-text/openai.ts`. ## Example Structure All examples use the `run()` wrapper from `lib/run.ts` which: - Loads environment variables from `.env` - Provides error handling with detailed API error logging ### Basic Template ```typescript import { providerName } from '@ai-sdk/provider-name'; import { generateText } from 'ai'; import { run } from '../../lib/run'; run(async () => { const result = await generateText({ model: providerName('model-id'), prompt: 'Your prompt here.', }); console.log(result.text); console.log('Token usage:', result.usage); console.log('Finish reason:', result.finishReason); }); ``` ### Streaming Template ```typescript import { providerName } from '@ai-sdk/provider-name'; import { streamText } from 'ai'; import { printFullStream } from '../../lib/print-full-stream'; import { run } from '../../lib/run'; run(async () => { const result = streamText({ model: providerName('model-id'), prompt: 'Your prompt here.', }); await printFullStream({ result }); }); ``` ### Tool Calling Template ```typescript import { providerName } from '@ai-sdk/provider-name'; import { generateText, tool } from 'ai'; import { z } from 'zod'; import { run } from '../../lib/run'; run(async () => { const result = await generateText({ model: providerName('model-id'), tools: { myTool: tool({ description: 'Tool description', inputSchema: z.object({ param: z.string().describe('Parameter description'), }), execute: async ({ param }) => { return { result: `Processed: ${param}` }; }, }), }, prompt: 'Use the tool to...', }); console.log(JSON.stringify(result, null, 2)); }); ``` ### Structured Output Template ```typescript import { providerName } from '@ai-sdk/provider-name'; import { generateObject } from 'ai'; import { z } from 'zod'; import { run } from '../../lib/run'; run(async () => { const result = await generateObject({ model: providerName('model-id'), schema: z.object({ name: z.string(), items: z.array(z.string()), }), prompt: 'Generate a...', }); console.log(JSON.stringify(result.object, null, 2)); console.log('Token usage:', result.usage); }); ``` ## Running Examples From the `examples/ai-functions` directory: ```bash pnpm tsx src/generate-text/openai/basic.ts pnpm tsx src/stream-text/openai/tool-call.ts pnpm tsx src/agent/openai/generate.ts ``` ## When to Write Examples Write examples when: 1. **Adding a new provider**: Create basic examples for each supported API (`generateText`, `streamText`, `generateObject`, etc.) 2. **Implementing a new feature**: Demonstrate the feature with at least one provider example 3. **Reproducing a bug**: Create an example that shows the issue for debugging 4. **Adding provider-specific options**: Show how to use `providerOptions` for provider-specific settings 5. **Creating test fixtures**: Use examples to generate API response fixtures (see `capture-api-response-test-fixture` skill) ## Utility Helpers The `lib/` directory contains shared utilities: | File | Purpose | | ---------------------- | -------------------------------------------------------- | | `run.ts` | Error-handling wrapper with `.env` loading | | `print.ts` | Clean object printing (removes undefined values) | | `print-full-stream.ts` | Colored streaming output for tool calls, reasoning, text | | `save-raw-chunks.ts` | Save streaming chunks for test fixtures | | `present-image.ts` | Display images in terminal | | `save-audio.ts` | Save audio files to disk | ### Using print utilities ```typescript import { print } from '../lib/print'; // Pretty print objects without undefined values print('Result:', result); print('Usage:', result.usage, { depth: 2 }); ``` ### Using printFullStream ```typescript import { printFullStream } from '../lib/print-full-stream'; const result = streamText({ ... }); await printFullStream({ result }); // Colored output for text, tool calls, reasoning ``` ## Reusable Tools The `tools/` directory contains reusable tool definitions: ```typescript import { weatherTool } from '../tools/weather-tool'; const result = await generateText({ model: openai('gpt-4o'), tools: { weather: weatherTool }, prompt: 'What is the weather in San Francisco?', }); ``` ## Best Practices 1. **Keep examples focused**: Each example should demonstrate one feature or use case 2. **Use descriptive prompts**: Make it clear what the example is testing 3. **Handle errors gracefully**: The `run()` wrapper handles this automatically 4. **Use realistic model IDs**: Use actual model IDs that work with the provider 5. **Add comments for complex logic**: Explain non-obvious code patterns 6. **Reuse tools when appropriate**: Use `weatherTool` or create new reusable tools in `tools/` ## Dónde encaja - Categoría: [Herramientas para desarrolladores](https://skillsagentes.com/categorias/herramientas-desarrollo.md) — Skills que cambian cómo tu agente escribe, revisa y despliega código. - Creador: [vercel](https://skillsagentes.com/creators/vercel.md) — 84 skills en el directorio - [Todas las skills](https://skillsagentes.com/skills.md) - [Ranking de instalaciones](https://skillsagentes.com/ranking.md) ## Otras skills del mismo repositorio - [Update Harness Dependencies](https://skillsagentes.com/skills/vercel/ai/update-harness-dependencies.md): Actualiza las dependencias del SDK principal de los paquetes harness. Úsalo cuando se solicite actualizar los SDKs de harness o las dependencias del adaptador harness. - [Add Provider Package](https://skillsagentes.com/skills/vercel/ai/add-provider-package.md): Guía para añadir paquetes de proveedores de IA de primera parte al AI SDK. Úsala al crear un paquete de proveedor bajo packages/ para integrar un servicio de IA externo. - [Capture Api Response Test Fixture](https://skillsagentes.com/skills/vercel/ai/capture-api-response-test-fixture.md): Captura fixtures de test con las respuestas reales de las APIs de los proveedores. - [Add Harness Package](https://skillsagentes.com/skills/vercel/ai/add-harness-package.md): Guía para añadir nuevos paquetes harness de AI SDK. Úsala al crear un paquete @ai-sdk/harness- que adapte un runtime de coding-agent a HarnessV1. - [Update Provider Models](https://skillsagentes.com/skills/vercel/ai/update-provider-models.md): Añade nuevos IDs de modelo o elimina IDs obsoletos en los proveedores existentes del AI SDK, incluyendo tipos, docs, ejemplos y tests. ## Skills relacionadas - [Add Function Examples](https://skillsagentes.com/skills/vercel/ai/add-function-examples.md): Guía para añadir nuevos ejemplos de funciones de IA, usados para probar características específicas contra las APIs reales de los proveedores. - [Add Harness Package](https://skillsagentes.com/skills/vercel/ai/add-harness-package.md): Guía para añadir nuevos paquetes harness de AI SDK. Úsala al crear un paquete @ai-sdk/harness- que adapte un runtime de coding-agent a HarnessV1. - [Add Provider Package](https://skillsagentes.com/skills/vercel/ai/add-provider-package.md): Guía para añadir paquetes de proveedores de IA de primera parte al AI SDK. Úsala al crear un paquete de proveedor bajo packages/ para integrar un servicio de IA externo. - [List Npm Package Content](https://skillsagentes.com/skills/vercel/ai/list-npm-package-content.md): Lista el contenido de un tarball de paquete npm antes de publicarlo, para ver qué archivos incluye, verificar el contenido o depurar problemas de npm publish. - [Major Version Mode](https://skillsagentes.com/skills/vercel/ai/major-version-mode.md): Contexto para trabajar en la próxima versión mayor del AI SDK. Úsalo solo si el usuario lo invoca explícitamente, por ejemplo con '/major-version-mode'; no se activa de forma autónoma. --- Skills Agentes · [Índice de páginas en markdown](https://skillsagentes.com/sitemap.md) · [Inicio](https://skillsagentes.com/index.md)