CrawlForge
首页Playground应用场景集成价格文档博客
使用 Claude 和 MCP 构建 AI 研究助手
Use Cases
返回博客
应用场景

使用 Claude 和 MCP 构建 AI 研究助手

C
CrawlForge Team
工程团队
2026年1月2日
阅读时长 12 分钟
更新于 2026年4月14日

本页内容

设想一个能够完成以下任务的 AI 研究助手:

  • 在网络上搜索相关来源
  • 从多个网站提取并核实信息
  • 交叉比对事实以确保准确性
  • 将研究结果综合成一份带引用的连贯摘要

借助 Claude、Model Context Protocol (MCP) 和 CrawlForge,你可以在一个下午就把它构建出来。本指南将带你了解其架构、实现方式以及生产环境中的注意事项。

愿景:像人类一样做研究

传统 LLM 受限于其训练数据。当你向 GPT-4 或 Claude 提问时,它们只能回忆起此前见过的内容。但人类并非如此——我们会搜索、阅读、核实并综合新的信息。

一个 AI 研究助手应当能够:

  1. 理解意图 - 将复杂的查询拆解为可搜索的主题
  2. 发现来源 - 找到相关的网页、文档和文章
  3. 提取信息 - 提炼出关键事实、引述和数据
  4. 核实准确性 - 在多个来源之间交叉验证信息
  5. 综合结果 - 将研究结果整合成一份清晰、带引用的答案

让我们开始构建。

架构概览

我们的研究助手分为三层:

┌─────────────────────────────────────────────────┐ │ LLM Layer (Claude/GPT-4) │ │ - Query understanding │ │ - Source relevance scoring │ │ - Information synthesis │ └─────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────┐ │ MCP Server (CrawlForge) │ │ - search_web (5 credits) │ │ - extract_content (2 credits) │ │ - deep_research (10 credits) │ └─────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────┐ │ Web Data Layer │ │ - Google Search results │ │ - Website content │ │ - Structured data │ └─────────────────────────────────────────────────┘

数据流:

  1. 用户提交一个研究查询
  2. LLM 将查询扩展为搜索词
  3. CrawlForge 在网络上搜索并提取内容
  4. LLM 核实并综合信息
  5. 返回带引用的结构化答案

搭建项目

我们将使用 TypeScript、Claude 的 API(或 OpenAI)以及 CrawlForge MCP server。

前置条件

Bash
node -v  # 18+ required
npm -v   # 9+ required

初始化项目

Bash
mkdir ai-research-assistant
cd ai-research-assistant
npm init -y
npm install @anthropic-ai/sdk dotenv
npm install --save-dev typescript @types/node tsx
npx tsc --init

环境配置

创建 .env:

Bash
# Claude API (or use OPENAI_API_KEY)
ANTHROPIC_API_KEY=sk-ant-xxxxx

# CrawlForge API
CRAWLFORGE_API_KEY=cf_live_xxxxx

在 crawlforge.dev/signup 获取你的 CrawlForge API key(赠送 1,000 个免费 credits)。

实现研究流程

1. 理解查询

首先,我们需要将用户查询扩展为有效的搜索词。

Typescript
// src/research/query-processor.ts
import Anthropic from '@anthropic-ai/sdk';

interface QueryExpansion {
  original: string;
  searchTerms: string[];
  intent: 'factual' | 'comparative' | 'tutorial' | 'news';
  depth: 'shallow' | 'moderate' | 'deep';
}

export async function expandQuery(
  query: string,
  anthropic: Anthropic
): Promise<QueryExpansion> {
  const response = await anthropic.messages.create({
    model: 'claude-3-5-sonnet-20241022',
    max_tokens: 500,
    messages: [{
      role: 'user',
      content: `Analyze this research query and return JSON:
Query: "${query}"

Return:
{
  "searchTerms": ["term1", "term2", "term3"],
  "intent": "factual|comparative|tutorial|news",
  "depth": "shallow|moderate|deep"
}

Search terms should be optimized for web search.`
    }]
  });

  const content = response.content[0];
  if (content.type !== 'text') throw new Error('Unexpected response');

  const parsed = JSON.parse(content.text);

  return {
    original: query,
    searchTerms: parsed.searchTerms,
    intent: parsed.intent,
    depth: parsed.depth
  };
}

2. 网络搜索与内容提取

接下来,我们搜索相关来源并提取其内容。

Typescript
// src/research/web-scraper.ts
interface Source {
  url: string;
  title: string;
  snippet: string;
  content: string;
  extractedAt: Date;
}

