Google'のGemini-2.0を使用してコードベースエクスプローラーを構築します
大きくて乱雑なコードベースを理解するのが難しいと感じたことがありますか?または、コードを分析して探索するツールが実際にどのように機能するか疑問に思いましたか?この記事では、強力なコードベース探索ツールをゼロから構築することにより、これらの問題を解決します。静的コード分析と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で構築されたユーザーフレンドリーなコマンドラインインターフェイス、コードベースのインデックス作成、コード構造のクエリ、およびスタックトレースの分析のコマンドを提供します。 ハンズオンプロジェクトを開始
- 抽象的構文ツリーから定義を抽出します:
- これは、parse_codebase()のヘルパー関数です。 Pythonファイルの抽象的な構文ツリー(AST)が必要です。この関数は、クラス、関数、およびインポートの空のリストを備えた辞書を開始します。ここで、AST.Walk()は、ASTツリーのすべてのノードを繰り返します。 ASTモジュールは、すべてのクラス、機能、インポート、およびライン番号を識別します。次に、定義辞書にすべての定義を追加します コードベースの解析
- ステップ2:Typerとクエリプロセッサを初期化
- クラスから typer
- とクエリプロセッサオブジェクトを作成しましょう。
- ステップ3:Python Project Directoryのインデックス作成
- コード実装
- このファイルは、特定の文字列からパリンドロームを見つけます。 CLIアプリケーションを使用して、端末からこのファイルクエリをインデックス化します。 さあ、ターミナルを開き、コードを貼り付けて魔法を見てください。
- シームレスなコード探索のためにIDEプラグインと統合できます。 AI駆動型の自動デバッグシステム(私はそれに取り組んでいます)
- JavaScript、Java、TypeScripts、Rustなど、多くの人気言語のサポートを追加。 リアルタイムコード分析とLLMパワー付き提案の改善のための提案。
- Geminiまたはllama3を使用した自動ドキュメント オンデバイスコード探索のためのローカルLLM統合、機能の追加。
- 結論
- コードベースエクスプローラーは、ソフトウェア開発ツールでのAIの実用的なアプリケーションを理解するのに役立ちます。従来の静的分析と最新のAI機能を組み合わせることにより、コードベースの探索をより直感的で効率的にするツールを作成しました。このアプローチは、AIが既存のツールを置き換えることなく開発者ワークフローを補強する方法を示しており、複雑なコードベースの理解とアクセシビリティの新しいレイヤーを提供します。 この記事で使用されているすべてのコードは、
- です キーテイクアウト
- q
- 1。ツールは大きなコードベースをどのように処理しますか?このツールは、コードベース構造を解析および保存する永続的なインデックスシステムを使用して、毎回コードを再分析することなく効率的なクエリを可能にします。インデックスは、コードベースが変更された場合にのみ更新されます。ツールはオフラインで動作できますか?コードの解析とインデックス管理はオフラインで動作する可能性がありますが、Gemini APIを使用してコードベースをクエリするには、外部サーバーと通信するためにインターネット接続が必要です。 Ollamaを、コードベースを照会するために、LLAMA3やPHI-3などのオンデバイスLLMまたはSLMモデルを使用できるツールと統合できます。 LLM生成応答はどれくらい正確ですか?精度は、解析されたコードコンテキストの品質とGeminiモデルの機能の両方に依存します。このツールは、AIモデルに構造化されたコード情報を提供し、応答の精度を改善するのに役立ちますが、ユーザーは従来の手段を通じて重要な情報を検証する必要があります。
- この記事に示されているメディアは、Analytics Vidhyaが所有しておらず、著者の裁量で使用されています。
プロジェクトフォルダー構造
プロジェクトフォルダーの構造は、これらの
に似ていますプロジェクト環境のセットアップ
次のステップでプロジェクト環境をセットアップします:
|--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()
この関数は、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
指定されたディレクトリ内のすべてのサブディレクトリとファイルをループします。
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
forgemini 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:ライブラリをインポート
ここでは、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ファイルを作成し、以下のコードをファイルに配置します。
プロジェクトのインデックス付け
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
ログイン後にコピーのように見えます
プロジェクトのクエリ
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)
ログイン後にコピー
すべてが適切に行われた場合、端末にこれらの出力を取得します。 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
ログイン後にコピー
将来の開発
これは、
などの多くの興味深い機能で拡張できるファンデーションシステムのプロトタイプです。
構造コード解析は、コード分析の最も不均衡な手法です。
CodeBase Explorerはコードナビゲーションを簡素化し、開発者が複雑なコード構造を迅速に理解および管理できるようにします。
コードベースエクスプローラーはデバッグ効率を高め、依存関係を分析し、問題をより速く特定するためのツールを提供します。
geminiは、従来の静的分析と組み合わせると、コードの理解を大幅に向上させることができます。
CLIツールは、LLMアシストコード探査に強力なインターフェイスを提供できます。
よくある質問
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
を使用してモデルを認証します。モデルAPIを構成した後、特定のプロンプトで応答を生成するクエリメソッドを提供します。 クエリ処理システム このセクションでは、QueryProcessorクラスを実装してコードベースコンテキストを管理し、Geminiでクエリを有効にします。 必要なライブラリを読み込んだ後、load_dotenv
()google_api_key
forgemini 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を保存します。
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ファイルを作成し、以下のコードをファイルに配置します。
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
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
プロジェクトのクエリ
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)
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
将来の開発 これは、
などの多くの興味深い機能で拡張できるファンデーションシステムのプロトタイプです。構造コード解析は、コード分析の最も不均衡な手法です。
CodeBase Explorerはコードナビゲーションを簡素化し、開発者が複雑なコード構造を迅速に理解および管理できるようにします。
コードベースエクスプローラーはデバッグ効率を高め、依存関係を分析し、問題をより速く特定するためのツールを提供します。
geminiは、従来の静的分析と組み合わせると、コードの理解を大幅に向上させることができます。CLIツールは、LLMアシストコード探査に強力なインターフェイスを提供できます。
- よくある質問
以上がGoogle'のGemini-2.0を使用してコードベースエクスプローラーを構築しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











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

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

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

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

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

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

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

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