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
: Globalembed_model
atributo. O código de exemplo atribui o modelo incorporado criado ao atributo globalembed_model
Atributos;Settings.llm
: Globalllm
atributo. O código de exemplo atribui o modelo de linguagem criado ao atributo globalllm
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;context
Use o Retriever para obter o contexto;condense_question
Condensar a pergunta: Condensar a pergunta;condense_plus_context
Condensar a pergunta e usar um retriever para obter o contexto;simple
Mecanismo de bate-papo simples que usa LLM diretamente;react
Use o agente de reação com a ferramenta do mecanismo de consulta;openai
Uso 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_MODELS
O primeiro é para suportar o carregamento de vários modelos, portanto, é necessário pelo menos 8G adicionais de RAM.
OLLAMA_NUM_PARALLEL
Processamento de várias solicitações de um único modelo ao mesmo tempo.
OLLAMA_MAX_LOADED_MODELS
Carregamento de vários modelos ao mesmo tempo.
Exemplos
- Perguntas e respostas de texto único (Q&A)
- sessão de perguntas e respostas com textos múltiplos
Referências:Documentação do LlamaIndex