实战教程:用AI SDK + Open Responses API打造你的新时代AI智能体

20 阅读6分钟

前言

大家好,我是倔强青铜三。欢迎关注我,微信公众号:倔强青铜三。欢迎点赞、收藏、关注,一键三连!!!

开始使用 OpenAI Responses API

随着 OpenAI Responses API 的发布,现在正是开始构建 AI 应用的最佳时机,特别是那些需要深入理解世界知识的应用。

如果你还不知道什么是OpenAI Responses API,可以阅读我之前写的一篇介绍文章2026年AI开发新标准来了!Chat Completion已过时,Open Responses横空出世了解更多详情!

此外,我已经弄了一个Open Responses 中文镜像站点openresponses-cn.top,把Open Responses文档进行了中文翻译,方便大家学习!

AI SDK 是一个强大的 TypeScript 工具包,可帮助开发者使用大型语言模型(LLM)构建 AI 应用,同时支持 React、Next.js、Vue、Svelte、Node.js 等热门框架,了解更多AI SDK的用法可以访问官网 ai-sdk.dev/。

OpenAI 最近发布了 OpenAI Responses API,这是在 OpenAI 平台上构建应用的一种全新方式。新 API 提供了持久化聊天历史、用于增强 LLM 回答准确性的网络搜索工具、用于查找相关文件的文件搜索工具,以及用于构建能够与计算机交互和操作的 Agent 的计算机使用工具。让我们探索如何使用 AI SDK 来使用 OpenAI Responses API

AI SDK 入门指南

AI SDK 是专为帮助开发者使用 React、Next.js、Vue、Svelte、Node.js 等框架构建 AI 驱动应用而设计的 TypeScript 工具包。将 LLM 集成到应用中既复杂,又严重依赖于你使用的特定模型提供商。

AI SDK 抽象了不同模型提供商之间的差异,消除了构建聊天机器人的样板代码,并允许你超越文本输出,生成丰富、交互式的组件。

AI SDK 的核心是 AI SDK Core,它提供统一的 API 来调用任何 LLM。下面的代码片段就是使用 AI SDK 通过新的 Responses API 调用 GPT-4o 所需的全部代码:

import { generateText } from 'ai';
import { openai } from '@ai-sdk/openai';

const { text } = await generateText({
  model: openai.responses('gpt-4o'),
  prompt: '解释量子纠缠的概念。',
});

生成结构化数据

虽然文本生成很有用,但你可能希望生成结构化的 JSON 数据。例如,你可能希望从文本中提取信息、分类数据或生成合成数据。AI SDK Core 提供了两个函数(generateObjectstreamObject)来生成结构化数据,允许你将模型输出限制为特定模式。

import { generateObject } from 'ai';
import { openai } from '@ai-sdk/openai';
import { z } from 'zod';

const { object } = await generateObject({
  model: openai.responses('gpt-4o'),
  schema: z.object({
    recipe: z.object({
      name: z.string(),
      ingredients: z.array(z.object({ name: z.string(), amount: z.string() })),
      steps: z.array(z.string()),
    }),
  }),
  prompt: '生成一个千层面食谱。',
});

此代码片段将生成一个符合指定 zod 模式的类型安全食谱。

使用 AI SDK 的工具

Responses API 原生支持工具调用,允许其与外部系统交互并执行特定任务。以下是使用 AI SDK 进行工具调用的示例:

import { generateText, tool } from 'ai';
import { openai } from '@ai-sdk/openai';
import { z } from 'zod';

const { text } = await generateText({
  model: openai.responses('gpt-4o'),
  prompt: '今天旧金山的天气怎么样?',
  tools: {
    getWeather: tool({
      description: '获取某个地点的天气',
      inputSchema: z.object({
        location: z.string().describe('要获取天气的地点'),
      }),
      execute: async ({ location }) => ({
        location,
        temperature: 72 + Math.floor(Math.random() * 21) - 10,
      }),
    }),
  },
  stopWhen: stepCountIs(5), // 启用多步骤'Agent' LLM 调用
});

此示例演示了 stopWhen 如何将单个 LLM 调用转换为 Agent。stopWhen: stepCountIs(5) 参数允许模型自主调用工具、分析结果,并根据需要进行额外的工具调用——这将原本简单的一次性完成转变为智能 Agent,可以将多个操作链接在一起以完成复杂任务。

网络搜索工具

Responses API 引入了一个用于增强回答准确性的内置工具,称为 webSearch。使用此工具,模型可以访问互联网以查找与其回答相关的信息。

import { openai } from '@ai-sdk/openai';
import { generateText } from 'ai';

