问答
Node.js 智能体(Vercel AI SDK)怎么把 TikTok、YouTube 数据做成工具?
简短回答
每个接口包成一个工具:zod 定义参数,execute 里发一次 fetch。模型选工具,你的代码调 okdata,再把精简后的 JSON 交回去。TikTok 搜索工具每次 $0.002,约 30 条视频;YouTube 字幕工具每个视频 $0.004。服务器上除了这次 HTTP 请求,什么都不用跑。
一个增长团队的 Next.js 后台里有个对话框,大家会问:这周 TikTok 上的创作者怎么聊我们这个品类?YouTube 上排名靠前的测评到底说了什么?要回答,智能体需要两个工具:一个搜 TikTok,一个读 YouTube 视频字幕。两个都只是一次 fetch,所以放在 Vercel 函数或任何 Node 18 以上的服务器里都能跑,不需要浏览器,也不需要抓取库。
工具代码
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 视频搜索和 YouTube 视频字幕。
每个问题花多少
| 问题 | 调用次数 | 费用 |
|---|---|---|
| TikTok 搜 2 次 | 2 | $0.004 |
| 搜 2 次,再读 3 份字幕 | 5 | {{cost:tiktok.videos.search2+youtube.videos.transcript.get3}} |
| 上限: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 上经常被拦。重试和错误处理见错误码页。
更新于