目次
学習目標
プロジェクトフォルダー構造
必要なすべてのライブラリをインストールします:
parse_codebase()
を使用して、GoogleからGemini Model APIを認証します。プロジェクトのルートで、.ENVファイルを作成し、Gemini APIキーを入れます。 api_keyhereを入手してください。
google_api_key
index
テストするには、以下の手順に従ってください:
ホームページ テクノロジー周辺機器 AI Google'のGemini-2.0を使用してコードベースエクスプローラーを構築します

Google'のGemini-2.0を使用してコードベースエクスプローラーを構築します

Mar 08, 2025 am 11:30 AM

大きくて乱雑なコードベースを理解するのが難しいと感じたことがありますか?または、コードを分析して探索するツールが実際にどのように機能するか疑問に思いましたか?この記事では、強力なコードベース探索ツールをゼロから構築することにより、これらの問題を解決します。静的コード分析とGeminiモデルを使用して、開発者がコードから有用な洞察をクエリ、理解、および獲得するのに役立つ使いやすいシステムを作成します。コードのナビゲート方法を変更する準備はできましたか?始めましょう!

学習目標

    オブジェクト指向プログラミングを使用した複雑なソフトウェア開発。
  • ASTまたは抽象的な構文ツリーを使用してPythonコードベースを解析して分析する方法。
  • GoogleのGemini LLM APIをコード分析のPythonアプリケーションと統合する方法の理解。 コードベース探索用のTyperコマンドラインベースのクエリシステム。
  • この記事は、

データサイエンスブログの一部として公開されました。 目次 よりスマートなコード探索の必要性