const result = await generateText({
  model: openai.responses('gpt-4o-mini'),
  prompt: '上周旧金山发生了什么?',
  tools: {
    web_search_preview: openai.tools.webSearchPreview(),
  },
});

console.log(result.text);
console.log(result.sources);

webSearch 工具还允许你指定特定于查询的元数据,可用于提高搜索结果的质量。

import { generateText } from 'ai';

const result = await generateText({
  model: openai.responses('gpt-4o-mini'),
  prompt: '上周旧金山发生了什么?',
  tools: {
    web_search_preview: openai.tools.webSearchPreview({
      searchContextSize: 'high',
      userLocation: {
        type: 'approximate',
        city: 'San Francisco',
        region: 'California',
      },
    }),
  },
});

console.log(result.text);
console.log(result.sources);

MCP 工具

Responses API 还支持连接到模型上下文协议(MCP)服务器。这允许模型调用远程 MCP 服务器或服务连接器暴露的工具。

import { openai } from '@ai-sdk/openai';
import { generateText } from 'ai';

const result = await generateText({
  model: openai.responses('gpt-5-mini'),
  prompt: '在网上搜索最新的纽约市长选举结果',
  tools: {
    mcp: openai.tools.mcp({
      serverLabel: 'web-search',
      serverUrl: 'https://mcp.exa.ai/mcp',
      serverDescription: '面向 AI Agent 的网络搜索 API',
    }),
  },
});

console.log(result.text);

有关配置 MCP 工具的更多详细信息,包括身份验证、工具过滤和连接器支持,请参阅 OpenAI 提供商文档。

使用持久化功能

使用 OpenAI Responses API,你可以跨请求在 OpenAI 端持久化聊天历史。这允许你仅发送用户的最后一条消息,OpenAI 即可访问整个聊天历史。

有两种选项可用于使用持久化功能:

使用 previousResponseId

import { openai } from '@ai-sdk/openai';
import { generateText } from 'ai';

const result1 = await generateText({
  model: openai.responses('gpt-4o-mini'),
  prompt: '发明一个新节日并描述其传统。',
});

const result2 = await generateText({
  model: openai.responses('gpt-4o-mini'),
  prompt: '用两句话总结',
  providerOptions: {
    openai: {
      previousResponseId: result1.providerMetadata?.openai.responseId as string,
    },
  },
});

使用对话

你可以使用对话 API 来创建对话。

创建对话后,你可以继续它:

import { openai } from '@ai-sdk/openai';
import { generateText } from 'ai';

const result = await generateText({
  model: openai.responses('gpt-4o-mini'),
  prompt: '用两句话总结',
  providerOptions: {
    openai: {
      // 通过 OpenAI API 创建的对话 ID 用于继续
      conversation: 'conv_123',
    },
  },
});

从 Completions API 迁移

从 OpenAI Completions API(通过 AI SDK)迁移到新的 OpenAI Responses API 非常简单。要迁移,只需将提供商实例从 openai(modelId) 更改为 openai.responses(modelId)

import { generateText } from 'ai';
import { openai } from '@ai-sdk/openai';

// Completions API
const { text } = await generateText({
  model: openai('gpt-4o'),
  prompt: '解释量子纠缠的概念。',
});

// Responses API
const { text } = await generateText({
  model: openai.responses('gpt-4o'),
  prompt: '解释量子纠缠的概念。',
});

使用 Responses API 时,之前在模型提供商实例上指定的特定于提供商的选项现在已移至 providerOptions 对象:

import { generateText } from 'ai';
import { openai } from '@ai-sdk/openai';

// Completions API
const { text } = await generateText({
  model: openai('gpt-4o'),
  prompt: '解释量子纠缠的概念。',
  providerOptions: {
    openai: {
      parallelToolCalls: false,
    },
  },
});

// Responses API
const { text } = await generateText({
  model: openai.responses('gpt-4o'),
  prompt: '解释量子纠缠的概念。',
  providerOptions: {
    openai: {
      parallelToolCalls: false,
    },
  },
});

开始使用

准备好开始了吗?以下是如何开始的方法:

  1. 访问 ai-sdk.dev/docs 探索文档,了解 AI SDK 的全部功能。
  2. 查看 ai-sdk.dev/examples 上的实用示例,看看 SDK 的实际应用,并为你的项目获得灵感。
  3. 通过 ai-sdk.dev/docs/guides 上的高级指南深入了解检索增强生成(RAG)和多模态聊天等主题。
  4. 查看 vercel.com/templates?type=ai 上即用型 AI 模板。

我已经弄了一个Open Responses 中文镜像站点openresponses-cn.top,把Open Responses文档进行了中文翻译,方便大家学习!

欢迎关注我的微信公众号:倔强青铜三,获取更多 AI 自动化和开发技巧分享!