Как улучшить время выполнения запросов и улучшить индексацию в Ollama с помощью llama_index с использованием локальной мPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как улучшить время выполнения запросов и улучшить индексацию в Ollama с помощью llama_index с использованием локальной м

Сообщение Anonymous »

Я работаю над чат-ботом, использующим LlamaIndex на основе Ollama LLM. У меня есть набор PDF-файлов, я создаю чат-бота, который будет читать эти файлы и отвечать на их запросы. Изначально я использовал эту модель

Settings.embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-base-en-v1.5")

но индексация заняла много времени.
Теперь я использую это

model_name="distilbert-base-uncased"

эта модель "distilbert-base-uncased" уменьшила время моего индексирования, но ответы я получаю по моим запросам не очень хорошие результаты. Кроме того, время обработки запроса увеличивается (от 1 до 3 минут).
Я хочу улучшить время обработки запроса и получить более качественные ответы. Я новичок в этой области (LLM), поэтому прошу прощения, если мое объяснение неясно.
Мой результат с указанием времени:

Начало чтения документов...
Время загрузки документа: 38,18 секунды
Чтение документа завершено.
Настройка встраивания и языковой модели...
Нет найдена модель преобразователей предложений по названию дистиллят-база-без оболочки. Создание новой модели с объединением средних значений.
Время, затраченное на встраивание модели и настройку языковой модели: 1,84 секунды.
Настройка модели завершена.Начало создания индекса...
Время, затраченное на создание индекса: 305,35 секунды.
Создание индекса завершено.
Введите запрос (или введите «exit», чтобы выйти): что такое дженерики, и дайте мне пример программы для универсальных классов?
Хотите продолжить? этот запрос? (да, чтобы продолжить, нет, чтобы пропустить): да
Ответ: Возможность .....

Запрос выполнен за 100,83 секунды.
Время начала: 22 ноября 2024 г. 16:59:49
Время окончания: 22 ноября 2024 г. 17:01:29

Код: Выделить всё

import time
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.llms.ollama import Ollama

def log_time(start_time, action):
"""Helper function to log the time taken for a specific action."""
elapsed_time = time.time() - start_time
print(f"Time taken for {action}: {elapsed_time:.2f} seconds")
return elapsed_time

# Load documents from the 'data' directory
def load_documents(directory):
print("Starting to read documents...")
start_time = time.time()  # Start time for document loading
documents = SimpleDirectoryReader(directory).load_data()
log_time(start_time, "document loading")
print("Document reading completed.")
return documents

# Set up embedding model and language model
def setup_models():
print("Setting up the embedding and language models...")
start_time = time.time()  # Start time for model setup
Settings.embed_model = HuggingFaceEmbedding(model_name="distilbert-base-uncased")
Settings.llm = Ollama(model="llama3", request_timeout=3600.0)
log_time(start_time, "embedding model and language model setup")
print("Model setup completed.")

# Create an index from the loaded documents
def create_index(documents):
print("Starting index creation...")
start_time = time.time()  # Start time for index creation
index = VectorStoreIndex.from_documents(documents)
log_time(start_time, "index creation")
print("Index creation completed.")
return index

# Query the index
def query_engine_loop(query_engine):
while True:
user_query = input("Enter your query (or type 'exit' to quit): ")
if user_query.lower() == 'exit':
print("Exiting the query engine.")
break

confirm = input("Do you want to proceed with this query? (yes to proceed, no to skip): ").strip().lower()
if confirm == 'yes':
start_time = time.time()  # Start time for query execution
response = query_engine.query(user_query)
end_time = time.time()  # End time for query execution

print("Response:", response)
print(f"Query executed in {end_time - start_time:.2f} seconds.")
print(f"Start Time: {time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(start_time))}")
print(f"End Time: {time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(end_time))}")
elif confirm == 'no':
print("Query skipped.")
else:
print("Invalid input.  Please type 'yes' or 'no'.")

def main():
# Start by loading documents
documents = load_documents("data")

# Setup models
setup_models()

# Create index
index = create_index(documents)

# Create a query engine from the index
query_engine = index.as_query_engine()

# Start querying loop
query_engine_loop(query_engine)

if __name__ == "__main__":
main()
Спасибо!!!

Подробнее здесь: https://stackoverflow.com/questions/792 ... th-llama-i
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»