
У вашего репо есть секреты. Индексация говорит ИИ, где они находятся.
7 июля 2025 г.В эпоху развития A-A-A-Assist, способ взаимодействия с кодом, принципиально меняется. Больше команд строит ассистенты, помощники документации или внутренние агенты LLM, которые помогают разработчикам отвечать на такие вопросы, как:
"Где используется эта функция?"
"Как эта служба обрабатывает ошибки?"
"Какой файл определяет эту конфигурацию?"
Но чтобы ИИ ответил на эти вопросы точно и быстро, ему нужен доступ к правильному контексту, организованному в правильной структуре. Вот где входит индексация кодовой базы.
Почему индексирование вашей кодовой базы имеет значение LLMS (модели с большими языками), но они не знают вашу кодовую базу. Даже при тонкой настройке это часто непрактично или устарело. Рэг (поколение из поиска)-это более гибкое и эффективное решение: вместо того, чтобы пытаться запомнить все ваше репо, оно получает соответствующий контекст в режиме реального времени.
Но чтобы получить правильные фрагменты, вам необходимо индексировать кодовую базу.
Вот почему это важно:
Контекст-это все, что LLM имеет ограниченное контекстное окно (даже GPT-4O), и сбрасывание всего вашего репо в подсказку неэффективно и дорого. Индексация позволяет подготовить и структурировать ваш код так, чтобы при необходимости были извлечены только самые релевантные части.
Рэг опирается на семантический поиск традиционных инструментов поиска соответствует ключевым словам. Но агентам ИИ нужен семантический поиск, основанный на значении. Это означает, что ваша кодовая база должна быть встроена и сохранена в векторный индекс, поэтому можно найти аналогичные концепции, даже если они сформулированы по -разному.
Код изменений. Ваш индекс тоже должен. Программное обеспечение всегда развивается. Хороший индекс обновляет при изменении вашего кода. В противном случае, ваш LLM застрял в прошлом. В режиме реального времени или индексации избегает устаревших ответов.
Как индексировать кодовую базу для тряпки, вот упрощенная версия того, как это работаетhttps://github.com/cocoindex-io/cocoindexРамочная структура ETL с открытым исходным кодом для ИИ.
Только ~ 50 линий питона на пути индексации,Проверьте это🚀 и я буду признателен за звездой GitHub.
🧩 1. Разбейте свой код.
Используйте языковые канкеры, которые понимают границы функций, определения класса и комментарии. Кокоиндекс точно использует дерево-синтетер под капюшоном, чтобы отображать код.
Кокоиндекс использует возможности Tree-Sitter для разумного кода-кода на основе фактической синтаксической структуры, а не на произвольных разрывах линий. Эти синтаксически когерентные кусочки затем используются для создания более эффективного индекса для тряпичных систем, что позволяет более точный поиск кода и лучшее сохранение контекста.
Деревьяявляется инструментом генератора анализатора и библиотеки инкрементного анализа, ондоступныйв ржавчине 🦀.
Cocoindex будет выбрать код с помощью дерева. Мы используемSplitRecursively
Функция разделения файла на куски. Он интегрирован с деревниlanguage
параметр. Чтобы увидеть все поддерживаемые языковые имена и расширения, см. ДокументациюздесьПолем Все основные языки поддерживаются, например, Python, Rust, JavaScript, TypeScript, Java, C ++ и т. Д. Если он не указан или указанный язык не поддерживается, он будет рассматриваться как простой текст.
with data_scope["files"].row() as file:
file["chunks"] = file["content"].transform(
cocoindex.functions.SplitRecursively(),
language=file["extension"], chunk_size=1000, chunk_overlap=300)
🧠 2. Встройте ваш код, каждый кусок превращается в вектор с использованием модели встраивания (например, модели Openai-Embedding-3-Small, Cohere или с открытым исходным кодом).
Эти векторы представляют «значение» кода и хранятся в векторной базе данных.
@cocoindex.transform_flow()
def code_to_embedding(text: cocoindex.DataSlice[str]) -> cocoindex.DataSlice[list[float]]:
"""
Embed the text using a SentenceTransformer model.
"""
return text.transform(
cocoindex.functions.SentenceTransformerEmbed(
model="sentence-transformers/all-MiniLM-L6-v2"))
🔍 3. Запрос индекса
def search(pool: ConnectionPool, query: str, top_k: int = 5):
# Get the table name, for the export target in the code_embedding_flow above.
table_name = cocoindex.utils.get_target_storage_default_name(code_embedding_flow, "code_embeddings")
# Evaluate the transform flow defined above with the input query, to get the embedding.
query_vector = code_to_embedding.eval(query)
# Run the query and get the results.
with pool.connection() as conn:
with conn.cursor() as cur:
cur.execute(f"""
SELECT filename, code, embedding <=> %s::vector AS distance
FROM {table_name} ORDER BY distance LIMIT %s
""", (query_vector, top_k))
return [
{"filename": row[0], "code": row[1], "score": 1.0 - row[2]}
for row in cur.fetchall()
]
🔄 Наконец, сохраняйте индекс свежим
Если кто -то переименовает функцию, удаляет модуль или добавляет новую конечную точку, ваш индекс должен отражать это. Cocoindex поддерживает живую синхронизацию с GitHub или локальными папками, автоматически повторно индексируя измененные файлы.
Реальные варианты использования
- Внутренние агенты искусственного интеллекта, которые отвечают на вопросы разработчика, используя кодовую базу
- Инструменты внедрения, которые помогают новым инженерам быстрее понимать системы
- Помощники по рассмотрению кода, которые проверяют прошлые шаблоны или анти-паттерны
- Генерация документации, которая автоматически тянет соответствующие фрагменты кода
Индексирование превращает код в знание, ваша кодовая база полон неявных знаний - определения, шаблоны, структуры. Индексация делает эти знания доступными для AI. Без этого, ваш LLM слеп. С ним вы разблокируете копии, которые действительно полезны.
Если вы строите внутренние агенты, инструменты разработчика ИИ или даже просто хотите более умные документы, начните с индексации.
Исследуйте, как CocoIndex помогает вам сделать только с несколькими линиями Python, обновлений в реальном времени и умного языка, и с Rust-Performance.
Хотите, чтобы помощь индексировал вашу кодовую базу или создав агент AI на нее? Обратитесь - мы хотели бы услышать, над чем вы работаете. Вы можете проверить, чтобы узнать больше пошагового руководстваздесьПолем
Оценить звезду GitHub вhttps://github.com/cocoindex-io/cocoindex!
Оригинал