Comments 9
Repomap №... :) Для парсинга кода с отсечением лишнего в подобных проектах часто обращаются к treesitter (см. например https://aider.chat/2023/10/22/repomap.html). На Go к нему есть бинды. Однако, утилит делающих repomap на Go + treesitter до сих пор не встретил. Сам использую https://github.com/wyattcupp/codesnap, там тоже без treesitter. Жду, кто бы прикрутил это вместе :)
Уже не первый пост встречаю запаковки кода, а вы не пробовали https://repomix.com?
Зависит от модели, для лучшего результата советуют свои форматы:
Claude - XML
ChatGPT - Markdown
Gemini - любой вроде
Подскажите. Правильно ли я понял суть. Структурно упаковать проект для того чтобы скормить его LLM. Что это дает? Чем такой подход лучше, нежели использования copilot llm в IDE?
Не использовал копилот, не знаю, как он питается контекстом проекта. Но вот курсор мне совсем не понравился (не говоря о том, что я слишком прирос к IDEA), он не есть контекст нормально, сколько его ни тыкай, а на тыканье уходит время.
К тому же, aistudio меня более чем устраивает по качеству ответов и удобству испольжования, а оплачивать API по ряду причин я не готов.
В общем, мне проще целенаправленно собрать контекст, по которому я хочу задать вопрос, вырезав весь не нужный мне в данный момент код. Это сработало эффективней всего :)
Как идея можно завернуть утилиту в mcp сервер и будет прям оч полезно.
Либо можно построить индекс из вашей папки с проектом, например ./data и отдать в локально развернутую ollama с любой нужной вам моделью. Далее пример с моделью llama3.1:
Скрытый текст
from llama_index.core import Settings, VectorStoreIndex, SimpleDirectoryReader, Settings, StorageContext, load_index_from_storage
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.llms.ollama import Ollama
Settings.llm = Ollama(model="llama3.1", temperature=0.1)
Settings.embed_model = "local:BAAI/bge-small-en-v1.5"
try:
storage_context = StorageContext.from_defaults(persist_dir="storage")
index = load_index_from_storage(storage_context)
except Exception as e:
print(f"Ошибка загрузки: {e}. Создаем новый индекс...")
documents = SimpleDirectoryReader("data", recursive=True).load_data()
index = VectorStoreIndex.from_documents(documents)
index.storage_context.persist(persist_dir="storage")
query_engine = index.as_query_engine(
similarity_top_k=3, # Использовать 3 наиболее релевантных фрагмента
response_mode="compact" # Компактный формат ответа
)
print("\nГотов к вопросам!\n")
while True:
question = input("\nВаш вопрос: ").strip()
try:
response = query_engine.query(question)
print("\nОтвет:")
print(response)
except Exception as e:
print(f"⚠️ Ошибка при обработке вопроса: {e}")
Аккуратно даем LLM контекст проекта