Aplicaciones RAG nativas con DeepSeek R1 y Ollama

breve

Este documento detalla cómo utilizar el DeepSeek R1 y Ollama construir aplicaciones RAG (Retrieval Augmented Generation) localizadas. También es una buena forma de sacar el máximo partido a la Creación de una aplicación RAG local con LangChain El suplemento.

Demostraremos el proceso de implementación completo a través de ejemplos, incluido el procesamiento de documentos, el almacenamiento de vectores, la llamada a modelos y otros pasos clave. Este tutorial utiliza DeepSeek-R1 1.5B como modelo lingüístico de base. Teniendo en cuenta que los distintos modelos tienen sus propias características y prestaciones, los lectores pueden elegir otros modelos adecuados para su aplicación en función de las necesidades reales de la RAG Sistema.

Nota: Este documento contiene fragmentos de código básico y explicaciones detalladas. El código completo se encuentra en cuaderno .

 

preparación preliminar

En primer lugar, tenemos que descargar Ollama y configurar el entorno.

El repositorio GitHub de Ollama ofrece una descripción detallada, que se resume brevemente a continuación.

Paso1, descarga Ollama.

descargando y haga doble clic para ejecutar la aplicación Ollama.

使用 DeepSeek R1 和 Ollama 实现本地 RAG 应用

Paso 2, verifique la instalación.

En la línea de comandos, escriba ollamaSi aparece el siguiente mensaje, Ollama se ha instalado correctamente.

使用 DeepSeek R1 和 Ollama 实现本地 RAG 应用

Paso3, tirar del modelo.

  • Desde la línea de comandos, consulte Lista de modelos de Ollama responder cantando Lista de modelos de incrustación de texto Sacar el modelo. En ese tutorial, tomamos el deepseek-r1:1.5b responder cantando nomic-embed-text Ejemplo.
    • entrada de línea de comandos ollama pull deepseek-r1:1.5bModelos lingüísticos genéricos de código abierto deepseek-r1:1.5b; (Puede ser lento al tirar de los modelos. Si se produce un error de extracción, puede volver a introducir el comando para extraer).
    • entrada de línea de comandos ollama pull nomic-embed-text tire de Modelo de incrustación de texto nomic-embed-text.
  • Cuando la aplicación se esté ejecutando, todos los modelos estarán automáticamente en la carpeta localhost:11434 En la salida.
  • Tenga en cuenta que la selección del modelo debe tener en cuenta las capacidades de su hardware local, el tamaño de la memoria de vídeo de referencia para este tutorial CPU Memory > 8GB.

Paso 4, despliegue del modelo.

La ventana de línea de comandos ejecuta el siguiente comando para desplegar el modelo.

ollama run deepseek-r1:1.5b
使用 DeepSeek R1 和 Ollama 实现本地 RAG 应用

También es posible ejecutar el modelo de implantación directamente desde la línea de comandos, por ejemplo ollama run deepseek-r1:1.5b.

使用 DeepSeek R1 和 Ollama 实现本地 RAG 应用

Tenga en cuenta que los siguientes pasos no son necesarios si sólo desea desplegar modelos DeepSeek R1 utilizando Ollama.

Paso 5, instalar las dependencias.

# langchain_community
pip install langchain langchain_community

# Chroma
pip install langchain_chroma

# Ollama
pip install langchain_ollama

Con eso fuera del camino, vamos a empezar a construir una solución paso a paso basado en LangChain, Ollama, y DeepSeek R1 A continuación se describen detalladamente los pasos de implementación. A continuación se describen detalladamente los pasos de implementación.

 

1. Carga de documentos

Cargue documentos PDF y córtelos en bloques de texto del tamaño adecuado.

from langchain_community.document_loaders import PDFPlumberLoader
file = "DeepSeek_R1.pdf"
# Load the PDF
loader = PDFPlumberLoader(file)
docs = loader.load()
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=0)
all_splits = text_splitter.split_documents(docs)

 