アーキテクチャの概要

    ハンズオンプロジェクトの起動
  • プロジェクト環境のセットアップ
  • 実装(CLI)
  • アプリケーションをテストします
  • 将来の開発
  • 結論
  • よくある質問
  • スマートコード探索の必要性
  • そのようなアプリケーションを構築することで、ソフトウェア開発の学習が得られます。オブジェクト指向のプログラミングパラダイムを使用して複雑なソフトウェアを実装する方法を学び、大規模なプロジェクトを処理する技術を習得するのに役立ちます(それはそれほど大きくはありませんが)
  • >
  • 第二に、今日のソフトウェアプロジェクトは、多くのファイルとフォルダーに記載されている数千行のコードで構成されています。 GREPやIDE検索機能など、コード探索への従来のアプローチ。開発者がコードベース内のより高いレベルの概念または関係を理解する必要がある場合、このタイプのシステムは不十分です。私たちのAIを搭載したツールは、この領域に大きな進歩を遂げることができます。当社のアプリケーションにより、開発者はコードベースについて簡単に英語で質問し、詳細なコンテキスト応答を受け取ることができます。
  • アーキテクチャの概要
  • このツールは、4つの主要なコンポーネント
  • で構成されています
    • コードパーサー:これはシステムの基礎であり、Pythonファイルを分析し、Pythonの抽象的構文ツリー(AST)モジュールを使用して構造を抽出する責任があります。クラス、方法、関数、およびインポートを識別します。コードベースの包括的なマップが作成されます。
    • geminiクライアント:LLMモデルとの通信を処理するGoogleのGemini API周辺のラッパー。これらのコンポーネントはAPI認証を管理し、クエリを送信して応答を受信するためのクリーンなインターフェイスを提供します。
    • クエリプロセッサ:これは、ジェミニが効果的に理解し処理できる方法でコードベースのコンテキストとクエリのフォーマットを担当するツールのメインエンジンです。コードベース構造の永続的なインデックスを維持し、パーサーとLLMの間の相互作用を管理します。
    • CLIインターフェイス:
    • Typerで構築されたユーザーフレンドリーなコマンドラインインターフェイス、コードベースのインデックス作成、コード構造のクエリ、およびスタックトレースの分析のコマンドを提供します。 ハンズオンプロジェクトを開始
    このセクションでは、プロジェクトを構築および実装するための最初の手順をガイドし、スムーズなスタートと効果的な学習体験を確保します。

    プロジェクトフォルダー構造

    プロジェクトフォルダーの構造は、これらの

    に似ています

    プロジェクト環境のセットアップ

    次のステップでプロジェクト環境をセットアップします:

    |--codebase_explorer/
    |src/
    ├──| __init__.py
    ├──| indexer/
    │   ├── __init__.py
    │   └── code_parser.py
    ├──| query_engine/
    │   ├── __init__.py
    │   ├── query_processor.py
    │   └── gemini_client.py
    |
    ├── main.py
    └── .env
    
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー

    必要なすべてのライブラリをインストールします:

    コードの実装
    #create a new conda env
    conda create -n cb_explorer python=3.11
    conda activate cb_explorer
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー

    コードベース解析システムの理解と実装から始めます。 2つの重要な関数

    があります
    pip install google-generativeai google-ai-generativelanguage
    pip install python-dotenv typer llama-index
    ログイン後にコピー
    ログイン後にコピー

    parse_codebase()

    extract_definitions()

    • 抽象的構文ツリーから定義を抽出します:
    • これは、parse_codebase()のヘルパー関数です。 Pythonファイルの抽象的な構文ツリー(AST)が必要です。この関数は、クラス、関数、およびインポートの空のリストを備えた辞書を開始します。ここで、AST.Walk()は、ASTツリーのすべてのノードを繰り返します。 ASTモジュールは、すべてのクラス、機能、インポート、およびライン番号を識別します。次に、定義辞書にすべての定義を追加します コードベースの解析

    この関数は、Pythonファイルのディレクトリをスキャンし、コンテンツを読み取り、構造を抽出します。

    import ast
    import os
    from typing import Dict, Any
    
    def extract_definitions(tree: ast.AST) -> Dict[str, list]:
        """Extract class and function definitions from AST."""
        definitions = {
            "classes": [],
            "functions": [],
            "imports": []
        }
        
        for node in ast.walk(tree):
            if isinstance(node, ast.ClassDef):
                definitions["classes"].append({
                    "name": node.name,
                    "lineno": node.lineno
                })
            elif isinstance(node, ast.FunctionDef):
                definitions["functions"].append({
                    "name": node.name,
                    "lineno": node.lineno
                })
            elif isinstance(node, ast.Import):
                for name in node.names:
                    definitions["imports"].append(name.name)
        return definitions
    ログイン後にコピー
    ログイン後にコピー
    関数は、ディレクトリパスを文字列として開始します。コードの構造の辞書を出力します。辞書は、各Pythonファイルの抽出されたデータを保存します。

    指定されたディレクトリ内のすべてのサブディレクトリとファイルをループします。

    os.walk()

    は、ディレクトリツリー全体を探索するための再帰的な方法を提供しました。 .py拡張子を終了するファイルを処理します python

    astモジュールを使用して、ファイルのコンテンツを抽象的構文ツリー(AST)に解析します。これは、ファイルの構造を表します。抽出されたツリーは、extract_definitions(tree)に渡されます。解析が失敗した場合、エラーメッセージを印刷しますが、他のファイルの処理を継続します。 クエリ処理エンジン

    クエリエンジンディレクトリでgemini_client.py and query_processor.pyという名前の2つのファイルを作成します

    gemini client

    このファイルは、

    < google_api_key>

    を使用して、GoogleからGemini Model APIを認証します。プロジェクトのルートで、.ENVファイルを作成し、Gemini APIキーを入れます。 api_keyhereを入手してください。

    ここでは、GoogleのGemini AIモデルと対話するために、a geminiclient

    クラスを定義します。 .envファイルから
    |--codebase_explorer/
    |src/
    ├──| __init__.py
    ├──| indexer/
    │   ├── __init__.py
    │   └── code_parser.py
    ├──| query_engine/
    │   ├── __init__.py
    │   ├── query_processor.py
    │   └── gemini_client.py
    |
    ├── main.py
    └── .env
    
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    google_api_key

    を使用してモデルを認証します。モデルAPIを構成した後、特定のプロンプトで応答を生成するクエリメソッドを提供します。 クエリ処理システム このセクションでは、QueryProcessorクラスを実装してコードベースコンテキストを管理し、Geminiでクエリを有効にします。 必要なライブラリを読み込んだ後、load_dotenv

    ()

    google_api_key

    for

    gemini api

    key。
    #create a new conda env
    conda create -n cb_explorer python=3.11
    conda activate cb_explorer
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー

    geminiembeddingクラスは、Googleサーバーから埋め込み001モデルを初期化します。 QueryProcessorクラスは、コードベースコンテキストを処理し、GeminicLient.Loading_ContextMethodロードJSONファイルからコードベース情報をロードするように設計されています。 thesaving_contextmethod現在のコードベースコンテキストをjsonファイルに保存してpersistence.save_contextmethodはコードベースコンテキストを更新し、すぐにusingsave_contextとtheformat_contextmethodを保存します。 コマンドラインアプリ実装(CLI) プロジェクトのsrcフォルダーにmain.pyファイルを作成し、手順に従ってください ステップ1:ライブラリをインポート

    • ステップ2:Typerとクエリプロセッサを初期化
    • クラスから
    • typer
    • とクエリプロセッサオブジェクトを作成しましょう。
    • ステップ3:Python Project Directoryのインデックス作成
    ここでは、

    index

    メソッドは端末のコマンドとして使用され、関数は将来のクエリと分析のために指定されたディレクトリのpythonコードベースにインデックスを付けます。
    |--codebase_explorer/
    |src/
    ├──| __init__.py
    ├──| indexer/
    │   ├── __init__.py
    │   └── code_parser.py
    ├──| query_engine/
    │   ├── __init__.py
    │   ├── query_processor.py
    │   └── gemini_client.py
    |
    ├── main.py
    └── .env
    
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー

    最初にディレクトリが存在するかどうかを確認し、次にparse_codebase関数を使用して、ディレクトリ内のpythonファイルの構造を抽出します。

    解析後、

    query_processorに解析されたコードベース構造が保存されます。すべてのプロセスは試行およびブロックを除いて、例外を解析中に注意して処理できるようにします。 Geminiモデルを使用して効率的なクエリのためにコードベースを準備します。 ステップ4:コードベースのクエリ

    インデックス作成後、コードベースの情報を理解または取得するためにコードベースを照会できます。

    最初に、

    query_processor
    #create a new conda env
    conda create -n cb_explorer python=3.11
    conda activate cb_explorer
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    がコードベースコンテキストを読み込んだかどうかを確認し、コンピューターのハードディスクからコンテキストをロードしてみてください。次に、

    query_processorのqueryメソッドを使用して、クエリを処理します。 そして最後に、LLMから端子への応答を typer.echo()メソッドを使用して印刷します。

    ステップ5:アプリケーションを実行

    アプリケーションをテスト

    テストするには、以下の手順に従ってください:

    pip install google-generativeai google-ai-generativelanguage
    pip install python-dotenv typer llama-index
    ログイン後にコピー
    ログイン後にコピー

    プロジェクトルートにフォルダー名インデックスを作成し、すべてのインデックスファイルを配置します。

    codebase_index.jsonを作成し、以前に作成されたフォルダー(インデックス)に入れます。

    次に、テスト用のPythonファイルを保存するルートにproject_testフォルダーを作成します

      project_testフォルダーにfind_palidrome.pyファイルを作成し、以下のコードをファイルに配置します。
    • コード実装
    • このファイルは、特定の文字列からパリンドロームを見つけます。 CLIアプリケーションを使用して、端末からこのファイルクエリをインデックス化します。
    • さあ、ターミナルを開き、コードを貼り付けて魔法を見てください。
    プロジェクトのインデックス付け

    import ast
    import os
    from typing import Dict, Any
    
    def extract_definitions(tree: ast.AST) -> Dict[str, list]:
        """Extract class and function definitions from AST."""
        definitions = {
            "classes": [],
            "functions": [],
            "imports": []
        }
        
        for node in ast.walk(tree):
            if isinstance(node, ast.ClassDef):
                definitions["classes"].append({
                    "name": node.name,
                    "lineno": node.lineno
                })
            elif isinstance(node, ast.FunctionDef):
                definitions["functions"].append({
                    "name": node.name,
                    "lineno": node.lineno
                })
            elif isinstance(node, ast.Import):
                for name in node.names:
                    definitions["imports"].append(name.name)
        return definitions
    ログイン後にコピー
    ログイン後にコピー

    output:

    1つのPythonファイルに正常にインデックスを表示することができます。そして、JSONデータは
    import ast
    import os
    from typing import Dict, Any
    
    def parse_codebase(directory: str) -> Dict[str, Any]:
        """Parse Python files in the directory and extract code structure."""
        code_structure = {}
        for root, _, files in os.walk(directory):
            for file in files:
                if file.endswith(".py"):
                    file_path = os.path.join(root, file)
                    with open(file_path, "r", encoding="utf-8") as f:
                        try:
                            content = f.read()
                            tree = ast.parse(content)
                            code_structure[file_path] = {
                                "definitions": extract_definitions(tree),
                                "content": content
                            }
                        except Exception as e:
                            print(f"Error parsing {file_path}: {e}")
        return code_structure
    ログイン後にコピー
    のように見えます

    プロジェクトのクエリ

    Google'のGemini-2.0を使用してコードベースエクスプローラーを構築します

    output:

    import os
    from typing import Optional
    from google import generativeai as genai
    from dotenv import load_dotenv
    
    load_dotenv()
    
    
    class GeminiClient:
        def __init__(self):
            self.api_key = os.getenv("GOOGLE_API_KEY")
            if not self.api_key:
                raise ValueError("GOOGLE_API_KEY environment variable is not set")
    
            genai.configure(api_key=self.api_key)
            self.model = genai.GenerativeModel("gemini-1.5-flash")
    
        def query(self, prompt: str) -> Optional[str]:
            """Query Gemini with the given prompt."""
            try:
                response = self.model.generate_content(prompt)
                return response.text
            except Exception as e:
                print(f"Error querying Gemini: {e}")
                return None
    ログイン後にコピー

    output:
    import os
    import json
    from llama_index.embeddings.gemini import GeminiEmbedding
    
    
    from dotenv import load_dotenv
    from typing import Dict, Any, Optional
    from .gemini_client import GeminiClient
    
    load_dotenv()
    
    gemini_api_key = os.getenv("GOOGLE_API_KEY")
    model_name = "models/embeddings-001"
    embed_model = GeminiEmbedding(model_name=model_name, api_key=gemini_api_key)
    
    
    class QueryProcessor:
        def __init__(self):
            self.gemini_client = GeminiClient()
            self.codebase_context: Optional[Dict[str, Any]] = None
            self.index_file = "./indexes/codebase_index.json"
    
        def load_context(self):
            """Load the codebase context from disk if it exists."""
            if os.path.exists(self.index_file):
                try:
                    with open(self.index_file, "r", encoding="utf-8") as f:
                        self.codebase_context = json.load(f)
                except Exception as e:
                    print(f"Error loading index: {e}")
                    self.codebase_context = None
    
        def save_context(self):
            """Save the codebase context to disk."""
            if self.codebase_context:
                try:
                    with open(self.index_file, "w", encoding="utf-8") as f:
                        json.dump(self.codebase_context, f, indent=2)
                except Exception as e:
                    print(f"Error saving index: {e}")
    
        def set_context(self, context: Dict[str, Any]):
            """Set the codebase context for queries."""
            self.codebase_context = context
            self.save_context()
    
        def format_context(self) -> str:
            """Format the codebase context for Gemini."""
            if not self.codebase_context:
                return ""
    
            context_parts = []
            for file_path, details in self.codebase_context.items():
                defs = details["definitions"]
                context_parts.append(
                    f"File: {file_path}\n"
                    f"Classes: {[c['name'] for c in defs['classes']]}\n"
                    f"Functions: {[f['name'] for f in defs['functions']]}\n"
                    f"Imports: {defs['imports']}\n"
                )
            return "\n\n".join(context_parts)
    
        def query(self, query: str) -> Optional[str]:
            """Process a query about the codebase."""
            if not self.codebase_context:
                return (
                    "Error: No codebase context available. Please index the codebase first."
                )
    
            prompt = f"""
            Given the following codebase structure:
            {self.format_context()}
            
            Query: {query}
            
            Please provide a detailed and accurate answer based on the codebase structure above.
            """
            return self.gemini_client.query(prompt)
    ログイン後にコピー

    Google'のGemini-2.0を使用してコードベースエクスプローラーを構築します

    すべてが適切に行われた場合、端末にこれらの出力を取得します。 Pythonコードファイルで試してみて、コメントセクションで出力は何ですか。私と一緒にいてくれてありがとう。
    import os
    import json
    import typer
    from pathlib import Path
    from typing import Optional
    from indexer.code_parser import parse_codebase
    from query_engine.query_processor import QueryProcessor
    ログイン後にコピー

    将来の開発 これは、

    などの多くの興味深い機能で拡張できるファンデーションシステムのプロトタイプです。
    • シームレスなコード探索のためにIDEプラグインと統合できます。
    • AI駆動型の自動デバッグシステム(私はそれに取り組んでいます)
    • JavaScript、Java、TypeScripts、Rustなど、多くの人気言語のサポートを追加。
    • リアルタイムコード分析とLLMパワー付き提案の改善のための提案。
    • Geminiまたはllama3を使用した自動ドキュメント
    • オンデバイスコード探索のためのローカルLLM統合、機能の追加。
    • 結論
    • コードベースエクスプローラーは、ソフトウェア開発ツールでのAIの実用的なアプリケーションを理解するのに役立ちます。従来の静的分析と最新のAI機能を組み合わせることにより、コードベースの探索をより直感的で効率的にするツールを作成しました。このアプローチは、AIが既存のツールを置き換えることなく開発者ワークフローを補強する方法を示しており、複雑なコードベースの理解とアクセシビリティの新しいレイヤーを提供します。 この記事で使用されているすべてのコードは、
    • です
    • キーテイクアウト

    構造コード解析は、コード分析の最も不均衡な手法です。

    CodeBase Explorerはコードナビゲーションを簡素化し、開発者が複雑なコード構造を迅速に理解および管理できるようにします。

    コードベースエクスプローラーはデバッグ効率を高め、依存関係を分析し、問題をより速く特定するためのツールを提供します。

    geminiは、従来の静的分析と組み合わせると、コードの理解を大幅に向上させることができます。

    CLIツールは、LLMアシストコード探査に強力なインターフェイスを提供できます。

      よくある質問
    • q
    • 1。ツールは大きなコードベースをどのように処理しますか?このツールは、コードベース構造を解析および保存する永続的なインデックスシステムを使用して、毎回コードを再分析することなく効率的なクエリを可能にします。インデックスは、コードベースが変更された場合にのみ更新されます。ツールはオフラインで動作できますか?コードの解析とインデックス管理はオフラインで動作する可能性がありますが、Gemini APIを使用してコードベースをクエリするには、外部サーバーと通信するためにインターネット接続が必要です。 Ollamaを、コードベースを照会するために、LLAMA3やPHI-3などのオンデバイスLLMまたはSLMモデルを使用できるツールと統合できます。 LLM生成応答はどれくらい正確ですか?精度は、解析されたコードコンテキストの品質とGeminiモデルの機能の両方に依存します。このツールは、AIモデルに構造化されたコード情報を提供し、応答の精度を改善するのに役立ちますが、ユーザーは従来の手段を通じて重要な情報を検証する必要があります。
    • この記事に示されているメディアは、Analytics Vidhyaが所有しておらず、著者の裁量で使用されています。

