develop-ai-functions-example
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseAI Functions Examples
AI Functions 示例
The directory contains scripts for validating, testing, and iterating on AI SDK functions across providers.
examples/ai-functions/examples/ai-functions/Example Categories
示例分类
Examples are organized by AI SDK function in :
examples/ai-functions/src/| Directory | Purpose |
|---|---|
| Non-streaming text generation with |
| Streaming text generation with |
| Structured output generation with |
| Streaming structured output with |
| |
| Single embedding generation with |
| Batch embedding generation with |
| Image generation with |
| Text-to-speech with |
| Audio transcription with |
| Document reranking with |
| Custom middleware implementations |
| Provider registry setup and usage |
| OpenTelemetry integration |
| Multi-component examples (agents, routers) |
| Shared utilities (not examples) |
| Reusable tool definitions |
示例在中按AI SDK功能进行组织:
examples/ai-functions/src/| 目录 | 用途 |
|---|---|
| 使用 |
| 使用 |
| 使用 |
| 使用 |
| 用于智能体工作流的 |
| 使用 |
| 使用 |
| 使用 |
| 使用 |
| 使用 |
| 使用 |
| 自定义中间件实现 |
| 供应商注册设置与使用 |
| OpenTelemetry集成 |
| 多组件示例(智能体、路由器) |
| 共享工具库(非示例) |
| 可复用工具定义 |
File Naming Convention
文件命名规范
Examples follow the pattern:
{provider}-{feature}.ts| Pattern | Example | Description |
|---|---|---|
| | Basic provider usage |
| | Specific feature |
| | Provider with sub-provider |
| | Sub-provider with feature |
示例遵循以下命名模式:
{provider}-{feature}.ts| 命名模式 | 示例 | 描述 |
|---|---|---|
| | 供应商基础用法 |
| | 特定功能演示 |
| | 包含子供应商的用法 |
| | 子供应商的特定功能演示 |
Example Structure
示例结构
All examples use the wrapper from which:
run()lib/run.ts- Loads environment variables from
.env - Provides error handling with detailed API error logging
所有示例均使用中的包装器,该包装器:
lib/run.tsrun()- 从加载环境变量
.env - 提供带有详细API错误日志的错误处理
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);
});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 });
});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));
});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);
});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 directory:
examples/ai-functionsbash
pnpm tsx src/generate-text/openai.ts
pnpm tsx src/stream-text/openai-tool-call.ts
pnpm tsx src/agent/openai-generate.ts在目录下执行以下命令:
examples/ai-functionsbash
pnpm tsx src/generate-text/openai.ts
pnpm tsx src/stream-text/openai-tool-call.ts
pnpm tsx src/agent/openai-generate.tsWhen to Write Examples
编写示例的场景
Write examples when:
-
Adding a new provider: Create basic examples for each supported API (,
generateText,streamText, etc.)generateObject -
Implementing a new feature: Demonstrate the feature with at least one provider example
-
Reproducing a bug: Create an example that shows the issue for debugging
-
Adding provider-specific options: Show how to usefor provider-specific settings
providerOptions -
Creating test fixtures: Use examples to generate API response fixtures (seeskill)
capture-api-response-test-fixture
在以下场景中编写示例:
-
添加新供应商:为每个支持的API创建基础示例(、
generateText、streamText等)generateObject -
实现新功能:至少使用一个供应商示例来演示该功能
-
复现Bug:创建示例以展示问题用于调试
-
添加供应商特定选项:展示如何使用设置供应商特定配置
providerOptions -
创建测试夹具:使用示例生成API响应夹具(参考技能)
capture-api-response-test-fixture
Utility Helpers
工具助手
The directory contains shared utilities:
lib/| File | Purpose |
|---|---|
| Error-handling wrapper with |
| Clean object printing (removes undefined values) |
| Colored streaming output for tool calls, reasoning, text |
| Save streaming chunks for test fixtures |
| Display images in terminal |
| Save audio files to disk |
lib/| 文件 | 用途 |
|---|---|
| 带有.env加载的错误处理包装器 |
| 简洁的对象打印(移除undefined值) |
| 用于工具调用、推理过程和文本的彩色流式输出 |
| 保存流式数据块用于测试夹具 |
| 在终端中显示图像 |
| 将音频文件保存到磁盘 |
Using print utilities
使用打印工具
typescript
import { print } from '../lib/print';
// Pretty print objects without undefined values
print('Result:', result);
print('Usage:', result.usage, { depth: 2 });typescript
import { print } from '../lib/print';
// 优雅打印对象,自动移除undefined值
print('Result:', result);
print('Usage:', result.usage, { depth: 2 });Using printFullStream
使用printFullStream
typescript
import { printFullStream } from '../lib/print-full-stream';
const result = streamText({ ... });
await printFullStream({ result }); // Colored output for text, tool calls, reasoningtypescript
import { printFullStream } from '../lib/print-full-stream';
const result = streamText({ ... });
await printFullStream({ result }); // 文本、工具调用、推理过程的彩色输出Reusable Tools
可复用工具
The directory contains reusable tool definitions:
tools/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?',
});tools/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
—
-
Keep examples focused: Each example should demonstrate one feature or use case
-
Use descriptive prompts: Make it clear what the example is testing
-
Handle errors gracefully: Thewrapper handles this automatically
run() -
Use realistic model IDs: Use actual model IDs that work with the provider
-
Add comments for complex logic: Explain non-obvious code patterns
-
Reuse tools when appropriate: Useor create new reusable tools in
weatherTooltools/
—