2. Inicialización del almacenamiento vectorial

Utilice la base de datos Chroma para almacenar los vectores del documento y configurar el modelo de incrustación proporcionado por Ollama.

from langchain_chroma import Chroma
from langchain_ollama import OllamaEmbeddings
local_embeddings = OllamaEmbeddings(model="nomic-embed-text")
vectorstore = Chroma.from_documents(documents=all_splits, embedding=local_embeddings)

 

3. Construcción de expresiones en cadena

Configure plantillas de modelos y señales para construir cadenas de procesamiento.

from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_ollama import ChatOllama
model = ChatOllama(
model="deepseek-r1:1.5b",
)
prompt = ChatPromptTemplate.from_template(
"Summarize the main themes in these retrieved docs: {docs}"
)
# 将传入的文档转换成字符串的形式
def format_docs(docs):
return "\n\n".join(doc.page_content for doc in docs)
chain = {"docs": format_docs} | prompt | model | StrOutputParser()
question = "What is the purpose of the DeepSeek project?"
docs = vectorstore.similarity_search(question)
chain.invoke(docs)

 

4. Control de calidad con búsqueda

Integrar funciones de búsqueda y preguntas y respuestas.

from langchain_core.runnables import RunnablePassthrough
RAG_TEMPLATE = """
You are an assistant for question-answering tasks. Use the following pieces of retrieved context to answer the question. If you don't know the answer, just say that you don't know. Use three sentences maximum and keep the answer concise.
<context>
{context}
</context>
Answer the following question:
{question}"""
rag_prompt = ChatPromptTemplate.from_template(RAG_TEMPLATE)
retriever = vectorstore.as_retriever()
qa_chain = (
{"context": retriever | format_docs, "question": RunnablePassthrough()}
| rag_prompt
| model
| StrOutputParser()
)
question = "What is the purpose of the DeepSeek project?"
# Run
qa_chain.invoke(question)

 

resúmenes

Este tutorial detalla cómo construir una aplicación RAG localizada utilizando DeepSeek R1 y Ollama. Conseguimos una funcionalidad completa en cuatro pasos principales:

  1. tratamiento de ficheros Utiliza PDFPlumberLoader para cargar documentos PDF y RecursiveCharacterTextSplitter para cortar el texto en trozos del tamaño adecuado.
  2. almacenamiento vectorial Un sistema de almacenamiento vectorial que utiliza la base de datos Chroma y el modelo de incrustación de Ollama para proporcionar una base para la posterior recuperación de similitudes.
  3. Construcción en cadena Diseño y aplicación de una cadena de procesamiento que integre el procesamiento de documentos, las plantillas de pistas y las respuestas modelo en un proceso de flujo continuo.
  4. Realización RAG El objetivo de este proyecto es crear un sistema completo de generación de preguntas y respuestas basado en el contenido de los documentos, que integre las funciones de búsqueda y de preguntas y respuestas.

Con este tutorial, podrás construir rápidamente tu propio sistema RAG local y personalizarlo para mejorarlo según tus necesidades reales. Se recomienda probar en la práctica distintos modelos y configuraciones de parámetros para sacarle el máximo partido.

Nota: Utilizando herramientas como streamlit o FastAPI, es posible desplegar una aplicación RAG local como un servicio web, permitiendo una gama más amplia de escenarios de aplicación.

El repositorio también ofrece app.py puede ejecutar el archivo directamente para iniciar el servicio web. Documentación Crear un sistema RAG con DeepSeek R1 y Ollama. Nota: Ejecute previamente el servicio Ollama antes de ejecutar este código.

La página de diálogo es la siguiente:

使用 DeepSeek R1 和 Ollama 实现本地 RAG 应用
© declaración de copyright
AiPPT

Artículos relacionados

Sin comentarios

Debe iniciar sesión para participar en los comentarios.
Acceder ahora
ninguno
Sin comentarios...