以上がGoogle'のGemini-2.0を使用してコードベースエクスプローラーを構築しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

クリエイティブプロジェクトのための最高のAIアートジェネレーター(無料&有料) クリエイティブプロジェクトのための最高のAIアートジェネレーター(無料&有料) Apr 02, 2025 pm 06:10 PM

この記事では、トップAIアートジェネレーターをレビューし、その機能、創造的なプロジェクトへの適合性、価値について説明します。 Midjourneyを専門家にとって最高の価値として強調し、高品質でカスタマイズ可能なアートにDall-E 2を推奨しています。

Meta Llama 3.2を始めましょう - 分析Vidhya Meta Llama 3.2を始めましょう - 分析Vidhya Apr 11, 2025 pm 12:04 PM

メタのラマ3.2:マルチモーダルとモバイルAIの前進 メタは最近、ラマ3.2を発表しました。これは、モバイルデバイス向けに最適化された強力なビジョン機能と軽量テキストモデルを特徴とするAIの大幅な進歩です。 成功に基づいてo

ベストAIチャットボットが比較されました(chatgpt、gemini、claude& more) ベストAIチャットボットが比較されました(chatgpt、gemini、claude& more) Apr 02, 2025 pm 06:09 PM

この記事では、ChatGpt、Gemini、ClaudeなどのトップAIチャットボットを比較し、自然言語の処理と信頼性における独自の機能、カスタマイズオプション、パフォーマンスに焦点を当てています。

