Creación de una aplicación RAG local con Ollama+LlamaIndex
Tutoriales prácticos sobre IAPublicado hace 6 meses Círculo de intercambio de inteligencia artificial 9.6K 00
breve
Este documento detallará cómo utilizar el marco LlamaIndex para construir una aplicación local RAG (Retrieval-Augmented Generation). Mediante la integración con LlamaIndex, es posible construir una aplicación local RAG. RAG que combina capacidades de recuperación y generación para mejorar la eficacia de la recuperación de información y la relevancia de los contenidos generados. Las rutas de las bases de conocimiento locales pueden personalizarse, indexarse mediante LlamaIndex y utilizarse después para el diálogo contextual.
Nota: Este documento contiene fragmentos de código básico y explicaciones detalladas. El código completo se encuentra en cuaderno .
1. Descarga de modelos
Este ejemplo utiliza el llama3.1
puede utilizar el modelo adecuado en función de la configuración de su ordenador.
ollama pull llama3.1
ollama pull nomic-embed-text
2. Instalación de dependencias
pip install llama-index-llms-ollama
pip install llama-index-embeddings-ollama
pip install -U llama-index-readers-file
3. Carga de datos
Carga en memoria todos los documentos de la carpeta de datos del directorio actual.
documents = SimpleDirectoryReader("data").load_data()
4. Construcción de índices
Settings.embed_model = OllamaEmbedding(model_name="nomic-embed-text")
Settings.llm = Ollama(model="llama3.1", request_timeout=360.0)
index = VectorStoreIndex.from_documents(
documents,
)
Settings.embed_model
: Globalembed_model
atributo. El código de ejemplo asigna el modelo incrustado creado al atributo globalembed_model
Atributos;Settings.llm
: Globalllm
atributo. El código de ejemplo asigna el modelo de lenguaje creado al atributo globalllm
Atributos;VectorStoreIndex.from_documents
Construye un índice a partir de documentos previamente cargados y los convierte en vectores para una rápida recuperación.
aprobar (una factura o inspección, etc.) Settings
Los atributos globales se establecen para que el modelo correspondiente se utilice por defecto durante la construcción del índice y las consultas posteriores.
5. Consulta de datos
query_engine = index.as_query_engine()
response = query_engine.query("Datawhale是什么?")
print(response)
index.as_query_engine()
Motor de consulta: Crea un motor de consulta basado en el índice previamente construido. Este motor de consulta puede recibir consultas y devolver las respuestas recuperadas.
6. Recuperación del contexto para el diálogo
Dado que el contexto recuperado puede ocupar un gran número de contextos LLM disponibles, es necesario configurar el historial de chat con un número menor de contextos ficha Limitaciones.
# 检索上下文进行对话
from llama_index.core.memory import ChatMemoryBuffer
memory = ChatMemoryBuffer.from_defaults(token_limit=1500)
chat_engine = index.as_chat_engine(
chat_mode="context",
memory=memory,
system_prompt=(
"You are a chatbot, able to have normal interactions."
),
)
response = chat_engine.chat("Datawhale是什么?")
print(response)
chat_mode
Puedes seleccionar el modo apropiado según el escenario de uso, y los modos soportados son los siguientes:
best
(por defecto): Utiliza un proxy (react u openai) con herramientas de motor de consulta;context
Utiliza el Recuperador para obtener el contexto;condense_question
: Resuma la pregunta;condense_plus_context
: Resume la pregunta y utiliza un recuperador para obtener el contexto;simple
: Motor de chat simple que utiliza LLM directamente;react
: Utilice el agente react con la herramienta de motor de consulta;openai
: Utiliza el agente openai con la herramienta query engine.
7. Almacenamiento y carga de índices vectoriales
storage_context.persist
Almacenar índices vectoriales.load_index_from_storage
Índice del vector de carga.
# 存储向量索引
persist_dir = 'data/'
index.storage_context.persist(persist_dir=persist_dir)
# 加载向量索引
from llama_index.core import StorageContext, load_index_from_storage
storage_context = StorageContext.from_defaults(persist_dir=persist_dir)
index= load_index_from_storage(storage_context)
8. aplicaciones streamlit
Este ejemplo también implementa una aplicación streamlit, que puede encontrarse en la sección app.py
A continuación se enumeran las dependencias necesarias:
llama_index==0.10.62
streamlit==1.36.0
Nota
existe app.py
Para no recargar el modelo en diálogos sucesivos, puede configurar la variable de entorno OLLAMA_NUM_PARALLEL
responder cantando OLLAMA_MAX_LOADED_MODELS
La primera es admitir la carga de varios modelos, por lo que se necesitan al menos 8 G adicionales de RAM.
OLLAMA_NUM_PARALLEL
: Procesar varias solicitudes de un mismo modelo al mismo tiempo.
OLLAMA_MAX_LOADED_MODELS
Carga varios modelos al mismo tiempo.
Ejemplos
- preguntas y respuestas en texto único (Q&A)

- sesión de preguntas y respuestas de texto múltiple

Referencias:Documentación de LlamaIndex
© declaración de copyright
Derechos de autor del artículo Círculo de intercambio de inteligencia artificial Todos, por favor no reproducir sin permiso.
Artículos relacionados
Sin comentarios...