Pull to refresh

Comments 9

Repomap №... :) Для парсинга кода с отсечением лишнего в подобных проектах часто обращаются к treesitter (см. например https://aider.chat/2023/10/22/repomap.html). На Go к нему есть бинды. Однако, утилит делающих repomap на Go + treesitter до сих пор не встретил. Сам использую https://github.com/wyattcupp/codesnap, там тоже без treesitter. Жду, кто бы прикрутил это вместе :)

Пробовал конечно, но мне не нравится стек с nodejs. Поэтому поискал альтернативы. Есть на Go, Rust, Python реализации.

Зависит от модели, для лучшего результата советуют свои форматы:
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}")
Sign up to leave a comment.

Articles