未命名

安装

依赖

1
2
3
# 安装依赖
bun add ai @ai-sdk/react zod
bun add @ai-sdk/openai-compatible @ai-sdk/deepseek

@ai-sdk/openai-compatible基本上可以调用所有服务商,然后openai自己的还改版了!

配置环境变量 .env.local

1
2
AI_GATEWAY_API_KEY=xxxxxxxxx
AI_IFLOW_API_KEY=xxxxxx

创建自定义的openai格式的服务提供商

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import { streamText, UIMessage, convertToModelMessages } from 'ai';
import { createOpenAICompatible} from "@ai-sdk/openai-compatible";

// Create an OpenAI instance,然后自定义的provider名称是iflow_openai
const iflow_openai = createOpenAICompatible({
// 从环境变量里面读取IFLOW_API_KEY和IFLOW_API_URL
apiKey: process.env.IFLOW_API_KEY,
baseURL: process.env.IFLOW_API_URL || '',
name: 'iflow_openai',
});

export async function POST(req: Request) {
const { messages }: { messages: UIMessage[] } = await req.json();
const result = streamText({
// 使用自定义的provider
model: iflow_openai(process.env.IFLOW_API_MODEL as string || "qwen3-max"),
messages: await convertToModelMessages(messages),
});
return result.toUIMessageStreamResponse();
}

使用shadcn

安装,就是进行初始化

1
bunx --bun shadcn@latest init
--bun参数讲解

bunx –bun 中添加 –bun 的目的是为了强制使用 Bun 运行时来执行一个可执行文件。

详细解释如下:

bunx 是 Bun 运行时中的一个命令行工具,类似于 npx,用于执行 npm 包中的可执行文件(CLI 工具)。
默认情况下,bunx 会遵循可执行文件(例如 JavaScript 文件)中指定的 shebang(比如 #!/usr/bin/env node)。这意味着如果 shebang 指向 Node.js,bunx 会使用 Node.js 来运行它。
当你添加 –bun 标志时,你就是在明确告诉 bunx,即使可执行文件内部指定了其他运行时(如 Node.js),也要忽略它,并强制使用 Bun 运行时来执行该文件。
重要提示: –bun 标志必须放在可执行文件名称之前,例如:bunx –bun &lt可执行文件名&gt。

手写Tool Calling

AI SDK Core: Tool Calling

在返回ai内容的streamTextgenerateText的参数中添加工具

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
tools: {
// 定义一个工具,工具名称叫weather_iflow
weather_iflow: tool({
description: "获取一个位置的天气。", // 对于工具的描述
inputSchema: z.object({
location: z.string().describe("要获取天气的位置"),
}),
// 这是一个异步函数,它会接受来自工具调用的输入,返回的是一个RESULT泛型
execute: async ({ location }) => ({
location,
weather: "晴天",
})
})
},
// 设置最大步数为5,超过5步就停止,无论是否完成
stopWhen: stepCountIs(5),