Giới thiệu
Việc tích hợp các mô hình suy luận nâng cao và các framework nhẹ đang biến đổi cách mà các hệ thống AI lấy, xử lý và trình bày thông tin. Trong hướng dẫn này, chúng tôi sẽ xây dựng một hệ thống Tăng cường Tìm kiếm (RAG) sử dụng DeepSeek R1, một mô hình suy luận hiệu suất cao, và SmolAgents, một framework tác nhân tối giản từ Hugging Face. Hệ thống này sẽ cho phép xử lý tài liệu hiệu quả, tìm kiếm thông minh và suy luận giống con người—lý tưởng cho nghiên cứu, hỗ trợ khách hàng và quản lý kiến thức.
Yêu cầu hệ thống để chạy cài đặt
Đại diện AI sẽ thực hiện bốn nhiệm vụ chính:
- Tải và Xử lý PDF: Chuyển đổi tài liệu thành các đoạn văn bản có thể tìm kiếm.
- Tạo cơ sở dữ liệu vector: Lưu trữ các vector để tìm kiếm ngữ nghĩa nhanh chóng.
- Lấy và Suy luận: Sử dụng DeepSeek R1 để phân tích dữ liệu đã lấy và tạo ra câu trả lời.
- Giao tiếp với Người dùng: Cung cấp giao diện trò chuyện để tương tác mượt mà.
Bước 1: Tải và Xử lý Tài liệu PDF
Công cụ và Thư viện
- LangChain: Để tải tài liệu và tách văn bản.
- ChromaDB: Một cơ sở dữ liệu vector nhẹ để lưu trữ các vector.
- Embedding Hugging Face: Để chuyển đổi văn bản thành các đại diện vector.
Thực hiện
1.1 Tải Tệp PDF
Sử dụng DirectoryLoader
của LangChain để tải tất cả PDF từ một thư mục. Mỗi PDF được tách thành các trang để xử lý.
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()
# Tách tài liệu thành các đoạn
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200,
length_function=len,
)
return text_splitter.split_documents(documents)
1.2 Tạo một Cửa hàng Vector
Chuyển đổi các đoạn văn bản thành các vector và lưu trữ chúng trong ChromaDB để lấy dữ liệu hiệu quả.
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
Những Lưu ý Chính
- Kích thước Đoạn: 1000 ký tự với 200 ký tự chồng chéo cân bằng giữa việc giữ lại ngữ cảnh và hiệu quả tìm kiếm.
- Mô hình Nhúng:
all-mpnet-base-v2
cung cấp các vector câu chất lượng cao.
Bước 2: Triển khai Đại diện Suy luận với DeepSeek R1
Tại sao DeepSeek R1?
DeepSeek R1 chuyên về suy luận nhiều bước, cho phép nó phân tích các truy vấn phức tạp, suy luận các mối quan hệ và tạo ra câu trả lời có cấu trúc.
Khởi tạo Mô hình Suy luận
Cấu hình DeepSeek R1 thông qua Ollama để suy luận tại địa phương:
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 # Giới hạn số lần suy luận để tăng hiệu quả
)
Bước 3: Xây dựng quy trình Tăng cường Tìm kiếm (RAG)
Thiết kế Công cụ
Tạo một công cụ RAG kết hợp giữa việc lấy tài liệu và khả năng suy luận của DeepSeek R1.
from smolagents import tool
@tool
def rag_with_reasoner(user_query: str) -> str:
# Lấy tài liệu liên quan
docs = vectordb.similarity_search(user_query, k=3)
context = "\n\n".join(doc.page_content for doc in docs)
# Tạo một yêu cầu suy luận
prompt = f"""
Dựa trên ngữ cảnh sau, hãy trả lời câu hỏi của người dùng một cách ngắn gọn.
Nếu thông tin không đủ, hãy gợi ý một truy vấn điều chỉnh.
Ngữ cảnh:
{context}
Câu hỏi: {user_query}
Trả lời:
"""
return reasoner.run(prompt, reset=False)
Những Tính Năng Chính
- Các Lời Nhắc Ngữ Cảnh: Tiêm các tài liệu đã lấy vào yêu cầu để có những phản hồi có căn cứ.
- Cơ Chế Lặp Trở Lại: Mô hình gợi ý các truy vấn tốt hơn khi dữ liệu không đủ.
Bước 4: Triển khai Đại diện AI Chính
Sắp xếp Quy trình làm việc
Đại diện chính, được hỗ trợ bởi Llama 3.2, quản lý các tương tác của người dùng và gọi công cụ RAG khi cần:
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()

Giao diện Người dùng
Giao diện cung cấp một giao diện web đơn giản cho tương tác theo thời gian thực:
- Người dùng nhập truy vấn.
- Đại diện lấy tài liệu, suy luận với DeepSeek R1 và trả về câu trả lời.
Sự tích hợp giữa DeepSeek R1 và SmolAgents cung cấp một giải pháp AI mạnh mẽ kết hợp khả năng suy luận nâng cao để phân tích các truy vấn phức tạp, việc lấy tài liệu hiệu quả qua tìm kiếm ngữ nghĩa nhanh chóng của ChromaDB và việc triển khai địa phương tiết kiệm chi phí để tránh phụ thuộc vào các API đám mây tốn kém. Kiến trúc có thể mở rộng của nó cho phép tích hợp liền mạch các công cụ mới, làm cho nó lý tưởng cho các ứng dụng như nghiên cứu (phân tích tài liệu kỹ thuật), hỗ trợ khách hàng (giải quyết các câu hỏi thường gặp) và quản lý kiến thức (biến đổi các nguồn tĩnh thành các hệ thống tương tác).
Các cải tiến trong tương lai có thể mở rộng hỗ trợ tài liệu để bao gồm Word, HTML và markdown, tích hợp tìm kiếm web theo thời gian thực cho ngữ cảnh rộng hơn, và thực hiện các vòng phản hồi để tinh chỉnh độ chính xác của câu trả lời theo thời gian. Khung này cung cấp một nền tảng linh hoạt để xây dựng các trợ lý AI thông minh, thích ứng với nhu cầu đa dạng.