Langkau ke kandungan

CrawlForge TeamPasukan Kejuruteraan

8 min bacaanDikemas kini

Cara Menggunakan CrawlForge dengan Vercel AI SDK

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 31 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

Bash
npm install ai @ai-sdk/anthropic zod dotenv
Bash
# .env.local
ANTHROPIC_API_KEY=sk-ant-xxxxx
CRAWLFORGE_API_KEY=cf_live_xxxxx

Dapatkan 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 31 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:

Typescript
// 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:

Typescript
// 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:

Typescript
// 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

Typescript
// 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:

Typescript
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 data

Ejen ini akan:

  1. Mencari Google untuk artikel berkaitan (5 credits)
  2. Mengekstrak kandungan daripada keputusan teratas (2 credits setiap satu)
  3. Menganalisis kandungan untuk tema (3 credits setiap satu)

Jumlah kos untuk larian penyelidikan 3 sumber: ~20 credits.

Pecahan Kos Credit

AlatCreditsSesuai Untuk
fetch_url1Pengambilan HTML mentah
extract_text1Pengekstrakan teks bersih
extract_links1Penemuan pautan
extract_metadata1Metadata halaman (tajuk, tag OG)
extract_content2Pengekstrakan kandungan boleh baca
scrape_structured2Pengekstrakan data berasaskan pemilih CSS
summarize_content2Peringkasan teks
analyze_content3Analisis topik dan sentimen
search_web5Keputusan carian Google
deep_research10Penyelidikan pelbagai sumber dengan petikan

Lihat pecahan harga penuh untuk kesemua 31 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:


Bina aplikasi AI yang melihat web. Mula percuma dengan 1,000 credits -- tiada kad kredit diperlukan.

Cuba sendiri — tiada pendaftaran diperlukan

Terokai kesemua 31 alat scraping dan pengekstrakan CrawlForge dalam playground, kemudian mula secara percuma dengan 1,000 credits.

1,000 credits percuma • Sekali sahaja • Tiada kad kredit diperlukan

Tag

  • vercel-ai-sdk
  • nextjs
  • integration
  • web-scraping
  • ai-engineering
  • tutorial
  • typescript

Tentang Penulis

CrawlForge Team

Pasukan Kejuruteraan

Membina MCP server web scraping yang paling menyeluruh. Kami mencipta alatan yang membantu pembangun mengekstrak, menganalisis dan mengubah data web untuk aplikasi AI.

Surat berita

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.

Soalan Lazim

Soalan lazim

01Bagaimana saya menggunakan CrawlForge dengan Vercel AI SDK?

Daftarkan 31 alat scraping CrawlForge dengan API tool() Vercel AI SDK supaya mana-mana LLM yang anda panggil melalui generateText atau streamText boleh fetch, ekstrak, dan menyelidik web atas permintaan. Persediaan mengambil masa kurang daripada 10 minit dan berfungsi dengan Next.js, SvelteKit, Nuxt, atau Node biasa.

02Apakah 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.

03Bagaimana saya meminimumkan penggunaan credit CrawlForge dalam aplikasi AI SDK?

Gunakan extract_content (2 credits) dan bukannya deep_research (10 credits) apabila anda hanya memerlukan satu halaman. Tetapkan maxSteps dengan teliti -- mulakan dengan 3-5 dan tingkatkan hanya jika perlu. Cache halaman yang kerap diakses dalam Redis atau pangkalan data dan bukannya fetch semula setiap kali.

04Mengapa penerangan parameter Zod penting untuk alat AI SDK?

Rentetan .describe() pada parameter Zod anda membantu LLM memahami nilai yang perlu dihantar. Jadilah spesifik: "The full URL including https://" lebih baik daripada "URL". Penerangan yang jelas membimbing LLM ke arah alat termurah yang memenuhi pertanyaan.

Teruskan membaca

Artikel Berkaitan