Generated on: 2025-05-18 11:01:28
- DeepWiki-Openの概要
- システムアーキテクチャ
- データフロー
- APIエンドポイント
- RAG(検索拡張生成)の実装
- 主要なフロントエンドコンポーネント
- Mermaidダイアグラム
- モデルプロバイダー
- カスタムモデルの選択
- デプロイメント
- カスタマイズオプション
- トラブルシューティング
Related topics: システムアーキテクチャ
Relevant source files
The following files were used as context for generating this wiki page:
DeepWiki-Openは、GitHub、GitLab、Bitbucketのリポジトリから美しくインタラクティブなWikiを自動的に作成するツールです。リポジトリ名を入力するだけで、コード構造の分析、包括的なドキュメントの生成、視覚的な図の作成を行い、それらすべてを簡単にナビゲートできるWikiに整理します。AIを活用したスマートな分析と、Mermaid記法による美しい図表により、コードの理解を深めることができます。 特徴
DeepWiki-Openは、以下の特徴を備えています。
- 即時ドキュメント生成: GitHub、GitLab、Bitbucketのリポジトリを数秒でWikiに変換します。 README.md, README.ja.md, README.zh.md, README.kr.md
- プライベートリポジトリ対応: 個人アクセストークンを使用して、プライベートリポジトリに安全にアクセスできます。 README.md, README.ja.md, README.zh.md, README.kr.md
- スマート分析: AIを活用してコード構造と関係を理解します。 README.md, README.ja.md, README.zh.md, README.kr.md
- 美しい図表: アーキテクチャとデータフローを視覚化するMermaid記法による図を自動生成します。 README.md, README.ja.md, README.zh.md, README.kr.md
- 簡単なナビゲーション: シンプルで直感的なインターフェースでWikiを探索できます。 README.md, README.ja.md, README.zh.md, README.kr.md
- 質問機能: RAG(Retrieval Augmented Generation)を活用したAIを使用してリポジトリとチャットし、正確な回答を得られます。 README.md, README.ja.md, README.zh.md, README.kr.md
- 詳細調査: 複雑なトピックを徹底的に調査する多段階研究プロセスを提供します。 README.md, README.ja.md, README.zh.md, README.kr.md
- 複数のモデルプロバイダー: Google Gemini、OpenAI、OpenRouter、ローカルOllamaモデルをサポートします。 README.md, README.ja.md, README.zh.md, README.kr.md
DeepWiki-Openは、AIを使用して以下の手順でWikiを生成します。 README.md, README.ja.md, README.zh.md, README.kr.md
- GitHub、GitLab、またはBitbucketリポジトリをクローンして分析します(トークン認証によるプライベートリポジトリを含む)。
- スマート検索のためのコードの埋め込みを作成します。
- コンテキスト対応AIでドキュメントを生成します(Google Gemini、OpenAI、OpenRouter、またはローカルOllamaモデルを使用)。
- コードの関係を説明する視覚的な図を作成します。
- すべてを構造化されたWikiに整理します。
- 質問機能を通じてリポジトリとのインテリジェントなQ&Aを可能にします。
- 詳細調査機能で深い研究能力を提供します。
graph TD
A[ユーザーがGitHub/GitLab/Bitbucketリポジトリを入力] --> AA{プライベートリポジトリ?}
AA -->|はい| AB[アクセストークンを追加]
AA -->|いいえ| B[リポジトリをクローン]
AB --> B
B --> C[コード構造を分析]
C --> D[コード埋め込みを作成]
D --> M{モデルプロバイダーを選択}
M -->|Google Gemini| E1[Geminiで生成]
M -->|OpenAI| E2[OpenAIで生成]
M -->|OpenRouter| E3[OpenRouterで生成]
M -->|ローカルOllama| E4[Ollamaで生成]
E1 --> E[ドキュメントを生成]
E2 --> E
E3 --> E
E4 --> E
D --> F[視覚的な図を作成]
E --> G[Wikiとして整理]
F --> G
G --> H[インタラクティブなDeepWiki]
classDef process stroke-width:2px;
classDef data stroke-width:2px;
classDef result stroke-width:2px;
classDef decision stroke-width:2px;
class A,D data;
class AA,M decision;
class B,C,E,F,G,AB,E1,E2,E3,E4 process;
class H result;
この図は、DeepWiki-Openの全体的なワークフローを示しています。ユーザーがリポジトリURLを入力するところから始まり、AIによる分析とドキュメント生成を経て、最終的にインタラクティブなWikiが作成されるまでの流れを表しています。 README.md, README.ja.md, README.zh.md, README.kr.md
DeepWiki-Openのプロジェクト構造は以下の通りです。 README.md, README.ja.md, README.zh.md, README.kr.md
deepwiki/
├── api/ # バックエンドAPIサーバー
│ ├── main.py # APIエントリーポイント
│ ├── api.py # FastAPI実装
│ ├── rag.py # 検索拡張生成
│ ├── data_pipeline.py # データ処理ユーティリティ
│ └── requirements.txt # Python依存関係
│
├── src/ # フロントエンドNext.jsアプリ
│ ├── app/ # Next.jsアプリディレクトリ
│ │ └── page.tsx # メインアプリケーションページ
│ └── components/ # Reactコンポーネント
│ └── Mermaid.tsx # Mermaid図レンダラー
│
├── public/ # 静的アセット
├── package.json # JavaScript依存関係
└── .env # 環境変数(作成する必要あり)
APIサーバーは、リポジトリのクローンとインデックス作成、RAG(Retrieval Augmented Generation)、ストリーミングチャット補完を提供します。 api/README.md
DeepWiki-Openは、AIの力を活用して、コードリポジトリのドキュメント作成を自動化し、理解を深めるための強力なツールです。簡単なセットアップと豊富な機能を備えており、開発者や技術者にとって非常に役立ちます。 README.md, README.ja.md, README.zh.md, README.kr.md
Related topics: データフロー, APIエンドポイント, 主要なフロントエンドコンポーネント
Relevant source files
The following files were used as context for generating this wiki page:
DeepWiki-Openプロジェクトのシステムアーキテクチャは、フロントエンドとバックエンドで構成され、リポジトリの分析、ドキュメントの生成、およびインタラクティブなWikiの作成を可能にします。フロントエンドはNext.jsで構築され、バックエンドはFastAPIを使用して構築されています。このアーキテクチャは、さまざまなモデルプロバイダー(Google Gemini、OpenAI、OpenRouter、Ollama)をサポートし、プライベートリポジトリへの安全なアクセスを提供します。
フロントエンドは、Reactコンポーネント、Next.jsルーティング、およびUI要素で構成されています。主なコンポーネントは次のとおりです。
src/app/[owner]/[repo]/page.tsx
: メインアプリケーションページで、リポジトリ情報の入力、Wikiの生成、および結果の表示を処理します。src/components/Markdown.tsx
: Markdownコンテンツをレンダリングします。src/components/Ask.tsx
: RAG(Retrieval-Augmented Generation)を利用したAIとの対話機能を提供します。src/components/WikiTreeView.tsx
: 生成されたWikiの構造をツリー形式で表示します。
graph TD
A[page.tsx] --> B(Markdown.tsx);
A --> C(Ask.tsx);
A --> D(WikiTreeView.tsx);
style A fill:#f9f,stroke:#333,stroke-width:2px
style B fill:#ccf,stroke:#333,stroke-width:2px
style C fill:#ccf,stroke:#333,stroke-width:2px
style D fill:#ccf,stroke:#333,stroke-width:2px
フロントエンドは、リポジトリURL、APIキー、モデルオプションなどのユーザー入力を収集し、APIリクエストをバックエンドに送信してWikiを生成します。生成されたWikiコンテンツは、Markdownコンポーネントを使用して表示され、WikiTreeViewコンポーネントを使用してナビゲートできます。Sources: src/app/[owner]/[repo]/page.tsx, src/components/Markdown.tsx, src/components/Ask.tsx, src/components/WikiTreeView.tsx
バックエンドは、FastAPIを使用して構築されたAPIサーバーで構成されています。主なモジュールは次のとおりです。
api/main.py
: APIのエントリポイントです。api/api.py
: FastAPIの実装が含まれています。リポジトリの分析、ドキュメントの生成、およびWiki構造の決定などのAPIエンドポイントを定義します。api/rag.py
: 検索拡張生成(RAG)の実装が含まれています。api/data_pipeline.py
: データ処理ユーティリティが含まれています。
graph TD
A[main.py] --> B(api.py);
B --> C(rag.py);
B --> D(data_pipeline.py);
style A fill:#f9f,stroke:#333,stroke-width:2px
style B fill:#ccf,stroke:#333,stroke-width:2px
style C fill:#ccf,stroke:#333,stroke-width:2px
style D fill:#ccf,stroke:#333,stroke-width:2px
バックエンドは、フロントエンドからのAPIリクエストを処理し、リポジトリのクローン、コード構造の分析、ドキュメントの生成、およびWiki構造の整理を行います。AIモデル(Google Gemini、OpenAIなど)を使用してドキュメントを生成し、Mermaidダイアグラムを作成してコードの関係を視覚化します。生成されたWikiコンテンツは、フロントエンドに返送され、表示されます。Sources: api/main.py, api/api.py, api/rag.py, api/data_pipeline.py
データフローは、フロントエンドからバックエンドへのAPIリクエスト、バックエンドでの処理、およびフロントエンドへの結果の返送で構成されています。
sequenceDiagram
participant FE as フロントエンド
participant BE as バックエンド
participant AI as AIモデル
FE->>BE: Wiki生成リクエスト
activate BE
BE->>BE: リポジトリをクローン
BE->>BE: コード構造を分析
BE->>AI: ドキュメント生成
activate AI
AI-->>BE: 生成されたドキュメント
deactivate AI
BE->>BE: Wiki構造を整理
BE-->>FE: Wikiコンテンツ
deactivate BE
FE->>FE: Wikiコンテンツを表示
- ユーザーは、フロントエンドでリポジトリURL、APIキー、およびモデルオプションを入力します。
- フロントエンドは、APIリクエストをバックエンドに送信します。
- バックエンドは、リポジトリをクローンし、コード構造を分析します。
- バックエンドは、AIモデルを使用してドキュメントを生成します。
- バックエンドは、Wiki構造を整理し、Wikiコンテンツをフロントエンドに返送します。
- フロントエンドは、Wikiコンテンツを表示します。Sources: src/app/[owner]/[repo]/page.tsx, api/api.py
DeepWiki-Openのシステムアーキテクチャは、フロントエンドとバックエンドで構成され、リポジトリの分析、ドキュメントの生成、およびインタラクティブなWikiの作成を可能にします。このアーキテクチャは、さまざまなモデルプロバイダーをサポートし、プライベートリポジトリへの安全なアクセスを提供します。データフローは、フロントエンドからバックエンドへのAPIリクエスト、バックエンドでの処理、およびフロントエンドへの結果の返送で構成されています。
Related topics: システムアーキテクチャ, RAG(検索拡張生成)の実装
Relevant source files
The following files were used as context for generating this wiki page:
DeepWikiプロジェクトにおけるデータフローは、リポジトリの分析からユーザーへの情報の提供まで、一連の処理段階を経て行われます。このプロセスは、リポジトリのクローン、コードの解析、埋め込みの生成、ドキュメントの生成、そして最終的なWikiの構築を含む複数のステップで構成されています。本ページでは、これらのステップを詳細に解説し、各段階で使用される主要なコンポーネントとデータ構造を明らかにします。
データフローは、ユーザーが提供するGitHub、GitLab、またはBitbucketのリポジトリURLから始まります。
- リポジトリのURLの受付: ユーザーは、DeepWikiのインターフェースを通じてリポジトリのURLを入力します。Sources: api/api.py
- リポジトリのクローン: バックエンドは、指定されたURLからリポジトリをローカル環境にクローンします。プライベートリポジトリの場合、適切なアクセストークンが使用されます。Sources: api/api.py
- コード構造の解析: クローンされたリポジトリのコード構造が解析され、ファイル間の関係や依存関係が特定されます。Sources: api/data_pipeline.py
解析されたコード構造を基に、コードの埋め込みが生成されます。これは、コードの意味的な情報を数値ベクトルとして表現するプロセスです。
- コードの分割: リポジトリ内のコードは、意味のあるチャンクに分割されます。Sources: api/data_pipeline.py
- 埋め込みの生成: 分割されたコードチャンクごとに、OpenAIなどのモデルを使用して埋め込みが生成されます。これらの埋め込みは、コードのセマンティックな意味を捉え、類似性検索を可能にします。Sources: api/rag.py
- ベクターデータベースへの保存: 生成された埋め込みは、Chromaなどのベクターデータベースに保存されます。これにより、高速な類似性検索が可能になり、RAG(Retrieval Augmented Generation)パイプラインでの利用が容易になります。Sources: api/rag.py
コード埋め込みが生成された後、AIモデルを使用してドキュメントが生成されます。
- コンテキストの取得: ユーザーの質問や要求に応じて、ベクターデータベースから関連するコードチャンクが検索されます。これにより、質問に対するコンテキストが提供されます。Sources: api/rag.py
- AIモデルによるドキュメント生成: 取得されたコンテキストとユーザーの質問を基に、Google Gemini、OpenAI、OpenRouter、またはローカルのOllamaモデルなどのAIモデルを使用してドキュメントが生成されます。Sources: api/rag.py
- ストリーミング応答: 生成されたドキュメントは、ストリーミング形式でユーザーに提供されます。これにより、リアルタイムなインタラクションが可能になります。Sources: api/api.py
graph TD
A[リポジトリURLの受付] --> B[リポジトリのクローン];
B --> C[コード構造の解析];
C --> D[コードの分割];
D --> E[埋め込みの生成];
E --> F[ベクターDBへの保存];
F --> G[コンテキストの取得];
G --> H[AIモデルによるドキュメント生成];
H --> I[ストリーミング応答];
この図は、DeepWikiにおけるデータフローの主要なステップを示しています。各ステップは、前のステップの結果を受け取り、次のステップに渡すことで、リポジトリの分析からドキュメントの生成までの一連の処理を完了します。
RAGパイプラインは、DeepWikiの中核となる機能であり、コンテキストに基づいた正確な回答を提供するために使用されます。
- 質問の受付: ユーザーからの質問がDeepWikiのインターフェースを通じて受け付けられます。Sources: api/rag.py
- 関連コードの検索: 質問に関連するコードチャンクが、ベクターデータベースから検索されます。この検索は、質問の埋め込みとコードチャンクの埋め込みとの類似性に基づいて行われます。Sources: api/rag.py
- コンテキストの生成: 検索されたコードチャンクは、質問に対するコンテキストとして使用されます。これにより、AIモデルは、リポジトリの具体的なコードに基づいて回答を生成できます。Sources: api/rag.py
- 回答の生成: コンテキストと質問を基に、AIモデルが回答を生成します。この回答は、リポジトリのコードとユーザーの質問の両方に基づいており、より正確でコンテキストに即した情報を提供します。Sources: api/rag.py
# api/rag.py
def get_response(repo_id: str, query: str, model_provider: str, model_name: str, token: str = None):
"""
Retrieves a response to a given query using Retrieval Augmented Generation (RAG).
Args:
repo_id (str): The ID of the repository to query.
query (str): The query to answer.
model_provider (str): The model provider to use (e.g., "google", "openai").
model_name (str): The name of the model to use (e.g., "gemini-1.5-pro", "gpt-4").
token (str, optional): The API token for the model provider, if required. Defaults to None.
Returns:
str: The response to the query.
"""
# Implementation details for RAG pipeline
pass
このコードスニペットは、RAGパイプラインの主要な関数を示しています。この関数は、リポジトリID、質問、モデルプロバイダー、モデル名、およびAPIトークンを受け取り、質問に対する回答を生成します。Sources: api/rag.py
DeepWikiのデータフローは、リポジトリのクローンからドキュメントの生成まで、一連の複雑な処理段階を経て行われます。各段階は、AIモデルとベクターデータベースを活用して、コンテキストに基づいた正確な情報を提供します。RAGパイプラインは、このデータフローの中核をなし、ユーザーの質問に対するインテリジェントな回答を可能にします。
Related topics: システムアーキテクチャ
Relevant source files
The following files were used as context for generating this wiki page:
DeepWiki-OpenプロジェクトのAPIエンドポイントは、リポジトリの分析、ドキュメントの生成、およびユーザーとのインタラクションを可能にする一連の機能を提供します。これらのエンドポイントは、FastAPIフレームワークを使用して実装されており、効率的で標準化された方法でアクセスできます。
このAPIは、指定されたGitHub、GitLab、またはBitbucketリポジトリをクローンし、そのコンテンツをインデックス化する機能を提供します。
-
メソッド: POST
-
説明: 指定されたリポジトリURLをクローンし、そのコンテンツのインデックスを作成します。
-
リクエストボディ:
{ "repo_url": "リポジトリのURL" }
-
レスポンス:
{ "message": "リポジトリのクローンとインデックス作成が開始されました" }
-
詳細: このエンドポイントは、リポジトリのコンテンツをローカルにクローンし、OpenAIを使用してファイルの埋め込みを作成し、その埋め込みをローカルデータベースに保存します。これにより、後続の質問応答のためのスマートな検索が可能になります。 api/main.py:26-30, api/api.py:25-31, api/README.md
このAPIは、リポジトリのコンテンツに基づいて質問に答えるために、検索拡張生成(RAG)を使用します。
-
メソッド: POST
-
説明: ユーザーの質問に基づいて、最も関連性の高いコードスニペットを検索し、そのコンテキストを使用してAIが応答を生成します。応答はリアルタイムでストリーミングされます。
-
リクエストボディ:
{ "repo_url": "リポジトリのURL", "question": "質問" }
-
レスポンス: ストリーミングされたテキストデータ
-
詳細: このエンドポイントは、ユーザーの質問に基づいて、最も関連性の高いコードスニペットを検索し、そのコンテキストを使用してAIが応答を生成します。応答はリアルタイムでストリーミングされます。 api/rag.py, api/api.py:55-61, api/README.md
-
メソッド: POST
-
説明: 生成されたWikiコンテンツを特定形式でエクスポートします。
-
リクエストボディ:
{ "repo_url": "リポジトリのURL", "type": "リポジトリの種類", "pages": [ { "title": "ページタイトル", "content": "ページコンテンツ" } ], "format": "エクスポート形式" }
-
レスポンス: 指定された形式でエクスポートされたWikiコンテンツを含むファイル。
-
詳細: このエンドポイントは、生成されたWikiコンテンツを特定形式でエクスポートします。 src/app/[owner]/[repo]/page.tsx
APIサーバーは、リポジトリのクローンとインデックス作成、RAG(検索拡張生成)、ストリーミングチャット補完を提供します。APIサーバーはFastAPIを使用して構築されています。 api/main.py, api/api.py, api/README.md
sequenceDiagram
participant User
participant Frontend
participant API Server
participant LLM
User->>Frontend: リポジトリURLと質問を送信
activate Frontend
Frontend->>APIServer: リクエストを送信 (repo_url, question)
activate APIServer
APIServer->>APIServer: リポジトリをクローン (初回のみ)
APIServer->>APIServer: コードスニペットを検索
APIServer->>LLM: コンテキストと質問を送信
activate LLM
LLM-->>APIServer: 応答を生成 (ストリーミング)
deactivate LLM
APIServer-->>Frontend: 応答をストリーミング
deactivate APIServer
Frontend-->>User: 応答を表示
deactivate Frontend
この図は、ユーザーがリポジトリURLと質問を送信し、フロントエンドがAPIサーバーにリクエストを送信し、APIサーバーがリポジトリをクローンしてコードスニペットを検索し、LLMが応答を生成し、APIサーバーが応答をフロントエンドにストリーミングし、フロントエンドが応答をユーザーに表示するシーケンスを示しています。
APIサーバーは、以下の環境変数を使用します。 api/README.md
GOOGLE_API_KEY
: Google Geminiモデルに必要なGoogle APIキーOPENAI_API_KEY
: OpenAIモデルに必要なOpenAI APIキーOPENROUTER_API_KEY
: OpenRouterモデルに必要なOpenRouter APIキーOPENAI_API_BASE
: カスタムOpenAI APIエンドポイント用のオプション設定
DeepWiki-OpenプロジェクトのAPIエンドポイントは、リポジトリの分析、ドキュメントの生成、およびユーザーとのインタラクションを可能にする一連の機能を提供します。これらのエンドポイントは、FastAPIフレームワークを使用して実装されており、効率的で標準化された方法でアクセスできます。
Related topics: データフロー
Relevant source files
The following files were used as context for generating this wiki page:
RAG(Retrieval-Augmented Generation、検索拡張生成)は、外部知識ソースから情報を取得し、それを利用して応答を生成する手法です。このWikiページでは、DeepWikiプロジェクトにおけるRAGの実装について、そのアーキテクチャ、コンポーネント、データフロー、および主要な機能について解説します。RAGは、リポジトリに関する質問応答機能や、詳細調査機能において重要な役割を果たしています。
DeepWikiにおけるRAGのアーキテクチャは、主にapi/rag.py
に実装されています。このモジュールは、質問応答を行うための中心的な役割を担い、データのインデックス作成、検索、および生成の各段階を統合します。
- データパイプライン: リポジトリのコードを解析し、ベクトル埋め込みを生成します。
api/data_pipeline.py
- ベクトルデータベース: 埋め込みベクトルを格納し、高速な類似性検索を可能にします。
- 検索: 質問に基づいて関連するコンテキストをベクトルデータベースから検索します。
- 生成: 検索されたコンテキストと質問に基づいて、応答を生成します。
graph TD
A[質問] --> B{検索};
B --> C[コンテキスト取得];
C --> D[生成];
D --> E[応答];
この図は、RAGの基本的なデータフローを示しています。質問が入力されると、システムは関連するコンテキストを検索し、それに基づいて応答を生成します。
データパイプラインは、api/data_pipeline.py
に実装されており、リポジトリのコードを解析し、ベクトル埋め込みを生成する役割を担います。このパイプラインは、RAGの性能に大きく影響を与えるため、重要なコンポーネントです。
- コードの解析: リポジトリのコードを解析し、テキストデータに変換します。
- テキスト分割: テキストデータをチャンクに分割します。
- 埋め込み生成: 各チャンクに対してベクトル埋め込みを生成します。
- ベクトルデータベースへの格納: 埋め込みベクトルをベクトルデータベースに格納します。
# api/data_pipeline.py
def process_repo(repo_path: str):
"""
Processes a repository by parsing code, generating embeddings, and storing them in a vector database.
"""
# コード解析、テキスト分割、埋め込み生成、ベクトルDBへの格納処理
pass
このコードスニペットは、リポジトリを処理し、ベクトル埋め込みを生成するプロセスの概要を示しています。api/data_pipeline.py
検索は、質問に基づいて関連するコンテキストをベクトルデータベースから検索するプロセスです。api/rag.py
に実装されており、RAGの性能に直接影響を与えます。
ベクトルデータベースに格納された埋め込みベクトルに対して、質問の埋め込みベクトルとの類似性を計算し、最も類似性の高いコンテキストを検索します。
# api/rag.py
def retrieve_context(query: str, vector_db):
"""
Retrieves relevant context from the vector database based on the query.
"""
# 類似性検索処理
pass
このコードスニペットは、質問に基づいて関連するコンテキストを検索するプロセスの概要を示しています。api/rag.py
生成は、検索されたコンテキストと質問に基づいて、応答を生成するプロセスです。api/rag.py
に実装されており、RAGの最終的な出力に影響を与えます。
検索されたコンテキストと質問をLLMに入力し、応答を生成します。LLMは、Google Gemini、OpenAI、OpenRouter、またはローカルOllamaモデルを使用できます。
# api/rag.py
def generate_response(query: str, context: str, llm):
"""
Generates a response based on the query and context using the specified LLM.
"""
# LLMによる応答生成処理
pass
このコードスニペットは、質問とコンテキストに基づいて応答を生成するプロセスの概要を示しています。api/rag.py
DeepWikiでは、RAGを利用した質問機能と詳細調査機能が提供されています。
質問機能は、RAGを使用してリポジトリに関する質問に答えます。ユーザーは質問を入力し、システムは関連するコンテキストを検索し、それに基づいて応答を生成します。
詳細調査機能は、複数ターンの研究プロセスでリポジトリ分析をより深く行います。この機能は、質問を送信する前に質問インターフェースの「詳細調査」スイッチをオンにすることで利用できます。
sequenceDiagram
participant User
participant DeepWiki
participant VectorDB
participant LLM
User->>+DeepWiki: 質問を送信
activate DeepWiki
DeepWiki->>+VectorDB: 質問に基づいてコンテキストを検索
activate VectorDB
VectorDB-->>-DeepWiki: 関連するコンテキストを返す
deactivate VectorDB
DeepWiki->>+LLM: コンテキストと質問に基づいて応答を生成
activate LLM
LLM-->>-DeepWiki: 応答を返す
deactivate LLM
DeepWiki-->>-User: 応答を表示
deactivate DeepWiki
このシーケンス図は、質問機能と詳細調査機能の基本的な流れを示しています。
このページでは、DeepWikiプロジェクトにおけるRAGの実装について解説しました。RAGは、リポジトリに関する質問応答機能や、詳細調査機能において重要な役割を果たしており、そのアーキテクチャ、コンポーネント、およびデータフローを理解することは、DeepWikiの機能を最大限に活用するために不可欠です。
Related topics: システムアーキテクチャ, Mermaidダイアグラム
Relevant source files
The following files were used as context for generating this wiki page:
このページでは、DeepWiki-Openプロジェクトの主要なフロントエンドコンポーネントについて説明します。これらのコンポーネントは、ユーザーインターフェースの構築と、リポジトリデータの表示、ユーザーとのインタラクションの処理において重要な役割を果たします。特に、Ask
コンポーネントとWikiTreeView
コンポーネントに焦点を当て、それぞれの機能、アーキテクチャ、およびプロジェクト内での連携について詳しく解説します。
Ask
コンポーネントは、ユーザーがリポジトリに関する質問を送信し、AIによる回答を得るためのインターフェースを提供します。このコンポーネントは、質問の入力、送信、および回答の表示を処理します。
Ask
コンポーネントは、以下の主要な機能を提供します。
- 質問の入力: ユーザーが質問を入力するためのテキストエリアを提供します。
- 質問の送信: ユーザーが質問を送信するためのボタンを提供し、送信された質問をAPIに送信します。
- 回答の表示: APIから受信した回答をリアルタイムで表示します。
- 詳細調査機能: 複雑なトピックに対して多段階の調査を実施するオプションを提供します。
// src/components/Ask.tsx
import React, { useState } from 'react';
import { FaComments } from 'react-icons/fa';
import { useLanguage } from '@/contexts/LanguageContext';
interface AskProps {
repoInfo: { owner: string; repo: string; type: string };
}
const Ask: React.FC<AskProps> = ({ repoInfo }) => {
const [question, setQuestion] = useState('');
const [answer, setAnswer] = useState('');
const [isLoading, setIsLoading] = useState(false);
const [isDeepResearch, setIsDeepResearch] = useState(false);
const { messages } = useLanguage();
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
setIsLoading(true);
setAnswer('');
try {
const response = await fetch('/api/chat/ask', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
repo_url: `https://github.com/${repoInfo.owner}/${repoInfo.repo}`,
type: repoInfo.type,
question: question,
deep_research: isDeepResearch
}),
});
if (!response.ok) {
throw new Error(`Error: ${response.status}`);
}
const reader = response.body?.getReader();
if (!reader) {
throw new Error('Response body is empty');
}
let accumulatedResponse = '';
while (true) {
const { done, value } = await reader.read();
if (done) {
break;
}
const textDecoder = new TextDecoder();
const chunk = textDecoder.decode(value);
accumulatedResponse += chunk;
setAnswer(accumulatedResponse);
}
} catch (error) {
console.error("Ask component error:", error);
setAnswer(`${messages.common?.error}: ${error}`);
} finally {
setIsLoading(false);
}
};
return (
<div className="rounded-md border border-[var(--border-color)] bg-[var(--background)]/50 p-4 mt-4">
<form onSubmit={handleSubmit} className="mb-4">
<div className="flex items-center mb-2">
<FaComments className="mr-2 text-[var(--accent-primary)]" />
<label htmlFor="question" className="text-sm font-medium text-[var(--foreground)]">
{messages.repoPage?.askAboutRepo}
</label>
</div>
<textarea
id="question"
className="w-full p-2 rounded-md bg-[var(--background)] border border-[var(--border-color)] text-[var(--foreground)] text-sm focus:outline-none focus:border-[var(--accent-primary)]"
placeholder={messages.ask?.placeholder}
value={question}
onChange={(e) => setQuestion(e.target.value)}
disabled={isLoading}
/>
<div className="flex justify-between items-center mt-2">
<label className="inline-flex items-center text-sm text-[var(--foreground)]">
<input
type="checkbox"
className="form-checkbox h-5 w-5 text-[var(--accent-primary)] rounded-md bg-[var(--background)] border border-[var(--border-color)] focus:ring-0 focus:outline-none focus:border-[var(--accent-primary)]"
checked={isDeepResearch}
onChange={(e) => setIsDeepResearch(e.target.checked)}
disabled={isLoading}
/>
<span className="ml-2">{messages.ask?.deepResearch}</span>
</label>
<button
type="submit"
className="px-4 py-2 rounded-md bg-[var(--accent-primary)] text-white text-sm font-medium hover:bg-[var(--highlight)] transition-colors disabled:bg-[var(--accent-primary)]/50 disabled:cursor-not-allowed"
disabled={isLoading}
>
{isLoading ? messages.common?.processing : messages.ask?.askButton}
</button>
</div>
</form>
{answer && (
<div className="mt-4">
<p className="text-sm text-[var(--foreground)]">
{answer}
</p>
</div>
)}
</div>
);
};
export default Ask;
Sources: src/components/Ask.tsx:1-84
- ユーザーが質問を入力し、「質問する」ボタンをクリックします。
handleSubmit
関数が呼び出され、ローディング状態がtrue
に設定されます。fetch
APIを使用して、質問がバックエンドの/api/chat/ask
エンドポイントに送信されます。リクエストボディには、リポジトリのURL、タイプ、質問内容、および詳細調査オプションが含まれます。- APIからのレスポンスがストリームとして読み込まれ、
answer
状態が更新され、回答がリアルタイムで表示されます。 - エラーが発生した場合、エラーメッセージが
answer
状態に設定されます。 - ローディング状態が
false
に設定されます。
Ask
コンポーネントは、以下の状態を管理します。
question
: ユーザーが入力した質問のテキスト。answer
: APIから受信した回答のテキスト。isLoading
: APIリクエストが処理中かどうかを示すブール値。isDeepResearch
: 詳細調査機能が有効かどうかを示すブール値。
Ask
コンポーネントは、useLanguage
フックを使用して、UIのテキストを国際化します。これにより、異なる言語のユーザーに対して適切なテキストが表示されます。例えば、messages.repoPage?.askAboutRepo
は、リポジトリについて質問するためのラベルを表示するために使用されます。 Sources: src/components/Ask.tsx:8-9
WikiTreeView
コンポーネントは、Wikiの構造をツリー形式で表示し、ユーザーがWikiのページをナビゲートできるようにします。
WikiTreeView
コンポーネントは、以下の主要な機能を提供します。
- Wiki構造の表示: Wikiのセクションとページをツリー形式で表示します。
- ナビゲーション: ユーザーがツリー内のページをクリックして、対応するコンテンツを表示できるようにします。
- 状態の管理: 選択されたページの状態を管理し、UIを更新します。
// src/components/WikiTreeView.tsx
import React, { useState } from 'react';
import { FaChevronDown, FaChevronUp, FaFileExport, FaFolder, FaHome } from 'react-icons/fa';
import Link from 'next/link';
import { useRouter } from 'next/navigation';
interface WikiPage {
id: string;
title: string;
content: string;
filePaths: string[];
importance: 'high' | 'medium' | 'low';
relatedPages: string[];
parentId?: string;
isSection?: boolean;
children?: string[];
}
interface WikiSection {
id: string;
title: string;
pages: string[];
subsections?: string[];
}
interface WikiStructure {
id: string;
title: string;
description: string;
pages: WikiPage[];
sections: WikiSection[];
rootSections: string[];
}
interface WikiTreeViewProps {
wikiStructure: WikiStructure | null;
owner: string;
repo: string;
}
const WikiTreeView: React.FC<WikiTreeViewProps> = ({ wikiStructure, owner, repo }) => {
const [expandedSections, setExpandedSections] = useState<string[]>([]);
const router = useRouter();
const toggleSection = (sectionId: string) => {
setExpandedSections(prev =>
prev.includes(sectionId) ? prev.filter(id => id !== sectionId) : [...prev, sectionId]
);
};
const isSectionExpanded = (sectionId: string) => expandedSections.includes(sectionId);
const renderTree = (sections: WikiSection[], pages: WikiPage[], parentId: string | null = null) => {
return sections
.filter(section => section.id.startsWith(parentId ? `${parentId}-` : 'section-'))
.map(section => (
<div key={section.id} className="mb-1">
<div
className="flex items-center justify-between p-2 rounded-md cursor-pointer hover:bg-[var(--background)]/50"
onClick={() => toggleSection(section.id)}
>
<div className="flex items-center">
<FaFolder className="mr-2 text-[var(--accent-primary)]" />
<span className="text-sm font-medium text-[var(--foreground)]">{section.title}</span>
</div>
{isSectionExpanded(section.id) ? <FaChevronUp /> : <FaChevronDown />}
</div>
{isSectionExpanded(section.id) && (
<div className="ml-4">
{renderPages(pages, section.id)}
{renderTree(sections, pages, section.id)}
</div>
)}
</div>
));
};
const renderPages = (pages: WikiPage[], parentId: string) => {
return pages
.filter(page => page.parentId === parentId)
.map(page => (
<Link
key={page.id}
href={`/${owner}/${repo}?page=${page.id}`}
className="block p-2 ml-4 rounded-md cursor-pointer hover:bg-[var(--background)]/50"
>
<span className="text-sm text-[var(--foreground)]">{page.title}</span>
</Link>
));
};
if (!wikiStructure) {
return <p>Loading...</p>;
}
return (
<div className="w-full max-w-md">
<Link
href={`/${owner}/${repo}`}
className="flex items-center p-2 rounded-md cursor-pointer hover:bg-[var(--background)]/50"
>
<FaHome className="mr-2 text-[var(--accent-primary)]" />
<span className="text-sm font-medium text-[var(--foreground)]">Home</span>
</Link>
{renderTree(wikiStructure.sections, wikiStructure.pages)}
</div>
);
};
export default WikiTreeView;
Sources: src/components/WikiTreeView.tsx:1-104
WikiTreeView
コンポーネントは、wikiStructure
プロパティとしてWikiの構造を受け取ります。renderTree
関数は、Wikiのセクションを再帰的にレンダリングします。renderPages
関数は、各セクション内のページをレンダリングします。- ユーザーがセクションをクリックすると、
toggleSection
関数が呼び出され、セクションの展開状態が切り替わります。 - ユーザーがページをクリックすると、
Link
コンポーネントを使用して、対応するページにナビゲートします。
WikiTreeView
コンポーネントは、以下の状態を管理します。
expandedSections
: 展開されているセクションのIDの配列。
WikiTreeView
コンポーネントは、app/[owner]/[repo]/page.tsx
ファイルで使用され、Wikiの構造を表示します。このコンポーネントは、owner
とrepo
のパラメータを受け取り、Wikiのページへのリンクを生成します。 Sources: src/app/[owner]/[repo]/page.tsx
Ask
コンポーネントとWikiTreeView
コンポーネントは、DeepWiki-Openプロジェクトの主要なフロントエンドコンポーネントであり、ユーザーがリポジトリに関する質問を送信したり、Wikiの構造をナビゲートしたりするためのインターフェースを提供します。これらのコンポーネントは、状態管理、データフロー、および国際化を考慮して設計されており、プロジェクトの使いやすさとアクセシビリティを向上させています。
Related topics: 主要なフロントエンドコンポーネント
Relevant source files
The following files were used as context for generating this wiki page:
DeepWikiプロジェクトにおけるMermaidダイアグラムは、コードの構造、アーキテクチャ、データフローを視覚的に表現するために使用されます。Mermaidは、テキストベースのダイアグラム定義言語であり、コード内でダイアグラムを記述し、それをレンダリングすることができます。これにより、開発者はコードの理解を深め、より効果的にコミュニケーションを取ることができます。
Mermaid.tsx
は、DeepWikiプロジェクトでMermaidダイアグラムを表示するためのReactコンポーネントです。このコンポーネントは、Mermaidダイアグラムの定義を受け取り、それをSVGとしてレンダリングします。また、ダイアグラムの表示状態を管理し、エラーハンドリングも行います。Sources: src/components/Mermaid.tsx
Mermaid.tsx
コンポーネントは、以下の要素で構成されています。
-
Props:
chart
: Mermaidダイアグラムの定義文字列を受け取ります。Sources: src/components/Mermaid.tsxclassName
: コンポーネントに適用するCSSクラス名(オプション)。Sources: src/components/Mermaid.tsx
-
State:
display
: ダイアグラムの表示状態を管理します。初期状態は"none"
です。Sources: src/components/Mermaid.tsxsvg
: レンダリングされたSVGダイアグラムを格納します。初期状態は''
です。Sources: src/components/Mermaid.tsxerror
: エラーメッセージを格納します。初期状態は''
です。Sources: src/components/Mermaid.tsxcontainer
: ダイアグラムのコンテナ要素への参照を保持します。Sources: src/components/Mermaid.tsx
-
useEffectフック:
- コンポーネントのマウント時に、Mermaidダイアグラムをレンダリングします。
chart
propが変更された場合にも、ダイアグラムを再レンダリングします。
-
エラーハンドリング:
- Mermaidダイアグラムのレンダリング中にエラーが発生した場合、エラーメッセージを
error
stateに設定し、エラーメッセージを表示します。
- Mermaidダイアグラムのレンダリング中にエラーが発生した場合、エラーメッセージを
-
SVG表示:
- レンダリングされたSVGダイアグラムを
div
要素内に表示します。 - SVGの表示状態は、
display
stateによって制御されます。
- レンダリングされたSVGダイアグラムを
以下は、Mermaid.tsx
コンポーネントの主要な部分のコードスニペットです。
// src/components/Mermaid.tsx
import React, { useState, useEffect, useRef } from 'react';
import mermaid from 'mermaid';
import { useTheme } from 'next-themes';
interface MermaidProps {
chart: string;
className?: string;
}
const Mermaid: React.FC<MermaidProps> = ({ chart, className }) => {
const [display, setDisplay] = useState<string>('none');
const [svg, setSvg] = useState<string>('');
const [error, setError] = useState<string>('');
const container = useRef<HTMLDivElement>(null);
const { theme } = useTheme();
useEffect(() => {
const renderMermaid = async () => {
if (!chart) {
return;
}
try {
mermaid.initialize({
startOnLoad: false,
theme: theme === 'dark' ? 'dark' : 'default',
});
const element = container.current;
if (element) {
element.innerHTML = chart;
const mermaidDom = await mermaid.contentLoaded();
if (mermaidDom) {
const renderedSvg = element.innerHTML;
setSvg(renderedSvg);
setDisplay('block');
setError('');
} else {
setError('Failed to render Mermaid diagram.');
setDisplay('none');
}
}
} catch (e: any) {
setError(`Mermaid error: ${e.message}`);
setDisplay('none');
}
};
renderMermaid();
}, [chart, theme]);
return (
<div className={className} style={{ position: 'relative' }}>
{error && (
<div className="text-red-500 absolute top-0 left-0 bg-white p-2 rounded shadow-md z-10">
Error: {error}
</div>
)}
<div
ref={container}
style={{ textAlign: 'center', display: display }}
className="mermaid"
data-processed="true"
/>
{svg && <div dangerouslySetInnerHTML={{ __html: svg }} />}
</div>
);
};
export default Mermaid;
DeepWikiプロジェクトでは、以下のようなMermaidダイアグラムが使用されています。
-
フロー図:
- 処理の流れやワークフローを視覚的に表現します。
graph TD
ディレクティブを使用して、上から下へのフロー図を作成します。
graph TD A[ユーザーがGitHub/GitLab/Bitbucketリポジトリを入力] --> AA{プライベートリポジトリ?} AA -->|はい| AB[アクセストークンを追加] AA -->|いいえ| B[リポジトリをクローン] AB --> B B --> C[コード構造を分析] C --> D[コード埋め込みを作成] D --> M{モデルプロバイダーを選択} M -->|Google Gemini| E1[Geminiで生成] M -->|OpenAI| E2[OpenAIで生成] M -->|OpenRouter| E3[OpenRouterで生成] M -->|ローカルOllama| E4[Ollamaで生成] E1 --> E[ドキュメントを生成] E2 --> E E3 --> E E4 --> E D --> F[視覚的な図を作成] E --> G[Wikiとして整理] F --> G G --> H[インタラクティブなDeepWiki] classDef process stroke-width:2px; classDef data stroke-width:2px; classDef result stroke-width:2px; classDef decision stroke-width:2px; class A,D data; class AA,M decision; class B,C,E,F,G,AB,E1,E2,E3,E4 process; class H result;
このフロー図は、DeepWikiの動作概要を示しています。ユーザーがリポジトリURLを入力するところから始まり、AIがドキュメントを生成し、Wikiとして整理されるまでの流れを視覚的に表現しています。Sources: README.ja.md
-
シーケンス図:
- コンポーネント間の相互作用やメッセージの交換を視覚的に表現します。
sequenceDiagram
ディレクティブを使用して、シーケンス図を作成します。
sequenceDiagram participant User participant Browser participant Server User->>Browser: リポジトリURLを入力 Browser->>Server: Wiki生成リクエスト activate Server Server->>Server: リポジトリをクローン Server->>Server: コード構造を分析 Server->>Server: ドキュメントを生成 Server-->>Browser: Wikiコンテンツ deactivate Server Browser->>User: Wikiを表示
このシーケンス図は、DeepWikiのWiki生成プロセスにおけるユーザー、ブラウザ、サーバー間の相互作用を示しています。
Mermaid.tsx
コンポーネントでは、mermaid.initialize
関数を使用して、Mermaidの初期化設定を行います。
mermaid.initialize({
startOnLoad: false,
theme: theme === 'dark' ? 'dark' : 'default',
});
startOnLoad
: ページ読み込み時にMermaidダイアグラムを自動的にレンダリングするかどうかを指定します。false
に設定することで、コンポーネントが明示的にレンダリングをトリガーするまで、ダイアグラムはレンダリングされません。theme
: Mermaidダイアグラムのテーマを指定します。dark
またはdefault
を設定できます。useTheme
フックを使用して、アプリケーションのテーマに基づいて動的にテーマを設定します。
Mermaidダイアグラムは、DeepWikiプロジェクトにおいて、コードの構造や動作を視覚的に表現するための重要な要素です。Mermaid.tsx
コンポーネントを使用することで、Mermaidダイアグラムを簡単にレンダリングし、DeepWikiのユーザーインターフェースに統合することができます。また、エラーハンドリングやテーマ設定などの機能も提供されており、開発者はより柔軟にMermaidダイアグラムを活用することができます。
Related topics: カスタムモデルの選択
Relevant source files
The following files were used as context for generating this wiki page:
DeepWikiは、複数の大規模言語モデル(LLM)プロバイダーをサポートする柔軟なアーキテクチャを採用しています。これにより、ユーザーはさまざまなモデルを選択し、それぞれの強みを活用できます。現在、Google、OpenAI、OpenRouter、Ollamaがサポートされています。このページでは、これらのプロバイダーの設定と使用方法について説明します。
DeepWikiは、以下のモデルプロバイダーをサポートしています。各プロバイダーには、対応するAPIキーが必要です(Ollamaを除く)。
- Google: Geminiモデルを利用できます。デフォルトは
gemini-2.0-flash
ですが、gemini-1.5-flash
やgemini-1.0-pro
なども利用可能です。Sources: api/config/generator.json - OpenAI: OpenAIのモデルを利用できます。デフォルトは
gpt-4o
ですが、o4-mini
なども利用可能です。Sources: api/config/generator.json - OpenRouter: 統一APIを通じて、Claude、Llama、Mistralなど、複数のモデルにアクセスできます。Sources: api/config/generator.json, api/openrouter_client.py
- Ollama: ローカルで実行されるオープンソースモデル(例:
llama3
)をサポートしています。APIキーは不要です。Sources: api/config/generator.json
各プロバイダーを使用するには、対応するAPIキーを環境変数に設定する必要があります。
| プロバイダー | 環境変数 | 必須 | 備考
DeepWikiはAIを使用して、GitHub、GitLab、またはBitbucketリポジトリをクローンして分析します。これには、トークン認証によるプライベートリポジトリも含まれます。次に、スマート検索のためのコードの埋め込みを作成し、コンテキスト対応AIを使用してドキュメントを生成します。このプロセスでは、Google Gemini、OpenAI、OpenRouter、またはローカルOllamaモデルを使用します。また、コードの関係を説明する視覚的な図を作成し、すべてを構造化されたWikiに整理します。最後に、質問機能を通じてリポジトリとのインテリジェントなQ&Aを可能にし、詳細調査機能で深い研究能力を提供します。Sources: README.md, README.ja.md
graph TD
A[ユーザーがGitHub/GitLab/Bitbucketリポジトリを入力] --> AA{プライベートリポジトリ?}
AA -->|はい| AB[アクセストークンを追加]
AA -->|いいえ| B[リポジトリをクローン]
AB --> B
B --> C[コード構造を分析]
C --> D[コード埋め込みを作成]
D --> M{モデルプロバイダーを選択}
M -->|Google Gemini| E1[Geminiで生成]
M -->|OpenAI| E2[OpenAIで生成]
M -->|OpenRouter| E3[OpenRouterで生成]
M -->|ローカルOllama| E4[Ollamaで生成]
E1 --> E[ドキュメントを生成]
E2 --> E
E3 --> E
E4 --> E
D --> F[視覚的な図を作成]
E --> G[Wikiとして整理]
F --> G
G --> H[インタラクティブなDeepWiki]
classDef process stroke-width:2px;
classDef data stroke-width:2px;
classDef result stroke-width:2px;
classDef decision stroke-width:2px;
class A,D data;
class AA,M decision;
class B,C,E,F,G,AB,E1,E2,E3,E4 process;
class H result;
api/openai_client.py
には、OpenAI APIとのやり取りを処理するクライアントが含まれています。このクライアントは、OpenAIモデルを使用してテキストの埋め込みを作成し、テキスト生成を行います。
OpenAIモデルを使用するには、OPENAI_API_KEY
環境変数を設定する必要があります。また、OPENAI_API_BASE
変数を設定することで、カスタムAPIエンドポイントを指定できます。これは、プライベートAPIチャネルを持つエンタープライズユーザーや、自己ホスト型またはカスタムデプロイされたLLMサービスを使用する組織に役立ちます。Sources: api/README.md
OpenAIクライアントは、APIキーを使用して初期化されます。
import openai
import os
openai.api_key = os.environ.get("OPENAI_API_KEY")
api/openrouter_client.py
には、OpenRouter APIとのやり取りを処理するクライアントが含まれています。OpenRouterは、複数のモデルプロバイダー(OpenAI、Anthropic、Google、Meta、Mistralなど)への統一APIを提供します。これにより、DeepWikiは単一のAPIキーで数百のAIモデルにアクセスできます。Sources: README.md
OpenRouterモデルを使用するには、OPENROUTER_API_KEY
環境変数を設定する必要があります。
OpenRouterクライアントを使用するには、モデル名とAPIキーを指定して初期化します。
from openrouter import OpenRouterClient
import os
client = OpenRouterClient(api_key=os.environ.get("OPENROUTER_API_KEY"))
DeepWikiは、柔軟なプロバイダーベースのモデル選択システムを実装しています。これにより、ユーザーは利用可能なモデルプロバイダーからモデルを選択できます。モデルプロバイダーとモデルのリストは、api/config/generator.json
ファイルで定義されています。Sources: api/README.md
DeepWikiでは、Google、OpenAI、OpenRouter、Ollamaの各プロバイダーがサポートされています。各プロバイダーには、デフォルトのモデルが設定されていますが、ユーザーは別のモデルを選択することもできます。
サービスプロバイダーは、事前定義されたオプションから選択するか、フロントエンドインターフェースでカスタムモデル識別子を入力することで、モデル提供を実装できます。Sources: README.md
DeepWikiのモデルプロバイダーアーキテクチャは、柔軟性と拡張性を提供します。複数のプロバイダーをサポートすることで、ユーザーは最適なモデルを選択し、DeepWikiの機能を最大限に活用できます。
Related topics: モデルプロバイダー
Relevant source files
The following files were used as context for generating this wiki page:
DeepWikiにおけるカスタムモデルの選択機能は、ユーザーが利用可能なAIモデルプロバイダー(Google、OpenAI、OpenRouter、Ollama)が提供するデフォルトのモデルリストにないモデルを使用できるようにするものです。これにより、ユーザーは特定のニーズに合わせて微調整されたモデルや、実験的なモデルをDeepWikiの機能で使用できます。
カスタムモデルの選択は、フロントエンドのUIコンポーネントとバックエンドのAPIエンドポイントが連携して機能します。
- フロントエンド (ModelSelectionModal.tsx, ModelSettings.tsx): ユーザーインターフェースを提供し、カスタムモデル名を入力させ、選択されたモデルをAPIに送信します。
- バックエンド (route.ts): APIエンドポイントとして機能し、利用可能なモデルのリストを提供し、カスタムモデルの選択を処理します。
- 設定 (src/messages/ja.json): UIで使用されるテキストを提供します。
- エージェント (src/utils/server/agent.ts): バックエンドで使用され、APIリクエストを処理します。
ModelSelectionModal.tsx
は、モデル選択のモーダルウィンドウを実装しています。
- 機能:
- モデルプロバイダー(Google、OpenAI、OpenRouter、Ollama)の選択。
- カスタムモデル名を入力するためのテキストフィールドの表示。
- 選択されたモデルを保存し、モーダルを閉じるためのボタン。
- コード例:
{selectedProviderState === 'custom' && (
<div className="mt-2">
<Label htmlFor="customModel">{t('form.customModelPlaceholder')}</Label>
<Input
id="customModel"
type="text"
placeholder={t('form.customModelPlaceholder')}
value={customSelectedModelState}
onChange={(e) => setCustomSelectedModelState(e.target.value)}
/>
</div>
)}
このコードスニペットは、カスタムモデルが選択された場合に表示されるテキストフィールドを示しています。ユーザーはここにカスタムモデルの名前を入力します。 Sources: src/components/ModelSelectionModal.tsx:116-126
ModelSettings.tsx
は、設定画面でモデル選択を管理するコンポーネントです。
- 機能:
- 選択されたモデルプロバイダーとモデルを表示。
- カスタムモデルが選択された場合に、その名前を表示。
- モデル選択モーダルを開くためのボタン。
- コード例:
<SettingsSection>
<SettingsLabel>{t('form.modelSelection')}</SettingsLabel>
<SettingsValue>
{selectedProviderState === 'custom' ? customSelectedModelState : selectedModelState}
</SettingsValue>
<SettingsAction onClick={handleOpenModal}>{t('form.changeModel')}</SettingsAction>
</SettingsSection>
このコードは、現在選択されているモデルを表示し、モデルを変更するためのボタンを提供します。 Sources: src/components/Settings/ModelSettings.tsx:24-29
route.ts
は、/api/models/config
エンドポイントを処理します。
- 機能:
- 利用可能なモデルのリストを返す。
- カスタムモデルが選択された場合に、そのモデルを処理する。
- コード例:
export async function GET() {
try {
const modelConfig = await getModelConfig();
return NextResponse.json(modelConfig);
} catch (error: any) {
console.error("Error fetching model config:", error);
return NextResponse.json({ error: error.message }, { status: 500 });
}
}
このコードは、モデル設定を取得し、JSONレスポンスとして返します。 Sources: src/app/api/models/config/route.ts:7-14
sequenceDiagram
participant User
participant ModelSelectionModal
participant ModelSettings
participant API (route.ts)
participant Server
User->>ModelSettings: モデル設定を開く
ModelSettings->>ModelSelectionModal: モデル選択モーダルを開く
ModelSelectionModal->>User: モデルプロバイダーとカスタムモデル名を選択
User->>ModelSelectionModal: 選択を送信
ModelSelectionModal->>API: モデル設定を更新
API->>Server: モデル設定を保存
Server-->>API: 成功
API-->>ModelSelectionModal: 成功
ModelSelectionModal-->>ModelSettings: モデル設定を更新
ModelSettings-->>User: 新しいモデル設定を表示
このシーケンス図は、カスタムモデルの選択がどのように行われるかを示しています。ユーザーは、モデル設定画面からモデル選択モーダルを開き、モデルプロバイダーとカスタムモデル名を選択します。選択が送信されると、APIがモデル設定を更新し、成功が返されます。最後に、新しいモデル設定がユーザーに表示されます。
カスタムモデルの選択機能は、DeepWikiの柔軟性を高め、ユーザーが特定のニーズに合わせてAIモデルを選択できるようにします。フロントエンドのUIコンポーネントとバックエンドのAPIエンドポイントが連携して機能し、シームレスなユーザーエクスペリエンスを提供します。
Relevant source files
The following files were used as context for generating this wiki page:
DeepWiki-Openプロジェクトのデプロイメントについて説明します。このドキュメントでは、Dockerを使用したデプロイメント方法と、手動セットアップの手順について解説します。
DeepWiki-Openは、Dockerを使用して簡単にデプロイできます。Dockerを使用すると、必要な依存関係がすべて含まれたコンテナを作成し、異なる環境で一貫した動作を保証できます。
Docker Composeを使用してDeepWiki-Openをデプロイする手順は以下の通りです。
-
リポジトリをクローンします。
git clone https://github.com/AsyncFuncAI/deepwiki-open.git cd deepwiki-open
Sources: README.ja.md
-
APIキーを含む
.env
ファイルを作成します。echo "GOOGLE_API_KEY=your_google_api_key" > .env echo "OPENAI_API_KEY=your_openai_api_key" >> .env echo "OPENROUTER_API_KEY=your_openrouter_api_key" >> .env
Sources: README.ja.md
-
Docker Composeで実行します。
docker-compose up
Sources: README.ja.md
この設定では、ホスト上の~/.adalflow
ディレクトリをコンテナ内の/root/.adalflow
にマウントします。このパスは以下のものを保存するために使用されます。
- クローンされたリポジトリ (
~/.adalflow/repos/
) - それらのエンベディングとインデックス (
~/.adalflow/databases/
) - 生成されたWikiのキャッシュ (
~/.adalflow/wikicache/
)
これにより、コンテナが停止または削除されてもデータが永続化されます。Sources: README.ja.md
Dockerイメージをローカルでビルドする場合は、以下の手順に従います。
-
リポジトリをクローンします。
git clone https://github.com/AsyncFuncAI/deepwiki-open.git cd deepwiki-open
Sources: README.ja.md
-
Dockerイメージをビルドします。
docker build -t deepwiki-open .
Sources: README.ja.md
-
コンテナを実行します。
docker run -p 8001:8001 -p 3000:3000 \ -e GOOGLE_API_KEY=your_google_api_key \ -e OPENAI_API_KEY=your_openai_api_key \ -e OPENROUTER_API_KEY=your_openrouter_api_key \ deepwiki-open
Sources: README.ja.md
docker-compose.yml
ファイルは、DeepWiki-Openのデプロイに必要なサービスを定義します。以下にその内容を示します。
version: "3.8"
services:
api:
build:
context: ./api
dockerfile: Dockerfile
ports:
- "8001:8001"
environment:
GOOGLE_API_KEY: ${GOOGLE_API_KEY}
OPENAI_API_KEY: ${OPENAI_API_KEY}
OPENROUTER_API_KEY: ${OPENROUTER_API_KEY}
volumes:
- ~/.adalflow:/root/.adalflow
depends_on:
- frontend
frontend:
build:
context: ./src
dockerfile: Dockerfile
ports:
- "3000:3000"
depends_on:
- api
このファイルは、api
とfrontend
の2つのサービスを定義しています。api
サービスは、APIサーバーを構築し、8001ポートで実行します。frontend
サービスは、フロントエンドアプリケーションを構築し、3000ポートで実行します。また、.env
ファイルからAPIキーを環境変数として設定し、~/.adalflow
ディレクトリをボリュームとしてマウントします。Sources: docker-compose.yml
Dockerを使用せずにDeepWiki-Openを手動でセットアップする手順は以下の通りです。
プロジェクトのルートに.env
ファイルを作成し、以下のキーを追加します。
GOOGLE_API_KEY=your_google_api_key
OPENAI_API_KEY=your_openai_api_key
OPENROUTER_API_KEY=your_openrouter_api_key
Sources: README.ja.md
pip install -r api/requirements.txt
python -m api.main
Sources: README.ja.md
npm install
npm run dev
Sources: README.ja.md
DeepWiki-Openのプロジェクト構造は以下の通りです。
deepwiki/
├── api/ # バックエンドAPIサーバー
│ ├── main.py # APIエントリーポイント
│ ├── api.py # FastAPI実装
│ ├── rag.py # 検索拡張生成
│ ├── data_pipeline.py # データ処理ユーティリティ
│ └── requirements.txt # Python依存関係
│
├── src/ # フロントエンドNext.jsアプリ
│ ├── app/ # Next.jsアプリディレクトリ
│ │ └── page.tsx # メインアプリケーションページ
│ └── components/ # Reactコンポーネント
│ └── Mermaid.tsx # Mermaid図レンダラー
│
├── public/ # 静的アセット
├── package.json # JavaScript依存関係
└── .env # 環境変数(作成する必要あり)
Sources: README.ja.md
DeepWiki-Openは、Dockerまたは手動セットアップを使用して簡単にデプロイできます。Dockerを使用すると、環境の一貫性を保ちながら迅速にデプロイできます。手動セットアップでは、より柔軟な設定が可能ですが、環境構築の手間がかかります。どちらの方法を選択するにしても、DeepWiki-Openはあなたのリポジトリのドキュメンテーションを自動化し、インタラクティブなWikiを生成する強力なツールです。
Relevant source files
The following files were used as context for generating this wiki page:
DeepWiki-Openでは、リポジトリのWiki生成プロセスをカスタマイズするための様々なオプションが提供されています。これらのオプションを使用することで、生成されるWikiの範囲、使用する言語モデル、およびその他の詳細を調整できます。このページでは、利用可能なカスタマイズオプションについて説明します。
Wikiの種類は、「包括的」または「簡潔」のいずれかを選択できます。
- 包括的: 構造化されたセクションとより多くのページを持つ詳細なWikiを生成します。Sources: src/messages/ja.json:37-37
- 簡潔: ページ数が少なく、必要な情報のみを含む簡素化されたWikiを生成します。Sources: src/messages/ja.json:39-39
DeepWiki-Openでは、Wiki生成に使用する言語モデルを選択できます。利用可能なモデルプロバイダーは以下のとおりです。
- Google: Google Geminiモデルを使用します。Sources: src/messages/ja.json:41-41
- OpenAI: OpenAIモデルを使用します。Sources: src/messages/ja.json:42-42
- OpenRouter: OpenRouter APIを通じて、複数のモデルにアクセスします。Sources: src/messages/ja.json:43-43, README.ja.md:237-249
- Ollama (ローカル): ローカルで実行されるOllamaモデルを使用します。Sources: src/messages/ja.json:44-44, README.ja.md:148-148
「カスタムモデルを使用」オプションを選択すると、カスタムモデル名を指定できます。Sources: src/messages/ja.json:47-48
プライベートリポジトリにアクセスするには、アクセストークンを追加する必要があります。Sources: src/messages/ja.json:50-52
ファイルフィルター設定を使用すると、Wiki生成から除外するファイルやディレクトリを指定できます。Sources: src/messages/ja.json:56-66
一行につき一つのディレクトリパスを指定します。./
で始まるパスはリポジトリルートからの相対パスです。Sources: src/messages/ja.json:60-62
一行につき一つのファイル名を指定します。ワイルドカード(*
)が使用可能です。Sources: src/messages/ja.json:63-65
DeepWiki-Openには、デフォルトで除外されるファイルとディレクトリがいくつか含まれています。これには、node_modules
、.git
、および一般的なビルドアーティファクトファイルが含まれます。Sources: src/messages/ja.json:55-56, src/messages/ja.json:66-71
Wikiを生成する言語を選択できます。Sources: src/messages/ja.json:28-28
DeepWiki-Openのカスタマイズオプションを使用すると、ニーズに合わせてWiki生成プロセスを調整できます。Wikiの種類、モデルオプション、リポジトリ設定、およびWiki言語をカスタマイズすることで、リポジトリの包括的かつ正確なドキュメントを作成できます。
Relevant source files
The following files were used as context for generating this wiki page:
DeepWiki-Open を使用する際に発生する可能性のある一般的な問題とその解決策について説明します。API キーの問題、接続の問題、生成の問題など、さまざまな問題に対するトラブルシューティングの手順を提供します。このページは、DeepWiki-Open のスムーズな使用を支援することを目的としています。
.env
ファイルがプロジェクトのルートに存在し、必要な API キーが含まれていることを確認してください。API キーが正しく設定されていない場合、DeepWiki は必要なサービスに接続できません。
GOOGLE_API_KEY=your_google_api_key
OPENAI_API_KEY=your_openai_api_key
OPENROUTER_API_KEY=your_openrouter_api_key
Sources: README.md
API キー全体が余分なスペースなしで正しくコピーされていることを確認してください。キーが正しくコピーされていない場合、API リクエストは認証されません。Sources: README.md
OpenRouter API キーが有効で、十分なクレジットがあることを確認してください。OpenRouter API キーが無効であるか、クレジットが不足している場合、OpenRouter 経由でモデルを使用できません。Sources: README.md, README.ja.md
API サーバーがポート 8001 で実行されていることを確認してください。API サーバーが実行されていない場合、フロントエンドはバックエンドと通信できません。Sources: README.md
python -m api.main
Sources: README.md
API はすべてのオリジンを許可するように設定されていますが、問題がある場合は、フロントエンドとバックエンドを同じマシンで実行してみてください。CORS エラーは、異なるオリジンからのリクエストが許可されていない場合に発生します。Sources: README.md
非常に大きなリポジトリの場合は、まず小さいものから試してみてください。大きなリポジトリは、生成プロセス中にエラーを引き起こす可能性があります。Sources: README.md
有効な GitHub、GitLab、または Bitbucket URL の形式を使用していることを確認してください。無効な形式のリポジトリ URL は、DeepWiki がリポジトリを正しくクローンできない原因となります。Sources: README.md
プライベートリポジトリの場合、適切な権限を持つ有効な個人アクセストークンを入力したことを確認してください。アクセストークンがないか、権限が不十分な場合、DeepWiki はプライベートリポジトリの構造を取得できません。Sources: README.md, README.ja.md
+ アクセストークンを追加
Sources: src/messages/ja.json
アプリは自動的に壊れた図を修正しようとします。図のレンダリングエラーは、Mermaid ダイアグラムの構文が正しくない場合に発生する可能性があります。Sources: README.md
- 両方のサーバーを再起動: 単純な再起動でほとんどの問題が解決することがあります。Sources: README.md
- コンソールログを確認: ブラウザの開発者ツールを開いて JavaScript エラーを確認します。Sources: README.md
- API ログを確認: API が実行されているターミナルで Python エラーを確認します。Sources: README.md
このトラブルシューティングガイドでは、DeepWiki-Open の使用中に発生する可能性のある一般的な問題に対する解決策を提供しました。API キーの問題、接続の問題、生成の問題など、さまざまな問題に対するトラブルシューティングの手順を説明しました。これらの手順に従うことで、DeepWiki-Open をスムーズに使用し、コードリポジトリのドキュメントを効率的に生成できます。