Building Your Own Perplexity: The Architecture Behind AI-Powered Deep Research オリジナルタイトル
️開発者向けのWake-Up Call
あなたの使命は、チャットGPTやクロードを使用する方法を学ぶことだけではなく、そのようなシステムの創造者になること、単にそれを使用するのではなく、次の混乱を構築することです。
️開発者向けのWake-Up Call
あなたの使命は、チャットGPTやクロードを使用する方法を学ぶことだけではなく、そのようなシステムの創造者になること、単にそれを使用するのではなく、次の混乱を構築することです。
Open Source:https://github.com/aifa-agi/aifa-deep-researcer-starter/
1. What You'll Master by Reading This Article
あなたはこの記事を読むことで何をマスターするでしょうこの記事では、Perplexityの「Deep Research」機能と同様に、独自の深層研究AIエージェントを構築するための完全な建築計画を提供します。
Technical ArchitectureNext.js 15、OpenAI、およびexa.ai を使用した再起動的な検索システムを設計する方法
Mental Modelsなぜ、深い検索は線形プロセスではなく、木の構造であり、それがAI研究のすべてをどのように変えるのか
Practical Solutions外部ウェブ検索を内部ベクター知識ベースと統合して、競争相手が複製できない真にユニークなコンテンツを作成する方法
Performance Optimizationサーバーリソースとユーザーエクスペリエンスを、銀行を破ることなく長期にわたって実行するAIオペレーションで管理する方法
Production-Ready Code: 今日展開できる近代的なテクノロジーステックを使用するコンクリートTypeScript実装
この記事の終わりまでに、あらゆる製品に統合できる深い研究のための自社ホスト SaaS を構築する方法を明確に理解できるようになります - あなたに真に複製しにくい競争上の利点を与えます。
1.1. The Technology Stack That Powers Intelligence
私たちの深い研究 AI エージェントを実装するために、我々は人工知能の強力な使用を伴う生産準備アプリケーションに最適化された近代的なテクノロジー スタックを使用しています. This is not just a tech demo — it is built for real-world scale and reliability.
1.1.1. Frontend and Framework
React 19パフォーマンスを向上させ、複雑なAI相互作用をスムーズに処理する新しい同時レンダリング機能を備えた最新バージョン
Next.js 15パラレルおよびキャプチャル ルートのサポートを含む、App Router による完全な React フレームワーク (複雑な AI ワークフローに最適)
TypeScript 5複雑なAIシステムを構築する際のコードの信頼性と優れた開発経験のための厳格な書き込み
1.1.2. AI and Integrations
OpenAI SDK (v4.96.2)GPT-4およびその他のOpenAIモデルとの統合のための公式SDK、完全なストリーミングサポート
AI SDK (v4.1.45)さまざまなAIプロバイダーと協力するための普遍的なライブラリで、モデルを変更する柔軟性を提供します。
Exa.js (v1.4.10)— 実際には文脈を理解するセマンティック検索のための専門的なAI指向の検索エンジン
1.1.3. UI and Styling
Tailwind CSS 4設計品質を犠牲にすることなく、迅速な開発のためのユーティリティファーストCSSフレームワーク
Radix UI— すべてのデバイスで動作するアクセス可能なインターフェイスを作成するためのヘッドレスコンポーネント
Lucide React現代的なアイコンライブラリ、一貫したデザイン言語
shadcn/uiプロフェッショナルなインターフェースのためのRadix UIとTailwind CSSに構築されたコンポーネントシステム
1.1.4. Forms and Validation
React Hook FormあなたのAIインターフェイスを遅らせないフォーム処理のための高性能ライブラリ
ZodTypeScript-first validation scheme with static typing that catches errors before they reach production. - TypeScript-first validation scheme with static typing that catches errors before they reach production. - TypeScript-first validation scheme with static typing that catches errors before they reach production. - TypeScript-first validation scheme with static typing.
Hookform ResolversZod と React Hook Form のシームレスな統合
1.1.5. Content Processing
React MarkdownMarkdown コンテンツ rendering with component support for rich AI-generated reports マークダウンコンテンツ rendering with component support for rich AI-generated reports
date-fns— AI研究タイムラインにおける日付処理のための現代図書館
Why This Stack Matters
このテクノロジー Stack provides thehigh performanceで、type safetyそして、scalability複雑な生産レベルのAIアプリケーションを作成するために必要なものであり、ここでのすべての選択は意図的なものであり、Next.js 15の複雑なAIワークフローを扱う並行ルートから、深層研究を可能にするセマンティック検索機能を提供するExa.jsまでです。
The result?再発型AI研究の計算的複雑さを処理し、現代のアプリケーションが要求するユーザー体験基準を維持できるシステムです。
これらのパーツがどのように組み合わされ、本当に強力なものを創造するかを見る準備ができていますか? すべてを動かすアーキテクチャに潜入しましょう。
AI 革命は来ない――それはここにある。そして、開発者コミュニティで大きな格差を生み出している。一方で、AI を生産性を高めるためのもう一つのツールとして見ている人々は、チャットGPT を使用して機能を書き、コードをデバッグしている。the real opportunity isn't in using AI—it's in building it.
ほとんどの開発者が ChatGPT をより効果的に推進する方法を学んでいる一方で、小さなグループが Perplexity、Claude、およびカスタム AI エージェントなどのシステムの背後にあるアーキテクチャをマスターしています。
The harsh reality企業はAIツールを使用できる開発者を必要としないが、AIシステムを構築できる開発者を必要としている。これらの2つのスキルの違いは、次の経済サイクルで誰が繁栄し、誰が時代遅れになるかを決定するだろう。
この記事は、Perplexityの「Deep Research」機能と同様に、独自のAI駆動の深層研究エージェントを構築するための完全な建築計画を提供します。あなたは技術的な実装だけでなく、アマチュアAI統合を生産準備システムから分離するマインドモデルと設計原則を学ぶことができます。
What you'll master by the end:
- Recursive search architecture: How to design systems that think in trees, not lines. ツリーではなく線で考えるシステムを設計する方法
- AIファーストデータパイプライン:外部ウェブ検索と内部知識ベースの統合
- エージェントオーケストレーション:独自の出力を評価、再現、改善できるAIシステムを構築
- 生産の考慮事項:長期的なAI操作のためのサーバーリソース、タイムアウト、およびユーザー体験の管理
目標はコードをコピーペストするためのコードを与えることではなく、あらゆるドメイン、あらゆる用例、あらゆる規模のためのAIシステムを設計できるアーキテクチャー思考を転送することです。
AI消費者からAIアーキテクチャに移行する準備ができていますか? 伝統的なLLMがインターネットを効果的にナビゲーションするために「ガイド・ドッグ」が必要な理由に潜入しましょう。
2. Introduction: Life After ChatGPT Changed Everything
紹介:ChatGPTがすべてを変えた後の生活ChatGPTとその他の大言語モデル(LLMs)は、私たちが情報と相互作用する方法を根本的に革命させたが、もしあなたがこれらのツールで真剣なアプリケーションを構築してきたなら、おそらくあなたは私がした同じ壁を打っただろう:models only know the world up to their training cutoff date, and they hallucinate with alarming confidence.
2.1. The Problem: Band-Aid Web Search in Modern LLMs
ChatGPT、Claude、およびその他のモデルのチームは、組み込まれたウェブ検索でこれを解決しようとしました。理論的には素晴らしいように聞こえますが、より深く掘り下げて、生産アプリケーションに不適切ないくつかの深刻な建築的欠陥を見つけることができます。
Surface-Level Search: システムは1つまたは2つの検索クエリを作成し、最初のいくつかの結果を把握し、それを1日呼び出す。
Zero Follow-Through最初の検索が包括的な結果を生み出さない場合、システムはフォローアップの質問をしたり、代替的な角度を探索したりしません。
Garbage Data Quality伝統的な検索エンジンは、広告、ナビゲーション要素、無関係なコンテンツで混乱したHTMLページを返します。
Context Isolationシステムは、内部データ、企業文書、またはドメイン特有の知識ベースと見つかった情報を接続できません。
2.2. The Gold Standard: Perplexity's Deep Research Revolution
Perplexityは、検索LLMの統合が実際にどのように機能するかを私たちに示した最初の会社でした。
AI-Optimized Search Engines一般的なGoogle API呼び出しの代わりに、AI消費のために設計されたクリーンで構造化されたコンテンツを返す専門の検索システムを使用しています。
Iterative Investigation Processシステムは初期の結果を止めず、結果を分析し、新しい質問を提出し、総合的なイメージを構築するまで検索を続けます。
Deep Research Modeこれは自動AIエージェントで、数分間にわたって作業し、トピックに繰り返し掘り下げ、数十のソースから情報を収集することができます。
This is exactly the kind of system we're going to build together.
2.3. Why This Matters for Every Developer
AIファーストの時代では、すべての製品が「よりスマート」になるために競い合っていますが、ChatGPT APIに単純に接続することは今、テーブルの賭けに過ぎません。
- インターネットの最新情報をリアルタイムで検索
- 公開データと独自の知識ベースを組み合わせる
- 標準のLLMから得られないユニークな洞察を生成する
- あなたの特定のビジネスドメインと業界のニュアンスに適応
2.4. What You'll Walk Away With
私の目標は、あなたにコードをコピーペストするために与えることではありません(あなたはそれらをたくさん得るでしょう)。
- 深層AI研究の背後にある哲学を理解
- あなたの特定の使用ケースのためのアーキテクチャを設計する
- 現代のスタック(Next.js 15、OpenAI、exa.ai)を使用してシステムを実装します。
- ソリューションを既存の製品に統合する
- Scale and optimize the system for your needs システムのスケールと最適化
この記事の終わりまでに、あなたはあなたの製品の秘密の武器になる可能性のあるAIエージェントである「Perplexity」を構築するための完全な建築計画と生産準備されたコードの例を持っています。
Important: 私たちは技術的な実装だけでなく、ビジネス論理も研究します。なぜリカバリーな検索よりもリカバリーな検索が有効なのか?外部と内部のソースをどのように適切に組み合わせるのか?長期的なAI操作にどのようなUXパターンが機能するのか?これらの質問はコードと同じくらい重要です。
2.5. For the Impatient: Skip to the Code
すでにコンセプトを取得し、実装に直接入りたがっている人にとっては、以下が私たちが構築するオープンソースソリューションです。https://github.com/aifa-agi/aifa-deep-researcer-starter
https://github.com/aifa-agi/aifa-deep-researcer-starter個人的には、あなたに多くの言葉と小さな本質を与える記事には耐えられません. リポをクローンし、今すぐ開発モードで実行してください。
Pro tip: 生産中の Vercel の無料ホスティング レベルでタイムアウト制限 (403 エラー) が発生しますが、 localhost では完全に実験し、心のコンテンツへのログを研究することができます。
AI駆動研究の未来を構築する準備ができていますか? なぜLLMはインターネットを効果的にナビゲーションするために「ガイド・ドッグ」が必要なのかを理解することから始めましょう。
3. Why LLMs Need a "Guide Dog": The Critical Role of External Search Systems
なぜLLMは「ガイド・ドッグ」が必要なのか:外部検索システムの重要な役割多くの開発者が高価な方法で学ぶのは難しい真実です。Large Language Models cannot independently access current information from the internetこれはバグではなく、高度なソリューションを必要とする基本的な建築的制限である:AI消費のために設計された専門の検索システムとの統合。
3.1. Why Traditional Search Engines Are AI Poison
Google、Bing、および他の伝統的な検索エンジンは、データを処理するマシンではなく、Webを閲覧する人間のために構築されました。
- コンテンツ抽出を混乱させる広告ブロックとナビゲーションの混乱
- 無関係なコンテンツ(コメント、サイドバー、足跡、クッキーバナー)
- 複雑な解析を必要とし、しばしば失敗する非構造化データ
javascript// The traditional approach - a nightmare for AI
const htmlResponse = await fetch('https://api.bing.com/search?q=query');
const messyHtml = await htmlResponse.text();
// You get HTML soup with ads, scripts, and digital garbage
// Good luck extracting meaningful insights from this mess
私は、チームがHTMLパッサーを構築するのに数週間を費やしているのを見たが、主要なサイトがそのレイアウトを更新するたびに破るようにするだけだ。It's not scalable, and it's definitely not reliable.
3.2. Keyword Matching vs. Semantic Understanding: A World of Difference
伝統的な検索エンジンは、正確な単語のマッチを検索し、文脈と意味を完全に無視します。「Next.js 電子商取引のための最適化」のようなクエリは、「オンラインストアにおける React アプリケーションのパフォーマンスを向上させる」という優れた記事を見逃すかもしれません。
これは、タイトルの正確な単語を一致させることによってのみ本を見つけることができる研究アシスタントを持つのと同じで、実際のコンテンツに関するすべてを無視する。For AI agents doing deep research, this approach is fundamentally broken.
3.3. AI-Native Search Engines: The Game Changer
Exa.ai、Metaphor、Tavilyなどの専門システムは、伝統的な検索がAIに使えなくなるコアの問題を解決します。
Semantic Query 理解
彼らは、キーワードだけでなく、意味で検索するためにベクトル表示を使用します. Your AI can find relevant content even when the exact terms don't match.
クリーンで構造化されたデータ
彼らは HTML ゴミなしで事前処理されたコンテンツを返します. No more parsing nightmares or broken extractors.
コンテキスト意識
彼らは以前のクエリと全体的な研究の文脈を理解し、真に反復的な調査を可能にします。
javascript// The AI-native approach - clean and powerful
const cleanResults = await exa.search({
query: "Detailed analysis of Next.js performance optimization for high-traffic e-commerce platforms",
type: "neural",
contents: { text: true, summary: true }
});
// You get clean, relevant content ready for AI processing
// No parsing, no cleanup, no headaches
3.4. Why This Matters for Production Systems
入力データの品質は、最終的な調査結果の品質を直接決定します。
Data ReliabilityStructured content without the need for fragile HTML parsing. 脆弱なHTMLパッシングを必要としない構造化されたコンテンツ
Scalability: 自動化された高ボリューム使用のために設計された安定したAPI
Cost Efficiency: データ処理のための減少したコンピューティングオーバーヘッド
Accuracy: より良いソース関連性は、より良い最終的な洞察をもたらします。
javascript// Hybrid search: external + internal sources
const [webResults, vectorResults] = await Promise.all([
exa.search(query),
vectorStore.similaritySearch(query)
]);
const combinedContext = [...webResults, ...vectorResults];
// Now your AI has both current web data AND your proprietary knowledge
3.5. The Bottom Line: Architecture Matters
AIネイティブの検索エンジンは、技術的な詳細だけではありません。they're the architectural foundation適切な「ガイド・ドッグ」がなければ、最も洗練されたLLMでさえ、現在の情報の深く、正確な分析を作成するのに苦労するでしょう。
あなたは、すべての本がコードで書かれ、ページの半分が広告である図書館に明るい研究者を送ることはありませんが、それはあなたがLLMを伝統的な検索APIに接続するときに起こります。
The solution?次のセクションでは、再発的で深い研究を可能にする特定のアーキテクチャパターンを掘り下げます。
部品がどのように組み合わせるかを見る準備ができていますか? 真にインテリジェントなAI研究エージェントをパワーアップするシステムデザインを探ってみましょう。
4. Think Like a Tree: The Architecture of Recursive Search
Think Like a Tree: The Architecture of Recursive Search(ツリーのように考える)人間の脳は、自然に複雑な情報を等級的なネットワークとして構成します。研究者が新しいトピックを調査するとき、彼らは直線で動かない - 彼らは新しい発見が追加の質問と研究方向を生成する木のような知識ネットワークを開発します。
4.1. The Fundamental Difference in Approaches
LLMの伝統的な検索システムと組み込まれたウェブ検索は線形的に動作します:クエリを受け取る →検索を実行する →結果を返す →答えを生成します。
Problems with the Linear Approach:
- Surface-level results: The system stops at the first facts it finds. 表面レベルの結果:システムが最初に発見した事実に止まる。
- No context continuity: Each search query is isolated from previous ones
- Missing connections: The system can't see relationships between different aspects of a topic
- ランダム品質: 結果は、最初のクエリの運に完全に依存します。
木に基づくアプローチは、人間の調査の自然なプロセスをモデル化することによって、これらの問題を解決します。
4.2. Anatomy of a Search Tree
具体的な例で深い検索の木の構造を調べましょう:
textNext.js vs WordPress for AI Projects/
├── Performance/
│ ├── Source 1
│ ├── Source 2
│ └── Impact of AI Libraries on Next.js Performance/
│ └── Source 7
├── Development Costs/
│ ├── Source 3
│ └── Source 4
└── SEO and Indexing/
├── Source 5
└── Source 6
First-level branchesこれらは、当社の例では、パフォーマンス、コスト、SEOです これらのサブトピックは、ランダムに形成されていません - LLMは、クエリのセマンティックな空間を分析し、主要な研究方向を特定します。
Tree leaves are specific sources (articles, documents, studies) found for each sub-query. Each leaf contains factual information that will be included in the final report.
Recursive branchesこのアーキテクチャの最も強力な機能です。システムが発見したソースを分析すると、追加の調査を必要とするテーマの新しい側面を発見することができます。これらの側面は新しいサブクエリとなり、独自の分支を生成します。
4.3. Practical Advantages of Tree Architecture
Research Completeness事実のランダムなコレクションの代わりに、システムは論理的に接続された知識マップを構築し、各要素が全体構造の中でその場所を持っている。
Adaptive Depth: システムは自動的にどの方向がより深い調査を必要とするかを決定します. 一つの分支が多くの関連するソースを生成する場合、システムはより深く行うことができます. 方向が非情報的である場合、検索は早期に終了します。
Contextual Connectivity: 各新しい検索クエリは、既に見つかった情報を考慮して作成されます. This allows for more precise and specific questions than isolated searches.
Quality Assessment各樹のレベルで、システムは発見された源の関連性と品質を評価し、騒音をフィルタリングし、最も価値のある情報に集中することができます。
4.4. Managing Tree Parameters
Search Depthシステムがどれだけの回帰レベルを実行できるかを決定します. 深さ1は、さらなる掘削なしに主要なサブクエリのみを意味します. 深さ3〜4は、真に詳細な調査を可能にします。
Search Width各レベルでサブクエリの数を制御します. 幅が多すぎると、多くの方向の表面的な調査につながります. 最適な幅は通常、レベルあたり3〜5つの主要な方向です。
Branching Factor is the average number of child nodes for each tree node. In the context of information search, this corresponds to the number of new sub-queries generated based on each found source.
4.5. Optimization and Problem Prevention
Cycle Preventionシステムは、無限の回帰ループを避けるために、すでに調査されている方向を追跡しなければなりません。
Dynamic Prioritizationより有望な分野はより深く調査すべきであり、より少なく情報的な指針はより早く終了することができる。
Parallel Investigation: Different tree branches can be investigated in parallel, significantly speeding up the process when sufficient computational resources are available.
Memory and Caching検索結果は、トピックが重なるときに外部APIへの繰り返しのリクエストを避けるためにキャッシュする必要があります。
Execution Time and Server Timeouts: これは、深い研究を実施する際にしばしば現れるもう一つの問題であり、特に深さが2レベルを超える場合に言えるでしょう。
4.6. The Bottom Line: From Chaos to System
ツリーアーキテクチャは、情報検索の混沌としたプロセスを体系的な調査に変え、それぞれの要素が総合的な知識構造に位置づけられ、これはAIエージェントが経験豊富な研究者として働くことを可能にします - 事実を収集するだけでなく、調査対象の総合的な理解を構築します。
The result?AIシステムは、人間の研究者のように考えるが、機械規模とスピードで動作する。次のセクションでは、この建築ビジョンを現実にする技術的実装に浸ります。
Ready to see how we translate this conceptual framework into production code? Let's explore the technical stack that powers recursive intelligence.
5. The "Search-Evaluate-Deepen" Cycle: Implementing True Recursion
「Search-Evaluate-Deepen」サイクル: True Recursion を実装するリクルシブなインターネット解析は技術的な機能だけではなく、真にインテリジェントなAIエージェントを作成するための根本的な必要性です。検索結果の最初のページは、情報の氷山の頂点だけを表示します。
5.1. Data Architecture for Deep Investigation
生産実装では、システムはそれぞれのリキュレーションレベルで知識を蓄積する構造化されたデータタイプで動作します。
typescripttype Learning = {
learning: string;
followUpQuestions: string[];
};
type SearchResult = {
title: string;
url: string;
content: string;
publishedDate: string;
};
type Research = {
query: string | undefined;
queries: string[];
searchResults: SearchResult[];
knowledgeBaseResults: string[]; // Vector database responses
learnings: Learning[];
completedQueries: string[];
};
このデータ構造は、各回帰レベルで知識を蓄積し、調査全体のための統一された文脈を作成します - プロフェッショナルな研究とランダムな事実の収集を区別するものです。
5.2. Stage 1: "Search" — Intelligent Query Generation
システムは単一の検索クエリに依存しません。代わりに、LLMインテリジェンスを使用して複数のターゲットクエリを生成します。
typescriptconst generateSearchQueries = async (query: string, breadth: number) => {
const {
object: { queries },
} = await generateObject({
model: mainModel,
prompt: `Generate ${breadth} search queries for the following query: ${query}`,
schema: z.object({
queries: z.array(z.string()).min(1).max(10),
}),
});
return queries;
};
Key insight: THEbreadth
パラメータは、研究の幅を制御します - 並行して調査される異なるトピックの側面の数です. This is where the magic happens: instead of linear search, you get exponential coverage.
5.3. Stage 2: "Evaluate" — AI-Driven Result Filtering
発見されたすべてのソースが同等に価値があるわけではありません。システムは、それぞれの結果をインテリジェントに評価するためのツールを備えたAIエージェントを使用しています。
typescriptconst searchAndProcess = async (/* parameters */) => {
const pendingSearchResults: SearchResult[] = [];
const finalSearchResults: SearchResult[] = [];
await generateText({
model: mainModel,
prompt: `Search the web for information about ${query}, For each item, where possible, collect detailed examples of use cases (news stories) with a detailed description.`,
system: "You are a researcher. For each query, search the web and then evaluate if the results are relevant",
maxSteps: 10,
tools: {
searchWeb: tool({
description: "Search the web for information about a given query",
parameters: z.object({ query: z.string().min(1) }),
async execute({ query }) {
const results = await searchWeb(query, breadth, /* other params */);
pendingSearchResults.push(...results);
return results;
},
}),
evaluate: tool({
description: "Evaluate the search results",
parameters: z.object({}),
async execute() {
const pendingResult = pendingSearchResults.pop();
if (!pendingResult) return "No search results available for evaluation.";
const { object: evaluation } = await generateObject({
model: mainModel,
prompt: `Evaluate whether the search results are relevant and will help answer the following query: ${query}. If the page already exists in the existing results, mark it as irrelevant.`,
output: "enum",
enum: ["relevant", "irrelevant"],
});
if (evaluation === "relevant") {
finalSearchResults.push(pendingResult);
}
return evaluation === "irrelevant"
? "Search results are irrelevant. Please search again with a more specific query."
: "Search results are relevant. End research for this query.";
},
}),
},
});
return finalSearchResults;
};
Revolutionary approach: The system uses an AI agent with tools that can repeatedly search and evaluate results until it finds sufficient relevant information. This is like having a research assistant who doesn't give up after the first Google search.
5.4. Vector Knowledge Base Integration
実際のパワーは、外部および内部の検索の相互作用から生じます. For each query, the system simultaneously searches the internet and its own vector knowledge base:
typescriptasync function getKnowledgeItem(query: string, vectorStoreId: string) {
const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
const response = await client.responses.create({
model: "gpt-4o-mini",
tools: [
{
type: "file_search",
vector_store_ids: [vectorStoreId],
max_num_results: 5,
},
],
input: [
{
role: "developer",
content: `Search the vector store for information. Output format language: ${process.env.NEXT_PUBLIC_APP_HTTP_LANG || "en"}`,
},
{
role: "user",
content: query,
},
],
});
return response.output_text;
}
5.5. Practical Implementation
主なリサーチループでは、システムは両方のソースを並行してクエリします。
typescriptfor (const query of queries) {
const searchResults = await searchAndProcess(/* web search */);
accumulatedResearch.searchResults.push(...searchResults);
if (vectorStoreId && vectorStoreId !== "") {
const kbResult = await getKnowledgeItem(query, vectorStoreId);
accumulatedResearch.knowledgeBaseResults.push(kbResult);
}
}
5.6. Stage 3: "Deepen" — Generating Follow-Up Questions
ステージ3:「深く」 - フォローアップ質問の生成最も強力な特徴は、すでに発見された情報に基づいて新しい研究方向を生成するシステムの能力です。
typescriptconst generateLearnings = async (query: string, searchResult: SearchResult) => {
const { object } = await generateObject({
model: mainModel,
prompt: `The user is researching "${query}". The following search result were deemed relevant.
Generate a learning and a follow-up question from the following search result:
<search_result>
${JSON.stringify(searchResult)}
</search_result>`,
schema: z.object({
learning: z.string(),
followUpQuestions: z.array(z.string()),
}),
});
return object;
};
5.7. Recursive Deepening
発見された各ソースは、次の検索レベルの基盤となる新しい質問を抽出するために分析されます。
typescriptfor (const searchResult of searchResults) {
const learnings = await generateLearnings(query, searchResult);
accumulatedResearch.learnings.push(learnings);
accumulatedResearch.completedQueries.push(query);
const newQuery = `Overall research goal: ${prompt}
Previous search queries: ${accumulatedResearch.completedQueries.join(", ")}
Follow-up questions: ${learnings.followUpQuestions.join(", ")}`;
await deepResearch(
/* search parameters */,
newQuery,
depth - 1,
Math.ceil(breadth / 2), // Reduce width at each level
vectorOfThought,
accumulatedResearch,
vectorStoreId
);
}
5.8. Managing Depth and Complexity
生産実装は、複雑性の増加を管理する方法を示しています。
typescriptconst deepResearch = async (
/* multiple filtering parameters */,
prompt: string,
depth: number = 2,
breadth: number = 5,
vectorOfThought: string[] = [],
accumulatedResearch: Research = {
query: undefined,
queries: [],
searchResults: [],
knowledgeBaseResults: [],
learnings: [],
completedQueries: [],
},
vectorStoreId: string
): Promise<Research> => {
if (depth === 0) {
return accumulatedResearch; // Base case for recursion
}
// Adaptive query formation based on "thought vector"
let updatedPrompt = "";
if (vectorOfThought.length === 0) {
updatedPrompt = prompt;
} else {
const vectorOfThoughItem = vectorOfThought[vectorOfThought.length - depth];
updatedPrompt = `${prompt}, focus on these important branches of thought: ${vectorOfThoughItem}`;
}
// ... rest of implementation
};
5.9. Key Optimizations
Width Reduction: :Math.ceil(breadth / 2)
各レベルでは、エクスポンシャルな成長を防ぐ
Thought Vector: :vectorOfThought
特定の分野に研究を向けることができる。
Context Accumulation: すべての結果は統一されたデータ構造に保存されます。
5.10. The Hybrid Advantage in Practice
Creating Unique Content: 公開データと内部知識を組み合わせると、他の誰も複製できないレポートを作成できます. あなたの競合相手は、同じ公開ソースにアクセスできますが、あなたの内部ケース、統計、専門知識ではありません。
Context Enrichment: 外部データは通貨と幅を提供し、内部データは深さと具体性を提供します。システムはオンラインで一般的な業界トレンドを見つけることができ、その後、これらのトレンドがあなたのビジネスにどのように影響するかに関する独自のデータでそれらを補完することができます。
Maintaining Currency: Even if web information is outdated or inaccurate, your internal knowledge base can provide fresher and verified data.
6. From Chaos to Order: Generating Expert-Level Reports
混沌から秩序へ:専門レベルのレポートの生成回復的な検索のすべてのレベルを完了した後、システムは膨大な量の異なる情報を蓄積します:ウェブ検索結果、ベクトルデータベースデータ、生成された学習、フォローアップの質問。
6.1. Context Accumulation: Building the Complete Picture
収集されたすべてのデータは1つに統合されます。Research
最終合成のための完全な文脈として機能する構造:
typescripttype Research = {
query: string | undefined; // Original query
queries: string[]; // All generated search queries
searchResults: SearchResult[]; // Web search results
knowledgeBaseResults: string[]; // Vector database responses
learnings: Learning[]; // Extracted insights
completedQueries: string[]; // History of completed queries
};
This isn't just data storageすべての洞察、すべての源、すべての接続は最終的な合成のために保存されます。
6.2. The Master Prompt: Where Intelligence Meets Synthesis
最終レポートの品質は、生成プロンプトの複雑さに直接依存します. The system uses OpenAI's most powerful model for synthesis:
typescriptconst generateReport = async (
research: Research,
vectorOfThought: string[],
systemPrompt: string
) => {
const { text } = await generateText({
model: openai("o3-mini"), // Most powerful model for synthesis
system: systemPrompt,
prompt:
"Use the following structured research data to generate a detailed expert report:\n\n" +
JSON.stringify(research, null, 2),
});
return text;
};
Key insight: 我々はAIに概要を求めるだけではなく、完全な研究データセットを提供し、ドメインエキスパートのように考えるよう求めている。
6.3. Structured Output: Beyond Simple Summaries
システムは単にテキストの概要を作成するだけでなく、タブレット、テーブル、プロ/コンリスト、およびプロのフォーマットを含む構造化されたドキュメントを生成します。
typescriptconsole.log("Research completed!");
console.log("Generating report...");
const report = await generateReport(research, vectorOfThought, systemPrompt);
console.log("Report generated! Saving to report.md");
fs.writeFileSync("report.md", report); // Save as Markdown
Why Markdown?AI によって生成されたコンテンツのための完璧なフォーマット - プロフェッショナルなプレゼンテーションに十分に構造化され、さまざまな出力フォーマットに十分に柔軟性があり、あらゆる現代の開発ワークフローで読み取れることができます。
6.4. Quality Control Through System Prompts
THEsystemPrompt
特定のニーズに基づくレポートのスタイルと構造をカスタマイズできます:
- 研究論文と学術分析のためのアカデミックスタイル
- 企業レポートと経営概要のためのビジネス形式
- 開発者向けコンテンツの技術文書
- 金融・戦略レポートのための投資分析
// Example: Business-focused system prompt const businessSystemPrompt = `You are a senior business analyst creating an executive report. Structure your analysis with:
- 行政概要
- 主な発見
- 市場の影響
Recommendations
- リスク評価
Use data-driven insights and provide specific examples from the research.`;
6.5. The Intelligence Multiplier Effect
Here's what makes this approach revolutionary: システムは単に情報を集計するのではなく、さまざまなソース間の接続から生じる洞察を合成します. 人間の研究者は、このレベルの調査を実行するのに8~12時間かかることができます. 私たちのシステムは10~60分でそれを実行し、しばしば人間が欠けている接続を発見します.
6.6. Production Considerations
Memory Management: 深い研究(深さ3〜4)で、蓄積された文脈は巨大化する可能性があります. The system needs to handle large JSON structures efficiently.
Token Optimization: 最終合成プロンプトは簡単にトークン制限を超えることができます. 生産実装には、最も貴重な洞察を保存するスマートトロンク戦略が必要です。
Quality Assurance: Not all generated reports are equal. Consider implementing scoring mechanisms to evaluate report completeness and coherence.
6.7. Real-World Impact
Time Compression: Hours of Human Research → Minutes of AI Analysis ヒューマン研究の時間
Depth EnhancementAIは、人間が可能な以上に多くのソースを処理し、接続することができます。
Consistency各レポートは、同じ厳格な方法論に従う。
Scalability同時に数十件のレポートを生成
7. Conclusion: Building the Future of AI Research
7.結論:AI研究の未来を構築インテリジェントなAIエージェントを作成することは、技術的な課題だけではなく、あらゆる製品の競争優位性となり得るアーキテクチャーソリューションです。
7.1. Key Architectural Principles
Think in Trees, Not Lines: Deep search is about exploring tree-structured information networks, where each discovery generates new questions and research directions.
Use AI-Native Tools: exa.ai のような専門的な検索エンジンはオプションではありません - 質の高い研究に不可欠です. They return clean data instead of HTML garbage that traditional search APIs provide.
Apply Recursion for Depth: 結果の最初のページは氷山の頂点にすぎません. Real insights lie in recursive deepening through the "Search-Evaluate-Deepen" cycle. 実際の洞察力は「Search-Evaluate-Deepen」サイクルを通じて再度の深化にあります。
Combine External and Internal Sources公共のインターネットデータと民間の組織知識の連携により、他の方法では得られないユニークなコンテンツが生み出されます。
Use LLMs for Both Analysis and Synthesisツールを備えたAIエージェントは、情報の検索だけでなく、その関連性を評価し、新しい質問を生成し、構造化されたレポートを作成することができます。
7.2. Production-Ready Results
Next.js 15、OpenAI、exa.aiに基づく実装は、このようなシステムを構築し、生産に展開することができることを示しています。https://github.com/aifa-agi/aifa-deep-researcer-starterすべてのキーコンポーネントを表示:
- Recursive Architecture with Depth and Width Management(深度と幅の管理)
- ウェブ検索とベクター知識ベースの統合
- AI Agents with Tools for Result Assessment(結果評価のためのツール)
- ファイル保存機能を備えたエキスパートレポート生成
7.3. Challenges and Limitations
Server Timeouts深度が 2 レベルを超える研究は、生産環境のための特別なソリューションを必要とし、数時間かかることがあります。
Exponential Complexity Growth: 深度レベルごとに、クエリの数が地理的に増加し、慎重なリソース管理が必要になります。
Source QualityAI検索エンジンでさえ、不正確な情報を返すことができ、追加の検証と事実検証が必要です。
7.4. Your Next Steps
今、あなたは完全なアーキテクチャの青図と実際のコードの例を持っています。
Start with Minimal Implementation: この記事の基本版を使用してプロトタイプを作成します。
Explore the Ready Solution●クローンhttps://github.com/aifa-agi/aifa-deep-researcer-starter現地で実験
Adapt to Your Needs: これらの原則を既存の製品やワークフローに統合する
8. Homework Challenge: Solving the Long-Wait UX Problem
ホーム > 課題 > 長く待つUX問題の解決我々は、深い研究のAIエージェントの技術的アーキテクチャをカバーしましたが、重要なUX問題が残っています:システムが数分間動作している間にユーザーが空の画面を見ているときに何をしますか? aifa-deep-researcer-starterからの実際の実装が示しているように、深さが2レベルを超える研究は何時間もかかりますが、ユーザーは静的なロード画面しか見ません。
8.1. The Problem: Server Silence Kills Trust
操作が数秒かかる典型的なウェブアプリケーションとは異なり、深層調査のAIエージェントは数分間沈黙することがあります。
- 待機不安:ユーザーはシステムが動いているか凍結しているかを知らない
- コントロールの喪失:どのくらい待つべきかわからない方法
- Declining Trust: アプリケーションが破損しているか、リクエストを「食べる」かのように見えます。
- High Bounce Rate:ユーザーは結果を待つことなくタブを閉じる
Perplexity、Claude、およびその他の現代のAI製品は、インタラクティブなアニメーション、進捗指標、ダイナミックなヒントでこれを解決します。
8.2. The Developer Challenge
この技術的な制約を想像してください: Next.js API ルートは長い作業(深層調査)を実行し、完了するまで中間データを送信できません。
How do you create engaging UX under these conditions that will retain users and reduce waiting anxiety?
8.3. Discussion Questions
UX Patterns and Visualization:
- サーバーが「沈黙している」ときに、深い検索プロセスを視覚化するためにどのようなUXパターンを適用しますか?
- 実際のサーバーステータスアップデートなしでも「ライブ」の進歩をどのようにシミュレートできますか?
- 偽の進捗バーを使用するべきですか、それともこれはユーザーの信頼を侵害しますか?
- どのようなアニメーションやマイクロインタラクションが「生きている」システムの感覚を作り出すのに役立ちますか?
User Communication:
- How do you explain to users why waiting might be long? What texts/illustrations to use?
- 見積もり時間が大きく異なる場合(2〜60分)を示すべきですか?
- プロセスの段階をどのように視覚化するか(「検索クエリを生成する...」、「ソースを分析する...」、「専門家レポートを作成する...」)
- ユーザーが待つ価値を理解するのに役立つメタファーは何ですか?
Technical Implementation:
- サーバーフィードバックなしでどのような楽観的なUIアプローチを適用できますか?
- 待機中にユーザーをサポートする「会話」インターフェイスをどのように実装しますか?
- 現地計算(Web Workers、WASM)を使用して進歩をシミュレートできますか?
- ユーザーが調査中にタブを閉じる場合は、どのように優雅な劣化を組織しますか?
8.4. Learning from the Best
Perplexity Deep Research、Bing Copilot、Google Search Generative Experienceで実装された研究ソリューション. あなたは何分間注目を留めるゲームのロード画面から何を取ることができますか? Netflix、YouTube、および他のプラットフォームは、長いコンテンツのロードの問題をどのように解決しますか?
Remember: ChatGPTの即時応答の時代では、品質の待機は競争上の利点になることができます. ユーザーはプロセスの価値を理解し、システムが彼らのために働いていると感じる場合に待つ用意があります.
9. About the Author and AIFA Project
著者とAIFAプロジェクトについて作者は、ロマン・ボルシヤノフ, 彼の最近の出版シリーズでは、彼が野心的なオープンソースプロジェクトで実装するツールと建築ソリューションを詳細に説明しています。AIFA(AIエージェントは、進化し、自己複製するアーキテクチャにおいて)
現在の実装では、AIFAはすでに、人工知能が主な相互作用方法となり、伝統的なウェブインターフェイスが補助視覚化として機能するユニークなユーザーインターフェイスを持つAIファーストアプリケーションを作成するための印象的なスタートアップテンプレートを表しています。
プロジェクトの長期的な目標は、AIエージェントが以下のような能力を持つ完全なAGIシステムへ進化することです。
- 独自の進化とアルゴリズムの改善
- Self-replication and creation of new specialized agents (自己複製と新たな専門エージェントの作成)
- 分散環境における競争と協力
- ウェブスペースとブロックチェーンネットワークにおける自動運用
この記事で取り上げられている深い検索は、将来のAGIエージェントが情報の研究だけでなく、意思決定、製品の作成、現実世界との相互作用を可能にするための基本的なスキルの1つに過ぎません。
プロジェクトの開発を観察し、最先端のAIテクノロジーで実験することに興味がある場合は、フォークすることを躊躇しないでください。AIFAリポジトリそれぞれのコミットメントは、私たちを真に自律的な人工知能の創造に近づかせます。
Ready to build the future?コードはオープンで、アーキテクチャは証明され、可能性は無限です。AI駆動の研究におけるあなたの次の突破点は、Gitのクローンだけです。