知识库章节 ▾

工具

工具

Vercel AI SDK + Gonka AI — 低成本的 TypeScript AI 应用程序

Vercel AI SDK 是最受欢迎的 SDK,用于在 TypeScript 和 JavaScript 中创建 AI 应用程序。统一的 generateTextstreamText API,流式传输到 UI,原生 tool calling,用于 Next.js App Router 的现成助手——所有这些都是 Web 中聊天机器人、代理和 RAG 管道所需的一切。

问题与任何 LLM 应用程序相同——提供商的价格。流式聊天界面在每条消息上发送对话历史,代理通过数十个步骤传递上下文。按照 Anthropic(3-15 美元/1M)和 OpenAI(2.5-10 美元/1M)的价格,即使是一个适度的 pet-project 在生产环境中也会变成每月数百美元的账单。

JoinGonka Gateway 是一个建立在 Gonka 去中心化网络之上的 OpenAI 兼容端点。Vercel AI SDK 将其连接为任何 OpenAI 兼容提供商——无需分支,无需自己的适配器。相同的 Qwen3-235B 模型,相同的 streamText,但每 1M 输入令牌仅需 0.0005 美元——便宜数百甚至数千倍。

第 1 步:获取密钥并连接提供商

JoinGonka API 密钥:在 gate.joingonka.ai/register 注册——开始时我们提供 10M 免费令牌。在 Dashboard 中创建以 jg- 为前缀的密钥。

安装包。对于自定义 OpenAI 兼容端点,Vercel AI SDK 建议使用 @ai-sdk/openai-compatible 提供商:

npm install ai @ai-sdk/openai-compatible

最简连接——通过 createOpenAICompatible 创建提供商实例并调用 generateText

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

const gonka = createOpenAICompatible({
  name: 'gonka',
  baseURL: 'https://gate.joingonka.ai/v1',
  apiKey: process.env.GONKA_API_KEY, // jg-你的密钥
});

const { text } = await generateText({
  model: gonka('Qwen/Qwen3-235B-A22B-Instruct-2507-FP8'),
  prompt: '解释什么是去中心化推理网络',
});

console.log(text);

apiKey 参数会自动添加 Authorization: Bearer jg-你的密钥 头——无需单独设置。将密钥存储在环境变量 GONKA_API_KEY 中(例如,在 .env.local 中),而不是代码中。

替代方案——使用 createOpenAI({ baseURL, apiKey }) 工厂函数的 @ai-sdk/openai 包。两种方法都可行;对于非 OpenAI 的端点,AI SDK 文档建议使用 @ai-sdk/openai-compatible——它不会带来多余的 OpenAI 特定假设。

第 2 步:流式传输和 Next.js 路由处理程序

Vercel AI SDK 的主要特点是流式响应。streamText 函数立即开始流式传输令牌,而 toUIMessageStreamResponse() 助手直接从 Next.js App Router 的路由处理程序返回准备好的流。

服务器端处理程序 app/api/chat/route.ts

import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
import { streamText, convertToModelMessages, type UIMessage } from 'ai';

const gonka = createOpenAICompatible({
  name: 'gonka',
  baseURL: 'https://gate.joingonka.ai/v1',
  apiKey: process.env.GONKA_API_KEY,
});

// 允许流式传输最多 30 秒
export const maxDuration = 30;

export async function POST(req: Request) {
  const { messages }: { messages: UIMessage[] } = await req.json();

  const result = streamText({
    model: gonka('Qwen/Qwen3-235B-A22B-Instruct-2507-FP8'),
    system: '你是一个有用的助手。简明扼要地回答问题。',
    messages: convertToModelMessages(messages),
    maxOutputTokens: 8192, // 通过 Gateway 的 Qwen3-235B 限制
  });

  return result.toUIMessageStreamResponse();
}

在客户端,连接 @ai-sdk/react 中的 useChat 钩子——它会自动访问 /api/chat 并渲染消息流。后端则与 Gonka 交互,而不是 OpenAI。

无 UI 脚本(Node,异步迭代器处理流):