10生成AIコーディング拡張機能とコードのコードを探る必要があります 10生成AIコーディング拡張機能とコードのコードを探る必要があります Apr 13, 2025 am 01:14 AM

ねえ、忍者をコーディング!その日はどのようなコーディング関連のタスクを計画していますか?このブログにさらに飛び込む前に、コーディング関連のすべての問題について考えてほしいです。 終わり? - &#8217を見てみましょう

トップAIライティングアシスタントは、コンテンツの作成を後押しします トップAIライティングアシスタントは、コンテンツの作成を後押しします Apr 02, 2025 pm 06:11 PM

この記事では、Grammarly、Jasper、Copy.ai、Writesonic、RytrなどのトップAIライティングアシスタントについて説明し、コンテンツ作成のためのユニークな機能に焦点を当てています。 JasperがSEOの最適化に優れているのに対し、AIツールはトーンの維持に役立つと主張します

AVバイト:Meta' s llama 3.2、GoogleのGemini 1.5など AVバイト:Meta' s llama 3.2、GoogleのGemini 1.5など Apr 11, 2025 pm 12:01 PM

今週のAIの風景:進歩、倫理的考慮、規制の議論の旋風。 Openai、Google、Meta、Microsoftのような主要なプレーヤーは、画期的な新しいモデルからLEの重要な変化まで、アップデートの急流を解き放ちました

従業員へのAI戦略の販売:Shopify CEOのマニフェスト 従業員へのAI戦略の販売:Shopify CEOのマニフェスト Apr 10, 2025 am 11:19 AM

Shopify CEOのTobiLütkeの最近のメモは、AIの能力がすべての従業員にとって基本的な期待であると大胆に宣言し、会社内の重大な文化的変化を示しています。 これはつかの間の傾向ではありません。これは、pに統合された新しい運用パラダイムです

最高のAI音声ジェネレーターの選択:レビューされたトップオプション 最高のAI音声ジェネレーターの選択:レビューされたトップオプション Apr 02, 2025 pm 06:12 PM

この記事では、Google Cloud、Amazon Polly、Microsoft Azure、IBM Watson、DecriptなどのトップAI音声ジェネレーターをレビューし、機能、音声品質、さまざまなニーズへの適合性に焦点を当てています。

See all articles