Introducción
La integración de modelos de razonamiento avanzados y frameworks ligeros está transformando la forma en que los sistemas de IA recuperan, procesan y presentan información. En esta guía, construiremos un sistema de Generación Aumentada por Recuperación (RAG) utilizando DeepSeek R1, un modelo de razonamiento de alto rendimiento, y SmolAgents, un framework de agente minimalista de Hugging Face. Este sistema permitirá un procesamiento eficiente de documentos, una búsqueda inteligente y un razonamiento similar al humano, ideal para aplicaciones de investigación, atención al cliente y gestión del conocimiento.
Requisitos del sistema para ejecutar la configuración
El agente de IA realizará cuatro tareas principales:
- Cargar y procesar archivos PDF: Convertir documentos en fragmentos de texto con capacidad de búsqueda.
- Crear una base de datos vectorial: Almacenar incrustaciones para una búsqueda semántica rápida.
- Recuperar y razonar: Utilizar DeepSeek R1 para analizar los datos recuperados y generar respuestas.
- Interactuar con los usuarios: Proporcionar una interfaz conversacional para una interacción fluida.
Paso 1: Cargar y procesar documentos PDF
Herramientas y bibliotecas
- LangChain: Para la carga de documentos y la división de texto.
- ChromaDB: Una base de datos vectorial ligera para almacenar incrustaciones.
- Hugging Face Embeddings: Para convertir texto en representaciones vectoriales.
Implementación
1.1 Cargar archivos PDF
Utiliza DirectoryLoader
de LangChain para cargar todos los archivos PDF de un directorio. Cada PDF se divide en páginas para su procesamiento.
from langchain_community.document_loaders import DirectoryLoader, PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
def load_and_process_pdfs(data_dir: str):
loader = DirectoryLoader(
data_dir,
glob="**/*.pdf",
loader_cls=PyPDFLoader
)
documents = loader.load()
# Split documents into chunks
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200,
length_function=len,
)
return text_splitter.split_documents(documents)
1.2 Crear un almacén de vectores
Convierte los fragmentos de texto en incrustaciones y almacénalos en ChromaDB para una recuperación eficiente.
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_community.vectorstores import Chroma
import os
import shutil
def create_vector_store(chunks, persist_directory: str):
if os.path.exists(persist_directory):
shutil.rmtree(persist_directory)
embeddings = HuggingFaceEmbeddings(
model_name="sentence-transformers/all-mpnet-base-v2",
model_kwargs={'device': 'cpu'}
)
vectordb = Chroma.from_documents(
documents=chunks,
embedding=embeddings,
persist_directory=persist_directory
)
return vectordb
Consideraciones clave
- Tamaño del fragmento: 1000 caracteres con una superposición de 200 caracteres equilibra la retención del contexto y la eficiencia de la búsqueda.
- Modelo de incrustación:
all-mpnet-base-v2
proporciona incrustaciones de oraciones de alta calidad.
Paso 2: Implementar el agente de razonamiento con DeepSeek R1
¿Por qué DeepSeek R1?
DeepSeek R1 se especializa en el razonamiento de varios pasos, lo que le permite desglosar consultas complejas, inferir relaciones y generar respuestas estructuradas.
Inicializar el modelo de razonamiento
Configura DeepSeek R1 a través de Ollama para la inferencia local:
from smolagents import OpenAIServerModel, CodeAgent
reasoning_model_id = "deepseek-r1:7b"
def get_model(model_id):
return OpenAIServerModel(
model_id=model_id,
api_base="http://localhost:11434/v1",
api_key="ollama"
)
reasoning_model = get_model(reasoning_model_id)
reasoner = CodeAgent(
tools=[],
model=reasoning_model,
add_base_tools=False,
max_steps=2 # Limit reasoning iterations for efficiency
)
Paso 3: Construir el pipeline de Generación Aumentada por Recuperación (RAG)
Diseño de la herramienta
Crea una herramienta RAG que combine la recuperación de documentos con las capacidades de razonamiento de DeepSeek R1.
from smolagents import tool
@tool
def rag_with_reasoner(user_query: str) -> str:
# Retrieve relevant documents
docs = vectordb.similarity_search(user_query, k=3)
context = "\n\n".join(doc.page_content for doc in docs)
# Generate a reasoning prompt
prompt = f"""
Based on the following context, answer the user's question concisely.
If the information is insufficient, suggest a refined query.
Context:
{context}
Question: {user_query}
Answer:
"""
return reasoner.run(prompt, reset=False)
Características clave
- Prompts contextuales: Inyecta documentos recuperados en el prompt para obtener respuestas fundamentadas.
- Mecanismo de fallback: El modelo sugiere mejores consultas cuando los datos son insuficientes.
Paso 4: Implementar el agente de IA principal
Orquestar el flujo de trabajo
El agente principal, impulsado por Llama 3.2, gestiona las interacciones del usuario e invoca la herramienta RAG según sea necesario:
from smolagents import ToolCallingAgent, GradioUI
tool_model = get_model("llama3.2")
primary_agent = ToolCallingAgent(
tools=[rag_with_reasoner],
model=tool_model,
add_base_tools=False,
max_steps=3
)
def main():
GradioUI(primary_agent).launch()
if __name__ == "__main__":
main()

Interfaz de usuario
La interfaz de usuario proporciona una interfaz web sencilla para la interacción en tiempo real:
- Los usuarios introducen consultas.
- El agente recupera documentos, razona con DeepSeek R1 y devuelve respuestas.
La integración de DeepSeek R1 y SmolAgents ofrece una potente solución de IA que combina un razonamiento mejorado para analizar consultas complejas, una recuperación eficiente a través de la búsqueda semántica rápida de ChromaDB y una implementación local rentable para evitar la dependencia de costosas API en la nube. Su arquitectura escalable permite una integración perfecta de nuevas herramientas, lo que la hace ideal para aplicaciones como la investigación (análisis de documentos técnicos), la atención al cliente (resolución de preguntas frecuentes) y la gestión del conocimiento (transformación de recursos estáticos en sistemas interactivos).
Las mejoras futuras podrían ampliar el soporte de documentos para incluir Word, HTML y markdown, integrar la búsqueda web en tiempo real para un contexto más amplio e implementar bucles de retroalimentación para refinar la precisión de las respuestas con el tiempo. Este framework ofrece una base versátil para construir asistentes de IA inteligentes y adaptables adaptados a diversas necesidades.