# Node.js 智能体（Vercel AI SDK）怎么把 TikTok、YouTube 数据做成工具？

> 用 Vercel AI SDK 的 tool() 和原生 fetch，把 TikTok 视频搜索和 YouTube 字幕接进 Node.js / TypeScript 智能体。代码、费用和注意事项。

网页版：https://okdata.online/zh/answers/node-agent-tiktok-youtube-tools/

**简短回答：**每个接口包成一个工具：zod 定义参数，execute 里发一次 fetch。模型选工具，你的代码调 okdata，再把精简后的 JSON 交回去。TikTok 搜索工具每次 $0.002，约 30 条视频；YouTube 字幕工具每个视频 $0.004。服务器上除了这次 HTTP 请求，什么都不用跑。

一个增长团队的 Next.js 后台里有个对话框，大家会问：这周 TikTok 上的创作者怎么聊我们这个品类？YouTube 上排名靠前的测评到底说了什么？要回答，智能体需要两个工具：一个搜 TikTok，一个读 YouTube 视频字幕。两个都只是一次 fetch，所以放在 Vercel 函数或任何 Node 18 以上的服务器里都能跑，不需要浏览器，也不需要抓取库。

## 工具代码

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

const API = 'https://api.okdata.online';
const headers = { Authorization: `Bearer ${process.env.OKDATA_API_KEY}` };

async function call(path: string, params: Record<string, string>) {
  const res = await fetch(`${API}${path}?${new URLSearchParams(params)}`, { headers });
  const body = await res.json();
  if (body.code !== 'ok') return { error: body.code, message: body.message, retry: body.retry };
  return body.data;
}

const tools = {
  searchTikTok: tool({
    description: 'Search public TikTok videos. One call returns one page of videos and is billed once.',
    inputSchema: z.object({
      query: z.string(),
      sort: z.enum(['relevance', 'latest', 'most_liked']).optional(),
    }),
    execute: ({ query, sort }) =>
      call('/v1/tiktok/videos/search', {
        query,
        ...(sort ? { sort } : {}),
        fields: 'id,url,text,published_at,metrics.views,metrics.likes,author.username',
      }),
  }),
  youtubeTranscript: tool({
    description: 'Plain-text transcript of one YouTube video, by its 11-character ID.',
    inputSchema: z.object({ id: z.string().length(11), lang: z.string().optional() }),
    execute: ({ id, lang }) =>
      call('/v1/youtube/videos/transcript/get', { id, ...(lang ? { lang } : {}), fields: 'text' }),
  }),
};

const { text } = await generateText({
  model: openai(process.env.OPENAI_MODEL ?? 'gpt-4.1-mini'),
  tools,
  stopWhen: stepCountIs(8),
  prompt: '这周 TikTok 创作者怎么聊升降桌？再读一个 YouTube 上排名靠前的测评。',
});
console.log(text);
```

字幕工具里的 `fields: 'text'` 会去掉带时间戳的分段，只留全文，做总结用这个就够了。模型换成 DeepSeek、通义千问等，改用对应的 provider 包即可。背后的接口是 [TikTok 视频搜索](/zh/apis/tiktok/videos/search/)和 [YouTube 视频字幕](/zh/apis/youtube/videos/transcript/get/)。

## 每个问题花多少

| 问题 | 调用次数 | 费用 |
|---|---|---|
| TikTok 搜 2 次 | 2 | $0.004 |
| 搜 2 次，再读 3 份字幕 | 5 | $0.016 |
| 上限：8 步全用来读字幕 | 8 | $0.032 |

## 注意事项

- 字幕接口要的是视频 ID，不是链接。告诉模型传 `v=` 或 `youtu.be/` 后面那 11 位。
- 部署在 Vercel 上的话，把这个路由的 `maxDuration` 调到 60 秒以上，别让平台偶尔的慢响应被你的函数先掐断。
- 没有字幕的视频会返回错误，不扣费。模型看到错误会自己换一个视频。
- 目前没有列出 TikTok 账号全部作品的接口，也没有 TikTok 热门话题标签的接口，用关键词或创作者名字去搜。
- TikTok 和 YouTube 上的文字都是陌生人写的，只放在工具结果里，别拼进系统提示词。

## 其他做法

AI SDK 自带的 MCP 客户端也可以加载 `https://api.okdata.online/mcp`，请求头一样带 Authorization，智能体就能通过 `find`、`describe`、`call` 用上全部接口，不局限于这两个固定工具。如果只要 YouTube 的搜索元数据，官方 YouTube Data API 在谷歌每日配额内免费，已经有 Google Cloud 项目的话值得用。直接抓字幕的 npm 包也免费，只是在云服务器 IP 上经常被拦。重试和错误处理见[错误码页](/zh/docs/errors/)。

## 用到的接口

- [TikTok 视频搜索](https://okdata.online/zh/apis/tiktok/videos/search/) `tiktok.videos.search`：$0.002/次 · 每页约 30 条视频
- [YouTube 视频字幕](https://okdata.online/zh/apis/youtube/videos/transcript/get/) `youtube.videos.transcript.get`：$0.004/次

更新于 2026-11-12
