Aprendizagem pessoal com IA
e orientação prática
TRAE

Criação de um aplicativo RAG local com Ollama+LlamaIndex

breve

Este documento detalha como usar a estrutura do LlamaIndex para criar um aplicativo RAG (Retrieval-Augmented Generation) local. Ao integrar-se ao LlamaIndex, é possível criar um aplicativo RAG sistema que combina recursos de recuperação e geração para melhorar a eficiência da recuperação de informações e a relevância do conteúdo gerado. Os caminhos da base de conhecimento local podem ser personalizados, indexados por meio do LlamaIndex e, em seguida, usados para o diálogo contextual.

Observação: este documento contém trechos do código principal e explicações detalhadas. O código completo pode ser encontrado em notebook .

 

1. downloads de modelos

Este exemplo usa o llama3.1 você pode usar o modelo apropriado de acordo com a configuração do seu computador.

ollama pull llama3.1
ollama pull nomic-embed-text

 

2. instalação de dependências

pip install llama-index-llms-ollama
pip install llama-index-embeddings-ollama
pip install -U llama-index-readers-file

 

3. carregamento de dados

Carrega na memória todos os documentos da pasta de dados do diretório atual.

documents = SimpleDirectoryReader("data").load_data()

 

4. construção 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 : Global embed_model atributo. O código de exemplo atribui o modelo incorporado criado ao atributo global embed_model Atributos;
  • Settings.llm : Global llm atributo. O código de exemplo atribui o modelo de linguagem criado ao atributo global llm Atributos;
  • VectorStoreIndex.from_documentsÍndice de documentos: cria um índice usando documentos carregados anteriormente e os converte em vetores para recuperação rápida.

aprovar (um projeto de lei ou inspeção etc.) Settings Os atributos globais são definidos para que o modelo correspondente seja usado por padrão no processo posterior de criação e consulta de índices.

 

5. dados de consulta

query_engine = index.as_query_engine()
response = query_engine.query("Datawhale是什么?")
print(response)
  • index.as_query_engine()Mecanismo de consulta: Crie um mecanismo de consulta com base no índice construído anteriormente. Esse mecanismo de consulta pode receber consultas e retornar as respostas recuperadas.

 

6) Recuperação do contexto para o diálogo

Como os contextos recuperados podem ocupar um grande número de contextos LLM disponíveis, é necessário configurar o histórico de bate-papo com um número menor de contextos LLM. token Limitações!

# 检索上下文进行对话
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 Você pode selecionar o modo apropriado de acordo com o cenário de uso, e os modos suportados são os seguintes:

  • best(padrão): usar um proxy (react ou openai) com ferramentas de mecanismo de consulta;
  • contextUse o Retriever para obter o contexto;
  • condense_questionCondensar a pergunta: Condensar a pergunta;
  • condense_plus_contextCondensar a pergunta e usar um retriever para obter o contexto;
  • simpleMecanismo de bate-papo simples que usa LLM diretamente;
  • reactUse o agente de reação com a ferramenta do mecanismo de consulta;
  • openaiUso do agente openai com a ferramenta do mecanismo de consulta.

 

7. armazenar e carregar índices de vetores

  • storage_context.persist Armazenar índices de vetores.
  • load_index_from_storage Índice do vetor 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. aplicativos de streamlit

Esse exemplo também implementa um aplicativo de streamlit, que pode ser encontrado no app.py


As dependências necessárias estão listadas abaixo:

llama_index==0.10.62
streamlit==1.36.0

Observação

existir app.py Para não recarregar o modelo em diálogos sucessivos, você pode configurar a variável de ambiente OLLAMA_NUM_PARALLEL responder cantando OLLAMA_MAX_LOADED_MODELSO primeiro é para suportar o carregamento de vários modelos, portanto, é necessário pelo menos 8G adicionais de RAM.

OLLAMA_NUM_PARALLELProcessamento de várias solicitações de um único modelo ao mesmo tempo.

OLLAMA_MAX_LOADED_MODELSCarregamento de vários modelos ao mesmo tempo.

Exemplos

  1. Perguntas e respostas de texto único (Q&A)

Criação de um aplicativo RAG local com Ollama+LlamaIndex-1

  1. sessão de perguntas e respostas com textos múltiplos

Criação de um aplicativo RAG local com Ollama+LlamaIndex-2

 

Referências:Documentação do LlamaIndex

Não pode ser reproduzido sem permissão:Chefe do Círculo de Compartilhamento de IA " Criação de um aplicativo RAG local com Ollama+LlamaIndex
pt_BRPortuguês do Brasil