Pada halaman ini
Bayangkan pembantu penyelidikan AI yang boleh:
- Mencari web untuk sumber yang relevan
- Mengekstrak dan mengesahkan maklumat daripada pelbagai laman web
- Merujuk silang fakta untuk ketepatan
- Mensintesis penemuan menjadi ringkasan yang koheren dengan petikan
Dengan Claude, Model Context Protocol (MCP), dan CrawlForge, anda boleh membina ini dalam satu petang. Panduan ini membimbing anda melalui seni bina, pelaksanaan, dan pertimbangan pengeluaran.
Visi: Menyelidik Seperti Manusia
LLM tradisional terhad kepada data latihan mereka. Apabila anda bertanya soalan kepada GPT-4 atau Claude, mereka hanya boleh mengingat apa yang mereka telah lihat sebelum ini. Tetapi manusia tidak berfungsi begitu—kita mencari, membaca, mengesahkan, dan mensintesis maklumat baharu.
Pembantu penyelidikan AI sepatutnya:
- Memahami niat - Pecahkan pertanyaan kompleks menjadi topik yang boleh dicari
- Temui sumber - Cari halaman web, dokumentasi, artikel yang relevan
- Ekstrak maklumat - Tarik keluar fakta, petikan, dan data utama
- Sahkan ketepatan - Semak silang maklumat merentas pelbagai sumber
- Sintesis keputusan - Gabungkan penemuan menjadi jawapan yang jelas dan berpetikan
Mari kita bina ia.
Gambaran Keseluruhan Seni Bina
Pembantu penyelidikan kita mempunyai tiga lapisan:
┌─────────────────────────────────────────────────┐
│ 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 │
└─────────────────────────────────────────────────┘
Aliran Data:
- Pengguna menyerahkan pertanyaan penyelidikan
- LLM mengembangkan pertanyaan menjadi istilah carian
- CrawlForge mencari web dan mengekstrak kandungan
- LLM mengesahkan dan mensintesis maklumat
- Pulangkan jawapan berstruktur dengan petikan
Menyediakan Projek
Kita akan menggunakan TypeScript, API Claude (atau OpenAI), dan CrawlForge MCP server.
Prasyarat
node -v # 18+ required
npm -v # 9+ requiredMulakan Projek
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 --initPersediaan Persekitaran
Cipta .env:
# Claude API (or use OPENAI_API_KEY)
ANTHROPIC_API_KEY=sk-ant-xxxxx
# CrawlForge API
CRAWLFORGE_API_KEY=cf_live_xxxxxDapatkan CrawlForge API key anda di crawlforge.dev/signup (1,000 credits percuma).
Melaksanakan Aliran Penyelidikan
1. Pemahaman Pertanyaan
Pertama, kita perlu mengembangkan pertanyaan pengguna menjadi istilah carian yang berkesan.
// 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. Carian Web dan Pengekstrakan Kandungan
Seterusnya, kita mencari sumber yang relevan dan mengekstrak kandungan.
// 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;
}Kos Credit:
- 3 istilah carian × 5 credits = 15 credits
- 15 sumber × 2 credits = 30 credits
- Jumlah: 45 credits setiap pertanyaan penyelidikan
3. Pengesahan Maklumat
Rujuk silang fakta merentas sumber untuk mengesahkan ketepatan.
// 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
}));
}Apa yang Seterusnya?
Kini anda telah membina pembantu penyelidikan asas, anda boleh:
- Tambah penstriman - Strim keputusan apabila ditemui untuk UX yang lebih baik
- Simpan keputusan - Simpan penyelidikan ke pangkalan data untuk pengambilan kemudian
- Bina UI - Cipta antara muka web dengan Next.js atau React
- Tambah webhooks - Dapatkan pemberitahuan apabila penyelidikan selesai
- Perhalusi gesaan - Optimumkan untuk kes penggunaan khusus anda
Sumber
Mula membina: Dapatkan 1,000 credits percuma di crawlforge.dev/signup.
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.