И дополню, что это в плане только поиска кода( 4 инструмента... ну, и редактирования в случае ast-grep). Все прочие инструменты code-index идут бонусом:)
То есть весь проект — это 108 файлов, разобранных tree-sitter'ом в 992 функции / 152 класса / 413 импортов / 6 372 вызова / 64 переменные. Плюс сырой исходник каждого файла лежит в file_contents, сжатый zstd.
Парсер раскладывает каждый файл на эти таблицы — буквально в функции write_code_to_db (crates/code-index-core/src/indexer/mod.rs:460): сначала upsert_file (метаданные: путь, content_hash, ast_hash, mtime, file_size), потом insert_functions / insert_classes / insert_imports / insert_calls / insert_variables, и в конце upsert_file_content (zstd-исходник). Структура строки в таблице functions (FunctionRecord) совпадает один-в-один с тем, что агент потом получает в ответе.
Что агент запрашивает и что получает
Агент даёт два поля — репо и имя символа — и получает точную функцию со строками, а не весь файл (который тут ~2000+ строк). Это и есть экономия токенов из статьи.
Вот это более объективное сравнение.
https://disk.yandex.ru/i/2yKBqjKnCPLeoA
И дополню, что это в плане только поиска кода( 4 инструмента... ну, и редактирования в случае ast-grep). Все прочие инструменты code-index идут бонусом:)
Проведу более объективное исследование, сорри.
Данные по БД самого проекта code-index
Из
get_stats, строкаrepo: "code-index"(C:\MCP-Servers\code-index):То есть весь проект — это 108 файлов, разобранных tree-sitter'ом в 992 функции / 152 класса / 413 импортов / 6 372 вызова / 64 переменные. Плюс сырой исходник каждого файла лежит в
file_contents, сжатый zstd.Парсер раскладывает каждый файл на эти таблицы — буквально в функции
write_code_to_db(crates/code-index-core/src/indexer/mod.rs:460): сначалаupsert_file(метаданные: путь, content_hash, ast_hash, mtime, file_size), потомinsert_functions/insert_classes/insert_imports/insert_calls/insert_variables, и в концеupsert_file_content(zstd-исходник). Структура строки в таблицеfunctions(FunctionRecord) совпадает один-в-один с тем, что агент потом получает в ответе.Что агент запрашивает и что получает
Агент даёт два поля — репо и имя символа — и получает точную функцию со строками, а не весь файл (который тут ~2000+ строк). Это и есть экономия токенов из статьи.
Запрос:
Ответ из БД (поля = колонки таблицы
functions, тело сокращено):