
Как сделать поиск кодовой базы с помощью искусственного интеллекта (встраивание или нет)
10 июля 2025 г.Если вам когда -либо приходилось погрузиться в сложную кодовую базу и ощущались перегружены огромным объемом файлов, классов и конфигурации, вы не одиноки. Многие разработчики проводят бесчисленные часы, пытаясь понять кодовые базы, которые они не писали. Вот гдеАгент Q & A Codebase локальной кодовой базыПодойдет.
В этом посте мы рассмотрим:
- Какой агент Q & A Codebase
- Как построить один, используя встраивание
- Как заставить его работать, даже если встраивания недоступны
Что такое агент Q & A Codebase?
Агент Q & A Codebase, по сути, является помощником искусственного интеллекта, который может ответить на ваши вопросы о вашем собственном исходном коде. Думайте об этом как о программисту из ИИ, который понимает структуру и содержание вашего проекта.
Вместо вручную поиск файлов, вы можете задать такие вопросы, как:
- "Где установлено соединение базы данных?"
- "Что обрабатывает аутентификацию пользователя?"
- "Где определяются конечные точки API?"
Как это работает?
Основная идея включает в себя:
- Загрузка файлов кода из локальных каталогов
- Разделить их на более мелкие, управляемые текстовые куски
- Генерирование встраиваний для этих кусков
- Хранение их в векторной базе данных
- Получение соответствующих кусков на основе запросов пользователей
Построение агента с помощью встроенных
Требования
pip install langchain langchain-openai faiss-cpu tiktoken
Установите следующие переменные среды:
export AZURE_OPENAI_KEY=your-key
export AZURE_OPENAI_ENDPOINT=https://your-endpoint.openai.azure.com/
export AZURE_OPENAI_DEPLOYMENT=your-embedding-deployment
Код для подготовки и сохранения индекса
import os
import glob
import time
from typing import List
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import AzureOpenAIEmbeddings
from langchain_community.vectorstores import FAISS
REPOS = ["C:/YourCodeRepo"]
INDEX_SAVE_PATH = "codebase_index"
def prepare_and_save_index(repos: List[str], save_path: str = INDEX_SAVE_PATH):
all_docs = []
for repo in repos:
for ext in ["**/*.cs", "**/*.yaml", "**/*.go"]:
pattern = os.path.join(repo, ext)
file_paths = glob.glob(pattern, recursive=True)
for file_path in file_paths:
try:
with open(file_path, 'r', encoding='utf-8') as f:
content = f.read()
all_docs.append({"page_content": content, "metadata": {"source": file_path}})
except Exception as e:
print(f"Skipping {file_path}: {e}")
splitter = RecursiveCharacterTextSplitter(chunk_size=800, chunk_overlap=100)
chunks = splitter.create_documents([doc['page_content'] for doc in all_docs])
embeddings = AzureOpenAIEmbeddings(
azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT"),
azure_deployment=os.getenv("AZURE_OPENAI_DEPLOYMENT"),
openai_api_key=os.getenv("AZURE_OPENAI_KEY"),
)
embedded_chunks = []
for i, chunk in enumerate(chunks):
success = False
for attempt in range(5):
try:
embedded_chunks.append(chunk)
break
except Exception as e:
print(f"Error on chunk {i}, attempt {attempt+1}: {e}")
time.sleep(60)
vectorstore = FAISS.from_documents(embedded_chunks, embeddings)
vectorstore.save_local(save_path)
print(f"Vectorstore saved to {save_path}")
if __name__ == "__main__":
prepare_and_save_index(REPOS)
Что, если встраивания недоступны?
Если вы находитесь в Azure OpenAI и имеете доступ только к моделям, таким какgpt-4o
(Которые не поддерживают Entceddings), вы все равно можете создать менее мощную версию этого агента, используя базовый текстовый поиск.
Основанные на ключевых словах вопросы и ответы
import os
import glob
def search_codebase(repos: List[str], query: str):
matching_snippets = []
for repo in repos:
for ext in ["**/*.cs", "**/*.yaml", "**/*.go"]:
pattern = os.path.join(repo, ext)
file_paths = glob.glob(pattern, recursive=True)
for file_path in file_paths:
try:
with open(file_path, 'r', encoding='utf-8') as f:
content = f.read()
if query.lower() in content.lower():
matching_snippets.append((file_path, content[:500]))
except Exception as e:
continue
return matching_snippets
if __name__ == "__main__":
results = search_codebase(["C:/YourCodeRepo"], "authentication")
for path, snippet in results:
print(f"Found in {path}:")
print(snippet)
print("-"*40)
Этот подход не такой интеллектуальный, но все еще может обеспечить ценность при использовании мощной языковой модели путем вставки полученных фрагментов кода непосредственно в вашу подсказку.
Заключение
Агент Q & A Codebase с Enterdings предлагает быстрые, точные ответы на технические вопросы, используя поиск векторов искусственного интеллекта. Когда встраиваемые вставки недоступны, запасные подходы с использованием поиска ключевых слов и быстрого инженера все еще могут сделать ваш рабочий процесс более эффективным.
Попробуйте оба и посмотрите, какой из них соответствует вашим потребностям!
Оригинал