Pada halaman ini
Vercel AI SDK memberi anda antara muka bersatu untuk memanggil LLM daripada mana-mana rangka kerja -- Next.js, SvelteKit, Nuxt, atau Node biasa. CrawlForge memberi LLM anda akses kepada data web langsung melalui 26 alat scraping khusus. Bersama-sama, ia membolehkan anda membina aplikasi AI yang boleh mencari, fetch, mengekstrak, dan menganalisis kandungan web dalam masa nyata.
Tutorial ini menunjukkan kepada anda cara mendaftarkan alat CrawlForge dengan API tool() Vercel AI SDK, supaya AI anda boleh melakukan scraping web semula jadi seperti ia menjana teks.
Jadual Kandungan
- Prasyarat
- Bagaimana Ia Berfungsi: Alat dalam Vercel AI SDK
- Langkah 1: Cipta Pembalut Alat CrawlForge
- Langkah 2: Daftar Alat dengan generateText
- Langkah 3: Bina Sembang Penstriman dengan Akses Web
- Lanjutan: Ejen Penyelidikan Pelbagai Alat
- Pecahan Kos Credit
- Amalan Terbaik
- Langkah Seterusnya
Prasyarat
npm install ai @ai-sdk/anthropic zod dotenv# .env.local
ANTHROPIC_API_KEY=sk-ant-xxxxx
CRAWLFORGE_API_KEY=cf_live_xxxxxDapatkan kunci API CrawlForge anda di crawlforge.dev/signup -- 1,000 credits percuma disertakan.
Bagaimana Ia Berfungsi: Alat dalam Vercel AI SDK
Vercel AI SDK membolehkan anda menentukan alat yang boleh dipanggil oleh LLM semasa perbualan. Setiap alat mempunyai nama, penerangan, skema parameter (menggunakan Zod), dan fungsi execute. LLM membaca penerangan alat, memutuskan bila hendak memanggilnya, dan menggabungkan keputusan ke dalam responsnya.
REST API CrawlForge memetakan dengan sempurna kepada corak ini: setiap satu daripada 26 alat menjadi fungsi yang boleh dipanggil dengan parameter bertaip.
Langkah 1: Cipta Pembalut Alat CrawlForge
Mula-mula, bina pembantu boleh guna semula yang memanggil mana-mana endpoint CrawlForge:
// lib/crawlforge.ts
const CRAWLFORGE_BASE = 'https://crawlforge.dev/api/v1/tools';
export async function callCrawlForge<T>(
toolName: string,
params: Record<string, unknown>
): Promise<T> {
const response = await fetch(`${CRAWLFORGE_BASE}/${toolName}`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.CRAWLFORGE_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify(params),
});
if (!response.ok) {
throw new Error(`CrawlForge ${toolName} failed: ${response.status}`);
}
return response.json() as Promise<T>;
}Langkah 2: Daftar Alat dengan generateText
Sekarang daftarkan alat CrawlForge menggunakan fungsi tool() Vercel AI SDK:
// app/api/chat/route.ts
import { generateText, tool } from 'ai';
import { anthropic } from '@ai-sdk/anthropic';
import { z } from 'zod';
import { callCrawlForge } from '@/lib/crawlforge';
const result = await generateText({
model: anthropic('claude-sonnet-4-20250514'),
tools: {
// Fetch and extract clean content from any URL (2 credits)
extractContent: tool({
description: 'Extract the main content from a web page as clean text. Use this when you need to read an article, documentation page, or any web content.',
parameters: z.object({
url: z.string().url().describe('The URL to extract content from'),
}),
execute: async ({ url }) => {
return callCrawlForge('extract_content', { url });
},
}),
// Search the web (5 credits)
searchWeb: tool({
description: 'Search the web using Google. Returns titles, URLs, and snippets for the top results.',
parameters: z.object({
query: z.string().describe('The search query'),
limit: z.number().optional().default(5).describe('Number of results'),
}),
execute: async ({ query, limit }) => {
return callCrawlForge('search_web', { query, limit });
},
}),
// Extract structured data with CSS selectors (2 credits)
scrapeStructured: tool({
description: 'Extract specific data from a web page using CSS selectors. Use when you need structured data like prices, names, or lists.',
parameters: z.object({
url: z.string().url().describe('The URL to scrape'),
selectors: z.record(z.string()).describe('CSS selectors mapping field names to selectors'),
}),
execute: async ({ url, selectors }) => {
return callCrawlForge('scrape_structured', { url, selectors });
},
}),
},
prompt: 'Find the current pricing for Vercel Pro plan and compare it to Netlify Pro.',
});
console.log(result.text);Apabila LLM menghadapi soalan yang memerlukan data web, ia secara automatik memanggil alat CrawlForge yang betul, menerima keputusan, dan menjalinkannya ke dalam responsnya. Tiada orkestrasi manual diperlukan.
Langkah 3: Bina Sembang Penstriman dengan Akses Web
Untuk pengalaman sembang masa nyata, gunakan streamText dan bukannya generateText:
// app/api/chat/route.ts
import { streamText, tool } from 'ai';
import { anthropic } from '@ai-sdk/anthropic';
import { z } from 'zod';
import { callCrawlForge } from '@/lib/crawlforge';
export async function POST(req: Request) {
const { messages } = await req.json();
const result = streamText({
model: anthropic('claude-sonnet-4-20250514'),
system: `You are a research assistant with access to live web data.
When users ask about current information, use your tools to fetch it.
Always cite the URLs you retrieved data from.`,
messages,
tools: {
extractContent: tool({
description: 'Extract main content from a URL as clean text',
parameters: z.object({
url: z.string().url(),
}),
execute: async ({ url }) =>
callCrawlForge('extract_content', { url }),
}),
searchWeb: tool({
description: 'Search the web and return top results',
parameters: z.object({
query: z.string(),
limit: z.number().optional().default(5),
}),
execute: async ({ query, limit }) =>
callCrawlForge('search_web', { query, limit }),
}),
},
maxSteps: 5, // Allow up to 5 tool calls per response
});
return result.toDataStreamResponse();
}Parameter maxSteps: 5 membolehkan LLM merangkai berbilang panggilan alat -- contohnya, mencari web dahulu, kemudian mengekstrak kandungan daripada keputusan teratas.
Komponen Frontend
// app/page.tsx
'use client';
import { useChat } from 'ai/react';
export default function Chat() {
const { messages, input, handleInputChange, handleSubmit, isLoading } = useChat();
return (
<div className="max-w-2xl mx-auto p-4">
{messages.map((m) => (
<div key={m.id} className="mb-4">
<strong>{m.role === 'user' ? 'You' : 'AI'}:</strong>
<p>{m.content}</p>
</div>
))}
<form onSubmit={handleSubmit}>
<input
value={input}
onChange={handleInputChange}
placeholder="Ask anything about the web..."
className="w-full p-2 border rounded"
disabled={isLoading}
/>
</form>
</div>
);
}Lanjutan: Ejen Penyelidikan Pelbagai Alat
Gabungkan berbilang alat CrawlForge untuk aliran kerja penyelidikan yang lebih mendalam:
import { generateText, tool } from 'ai';
import { anthropic } from '@ai-sdk/anthropic';
import { z } from 'zod';
import { callCrawlForge } from '@/lib/crawlforge';
const research = await generateText({
model: anthropic('claude-sonnet-4-20250514'),
tools: {
searchWeb: tool({
description: 'Search Google for information',
parameters: z.object({ query: z.string(), limit: z.number().default(5) }),
execute: async ({ query, limit }) =>
callCrawlForge('search_web', { query, limit }),
}),
extractContent: tool({
description: 'Read the full content of a web page',
parameters: z.object({ url: z.string().url() }),
execute: async ({ url }) =>
callCrawlForge('extract_content', { url }),
}),
analyzeContent: tool({
description: 'Analyze text for topics, sentiment, and key entities',
parameters: z.object({ text: z.string() }),
execute: async ({ text }) =>
callCrawlForge('analyze_content', { text }),
}),
},
maxSteps: 10,
prompt: `Research the current state of MCP server adoption in 2026.
Search for recent articles, read the top 3, and analyze the key trends.
Provide a summary with citations.`,
});
console.log(research.text);
// Returns a cited research summary using live web dataEjen ini akan:
- Mencari Google untuk artikel berkaitan (5 credits)
- Mengekstrak kandungan daripada keputusan teratas (2 credits setiap satu)
- Menganalisis kandungan untuk tema (3 credits setiap satu)
Jumlah kos untuk larian penyelidikan 3 sumber: ~20 credits.
Pecahan Kos Credit
| Alat | Credits | Sesuai Untuk |
|---|---|---|
| fetch_url | 1 | Pengambilan HTML mentah |
| extract_text | 1 | Pengekstrakan teks bersih |
| extract_links | 1 | Penemuan pautan |
| extract_metadata | 1 | Metadata halaman (tajuk, tag OG) |
| extract_content | 2 | Pengekstrakan kandungan boleh baca |
| scrape_structured | 2 | Pengekstrakan data berasaskan pemilih CSS |
| summarize_content | 2 | Peringkasan teks |
| analyze_content | 3 | Analisis topik dan sentimen |
| search_web | 5 | Keputusan carian Google |
| deep_research | 10 | Penyelidikan pelbagai sumber dengan petikan |
Lihat pecahan harga penuh untuk kesemua 26 alat.
Amalan Terbaik
Minimumkan penggunaan credit. Gunakan extract_content (2 credits) dan bukannya deep_research (10 credits) apabila anda hanya memerlukan satu halaman. Penerangan alat membimbing LLM ke arah pilihan termurah yang memenuhi pertanyaan.
Tetapkan maxSteps dengan teliti. Nilai maxSteps yang lebih tinggi membenarkan lebih banyak panggilan alat setiap respons tetapi menggunakan lebih banyak credits. Mulakan dengan 3-5 dan tingkatkan hanya jika LLM secara konsisten memerlukan lebih banyak.
Cache halaman yang kerap diakses. Jika aplikasi anda berulang kali fetch URL yang sama, cache respons CrawlForge dalam Redis atau pangkalan data dan bukannya fetch semula setiap kali.
Gunakan penerangan Zod. Rentetan .describe() pada parameter Zod anda membantu LLM memahami nilai yang perlu dihantar. Jadilah spesifik: "The full URL including https://" lebih baik daripada "URL".
Langkah Seterusnya
Anda kini mempunyai aplikasi Vercel AI SDK dengan akses web langsung. Kembangkan dari sini:
- Tambah baki 26 alat CrawlForge mengikut keperluan
- Laksanakan stealth mode untuk tapak dengan perlindungan anti-bot
- Bina ejen penyelidikan mendalam untuk analisis pasaran automatik
- Semak Mula Pantas CrawlForge untuk persediaan klien MCP
Bina aplikasi AI yang melihat web. Mula percuma dengan 1,000 credits -- tiada kad kredit diperlukan.
Cuba sendiri — tiada pendaftaran diperlukan
Jalankan mana-mana daripada 27 alat scraping dan pengekstrakan CrawlForge dalam playground, kemudian mula secara percuma dengan 1,000 credits.
1,000 credits percuma • Isi semula setiap bulan • Tiada kad kredit diperlukan
Tag
Tentang Penulis
Kekal dikemas kini dengan pandangan terkini
Dapatkan tutorial, kemas kini produk dan petua web scraping terus ke peti masuk anda.
Tiada spam. Berhenti melanggan bila-bila masa.