Я использовал RAG с LLAMA3 для бота AI. Я считаю, что RAG с chromadb работает намного медленнее, чем сам вызов LLM. Согласно результатам теста, для одной простой веб-страницы длиной около 1000 слов требуется более 2 секунд:
Time used for retrieving: 2.245511054992676
Time used for LLM: 2.1182022094726562
Вот мой простой код:
embeddings = OllamaEmbeddings(model = "llama3")
vectorstore = Chroma.from_documents(documents=splits, embedding=embeddings)
retriever = vectorstore.as_retriever()
question = "What is COCONut?"
start = time.time()
retrieved_docs = retriever.invoke(question)
formatted_context = combine_docs(retrieved_docs)
end = time.time()
print(f"Time used for retrieving: {end - start}")
start = time.time()
answer = ollama_llm(question, formatted_context)
end = time.time()
print(f"Time used for LLM: {end - start}")
Я обнаружил, что когда размер моей chromaDB составляет около 1,4 МБ, извлечение занимает более 20 секунд, а для LLM по-прежнему требуется всего около 3 или 4 секунд. Есть ли что-то, что мне не хватает? или сама технология RAG такая медленная?
Пожалуйста, отметьте это как ответ, если считаете, что это идеальный контекст для вашего случая.
RAG медленнее, чем чистый LLM или точно настроенный LLM, как объяснил @nbaua.
Если вам нужны более быстрые ответы в ваших пользовательских данных, вам необходимо точно настроить LLM, что позволит ему быстрее реагировать на пользовательские сценарии использования, но вам нужно больше мощности машины и остерегайтесь катастрофического забывания.
Или воспользуйтесь другими методами, такими как PEFT (точная настройка эффективных параметров).
Вы также можете попробовать LLM-агентный подход, который вызывает данные на основе RAG только при необходимости, это может быть более адаптивным решением.
Экспериментируйте с методами и выбирайте с умом
Похоже, мне нужно настроить LLAMA3, спасибо за ответ!