import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
import { streamText } from 'ai';

const gonka = createOpenAICompatible({
  name: 'gonka',
  baseURL: 'https://gate.joingonka.ai/v1',
  apiKey: process.env.GONKA_API_KEY,
});

const result = streamText({
  model: gonka('Qwen/Qwen3-235B-A22B-Instruct-2507-FP8'),
  prompt: '写一首关于分布式计算的俳句',
});

for await (const chunk of result.textStream) {
  process.stdout.write(chunk);
}

模型参数。通过 Gateway 提供三种模型,所有模型的上下文均为 128K 令牌;输出令牌上限 (maxOutputTokens) 不同:

  • Qwen/Qwen3-235B-A22B-Instruct-2507-FP8 —— 默认,最多 8192 输出令牌;
  • moonshotai/Kimi-K2.6 —— 最多 3072 (Kimi K2.6);
  • MiniMaxAI/MiniMax-M2.7 —— 最多 4096 (MiniMax M2.7)。

如果未指定 maxOutputTokens,对于非流式请求,Gateway 默认返回最多 1500 令牌——对于流式聊天,最好明确指定值。

成本比较

Vercel AI SDK 通常用于交互式界面——聊天、代理、应用程序中的助手。每条消息都带历史对话,代理的每一步都带工具上下文。因此,实际成本不是按单个请求计算,而是按生产负载计算。我们来比较典型场景:

场景令牌数Anthropic / OpenAIJoinGonka Gonka
聊天中的一条消息~3K$0.01 — $0.05$0.000003
20 次回复的对话~150K$0.50 — $2.25$0.00015
RAG 回复(搜索 + 生成)~5K$0.015 — $0.05$0.000005
带 tool calling 的代理步骤~10K$0.03 — $0.10$0.00001
每天 10,000 个请求(生产)~50M$150 — $500$0.05

JoinGonka 的价格约为每 1M 输入令牌 0.0005 美元,输出成本大约是三倍。对于每天有数千个请求的应用程序来说,这在账单上是数百美元和几美分的区别。10M 免费令牌足以在项目投入生产之前完全运行和调试。

Tool calling 和代理

Vercel AI SDK 通过 tools 对象和 zod 模式声明性地描述工具。Qwen3-235B 支持原生 function calling,因此 AI SDK 在不解析文本响应的情况下获取结构化的 tool_calls。参数 stopWhen: stepCountIs(n) 允许连续多个步骤——模型调用工具,获取结果并继续。

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

const gonka = createOpenAICompatible({
  name: 'gonka',
  baseURL: 'https://gate.joingonka.ai/v1',
  apiKey: process.env.GONKA_API_KEY,
});

const { text } = await generateText({
  model: gonka('Qwen/Qwen3-235B-A22B-Instruct-2507-FP8'),
  stopWhen: stepCountIs(5),
  tools: {
    weather: tool({
      description: '查询城市天气',
      inputSchema: z.object({ city: z.string() }),
      execute: async ({ city }) => ({ city, tempC: 17 }),
    }),
  },
  prompt: '莫斯科天气如何?用一句话回答。',
});

console.log(text);

模型调用 weather 工具,获取结果并形成最终答案。整个循环通过 Gonka 成本约为 0.00001 美元,而 Anthropic 或 OpenAI 则为 0.03-0.10 美元。对于代理应用程序,其中用户的每个请求都会展开为 5-10 个步骤,生产环境的节省可达每月数千美元。

如果您正在使用 Python 构建 AI 应用程序,请参阅 LangChain 指南——它也采用相同的 OpenAI 兼容类方法。

Vercel AI SDK + Gonka = 低成本的生产就绪 TypeScript AI 应用程序。createOpenAICompatible 无需分叉即可连接 Gateway,generateText 和 streamText 照常工作,原生 tool calling 和 Next.js 路由处理程序——所有这些都只需每 1M 令牌 0.0005 美元,而不是 OpenAI 和 Anthropic 的 2.5-15 美元。

想了解更多?

探索其他章节或立即开始赚取 GNK。

获取免费的 10M 令牌 →