文档OriHub
AI SDK
AI SDK 是 Vercel 做的跨厂商统一接口:一套代码,OpenAI、Claude、Gemini、DeepSeek 的模型都能调。本站的模型都是 OpenAI 兼容协议,所以把 provider 的 baseURL 指过来就能用。
第一步:安装 AI SDK
npm install ai @ai-sdk/openai
第二步:配置 provider
export ORIHUB_API_KEY=sk-xxxxxxxx
export ORIHUB_BASE_URL=https://api.lk888.ai/v1
// lib/orihub.ts
import { createOpenAI } from '@ai-sdk/openai';
export const orihub = createOpenAI({
name: 'orihub',
baseURL: process.env.ORIHUB_BASE_URL!,
apiKey: process.env.ORIHUB_API_KEY!,
});
第三步:调用
import { generateText } from 'ai';
import { orihub } from '@/lib/orihub';
const { text } = await generateText({
model: orihub.chat('deepseek-v4.1-flash'),
prompt: '介绍一下你自己',
});
第四步:特别注意
- 显式用
.chat()。AI SDK 5 以后orihub('模型名')默认走 Responses 端点,而本平台的 Responses 是无状态透传,previous_response_id不保证能续上。要稳,就写.chat(...)走 Chat Completions baseURL要带/v1—— 端点是/v1/chat/completions- 密钥放环境变量,别写进代码
- 流式时
usage平台已经自动带上(stream_options.include_usage平台会注入),不用自己加 - 想用通用 provider 包也行:
npm install @ai-sdk/openai-compatible,createOpenAICompatible({ name, baseURL, apiKey }),模型用.chatModel('模型名')
支持的模型
走 OpenAI 兼容协议的那 56 个模型都能用 —— 10 家厂商,协议一样、代码不用改。完整的在模型列表。
示例代码
流式响应
import { streamText } from 'ai';
import { orihub } from '@/lib/orihub';
const result = streamText({
model: orihub.chat('deepseek-v4.1-flash'),
prompt: '介绍一下你自己',
});
for await (const text of result.textStream) {
process.stdout.write(text);
}
工具调用
import { generateText, tool } from 'ai';
import { z } from 'zod';
import { orihub } from '@/lib/orihub';
const { text, toolCalls } = await generateText({
model: orihub.chat('deepseek-v4.1-flash'),
tools: {
weather: tool({
description: '查某个城市的天气',
inputSchema: z.object({ city: z.string().describe('城市名') }),
execute: async ({ city }) => ({ city, weather: '晴,24℃' }),
}),
},
prompt: '杭州今天天气怎么样?',
});
Next.js 里直接流给前端
// app/api/chat/route.ts
import { streamText } from 'ai';
import { orihub } from '@/lib/orihub';
export async function POST(req: Request) {
const { messages } = await req.json();
return streamText({
model: orihub.chat('deepseek-v4.1-flash'),
messages,
}).toUIMessageStreamResponse();
}