export async function findSources(
  searchTerms: string[],
  apiKey: string
): Promise<Source[]> {
  const sources: Source[] = [];

  for (const term of searchTerms) {
    // Use search_web tool (5 credits per search)
    const searchResponse = await fetch('https://crawlforge.dev/api/v1/tools/search_web', {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${apiKey}`,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        query: term,
        limit: 5  // Top 5 results per term
      })
    });

    const searchData = await searchResponse.json();
    const results = searchData.results || [];

    // Extract content from each result (2 credits per URL)
    for (const result of results) {
      const contentResponse = await fetch('https://crawlforge.dev/api/v1/tools/extract_content', {
        method: 'POST',
        headers: {
          'Authorization': `Bearer ${apiKey}`,
          'Content-Type': 'application/json'
        },
        body: JSON.stringify({
          url: result.url
        })
      });

      const contentData = await contentResponse.json();

      sources.push({
        url: result.url,
        title: result.title,
        snippet: result.snippet,
        content: contentData.content || '',
        extractedAt: new Date()
      });
    }
  }

  return sources;
}

credits 成本:

  • 3 个搜索词 × 5 credits = 15 credits
  • 15 个来源 × 2 credits = 30 credits
  • 合计:每次研究查询 45 credits

3. 信息核实

在各来源之间交叉比对事实以核实准确性。

Typescript
// src/research/verifier.ts
interface VerifiedFact {
  claim: string;
  confidence: 'high' | 'medium' | 'low';
  sources: string[];
  conflicts?: string[];
}

export async function verifyInformation(
  sources: Source[],
  anthropic: Anthropic
): Promise<VerifiedFact[]> {
  const sourceTexts = sources.map((s, i) =>
    `[Source ${i + 1}: ${s.url}]
${s.content.slice(0, 1000)}`
  ).join('

');

  const response = await anthropic.messages.create({
    model: 'claude-3-5-sonnet-20241022',
    max_tokens: 2000,
    messages: [{
      role: 'user',
      content: `Extract and verify key facts from these sources. Return JSON:

${sourceTexts}

Return:
{
  "facts": [
    {
      "claim": "factual claim",
      "confidence": "high|medium|low",
      "sources": [1, 2],  // Source indices that support this
      "conflicts": ["conflicting information if any"]
    }
  ]
}`
    }]
  });

  const content = response.content[0];
  if (content.type !== 'text') throw new Error('Unexpected response');

  const parsed = JSON.parse(content.text);

  return parsed.facts.map((fact: any) => ({
    claim: fact.claim,
    confidence: fact.confidence,
    sources: fact.sources.map((i: number) => sources[i - 1]?.url || ''),
    conflicts: fact.conflicts
  }));
}

接下来呢?

现在你已经构建了一个基础的研究助手,接下来你可以:

  1. 添加流式输出 - 在找到结果时实时流式返回,以改善用户体验
  2. 存储结果 - 将研究保存到数据库以便日后检索
  3. 构建界面 - 用 Next.js 或 React 创建一个 Web 界面
  4. 添加 webhooks - 在研究完成时收到通知
  5. 微调 prompt - 针对你的具体使用场景进行优化

资源

  • CrawlForge API 文档
  • Deep Research 工具
  • credits 优化指南

开始构建: 在 crawlforge.dev/signup 获取 1,000 个免费 credits。

亲自试一试——无需注册

在 Playground 中运行 CrawlForge 的 27 个抓取与提取工具中的任意一个,然后免费开始,获取 1,000 credits。

1,000 免费 credits • 每月补充 • 无需信用卡

标签

AI ResearchMCPLLM ApplicationsData Extraction

关于作者

C

CrawlForge Team

工程团队

我们正在打造功能最全面的 Web 抓取 MCP server。我们开发的工具帮助开发者为 AI 应用提取、分析和转换 Web 数据。

及时获取最新洞察

将教程、产品更新与 Web 抓取技巧直接发送到你的收件箱。

拒绝垃圾邮件,随时可取消订阅。

付诸实践

在任意 URL 上测试 CrawlForge 的工具——免费,无需注册。

本页内容

相关文章

用一个工具抓取 Amazon、LinkedIn 和另外 8 个站点
Use Cases

用一个工具抓取 Amazon、LinkedIn 和另外 8 个站点

scrape_template 为人人都想抓的 10 个站点提供预制、持续维护的抓取器。一次调用、结构化 JSON、1 credit。

C
CrawlForge Team
|
5月27日
|
8 分钟
大规模提取电商产品数据
Use Cases

大规模提取电商产品数据

用 CrawlForge 从成千上万的电商页面中提取产品数据。大规模构建产品目录、监控库存并为比价引擎提供动力。

C
CrawlForge Team
|
4月18日
|
10 分钟
用 CrawlForge Deep Research 构建调研智能体
Use Cases

用 CrawlForge Deep Research 构建调研智能体

使用 CrawlForge deep_research 构建一个 AI 调研智能体,在几分钟内从数十个来源收集、验证并综合信息。

C
CrawlForge Team
|
4月16日
|
10 分钟

页脚

CrawlForge

面向 AI Agent 的企业级网页抓取。27 个专业 MCP 工具,专为构建智能系统的现代开发者而设计。

产品

  • 功能
  • Playground
  • 价格
  • 应用场景
  • 集成
  • 替代方案
  • 更新日志

资源

  • 快速上手
  • API 参考
  • 模板
  • 指南
  • 博客
  • 术语表
  • 常见问题
  • 网站地图

开发者

  • MCP 协议
  • Claude Desktop
  • Cursor IDE
  • LangChain
  • LlamaIndex

公司

  • 关于我们
  • 联系我们
  • 隐私政策
  • 服务条款
  • 可接受使用政策
  • Cookie

保持更新

获取新工具和新功能的最新动态。

基于 Next.js 和 MCP 协议构建

© 2025-2026 CrawlForge。保留所有权利。