使用DeepSeek-R1与LangChain搭建RAG系统

2025年02月10日 由 alex 发表 3233 0

1


我们将从NVIDIA NIM微服务中设置DeepSeek API密钥(是的,我会向你展示如何操作)。NVIDIA NIM(推理微服务)是一组微服务,用于帮助在云、数据中心和工作站之间部署AI模型。我们将使用LangChain作为我们的LLM(大型语言模型)框架来整合所有内容。我们将使用SingleStore作为我们的向量数据库。


先决条件

  • 免费的SingleStore账户(提供免费试用)
  • 从NVIDIA NIM获取的免费DeepSeek API密钥


首先,创建一个免费的SingleStore账户。登录你的账户,并为自己创建一个工作区和数据库。


2


创建工作区后,在该工作区下创建一个数据库。如仪表板截图所示,点击“创建数据库”来创建一个数据库。


3


太好了。现在,我们已经创建了数据库,用于存储我们RAG(检索增强生成)应用程序的自定义文档。


下一步是创建一个笔记本。没错,一个免费的笔记本环境。SingleStore有一个非常酷的集成功能,你可以使用他们的笔记本[就像你的Google Colab一样]。


进入Data Studio,然后创建一个新的笔记本。


4


给你的笔记本起个名字。


5


这是你将进入的页面


6


请确保从下拉菜单中选择你创建的工作区和数据库,如下所示。我的工作区名称是“pavappy-workspace-1”,我创建的数据库是“DeepSeek”。所以我已经选择了这两者。


7


现在我们已经准备好为我们的RAG应用程序编写代码了。开始逐步将以下所有代码添加到新创建的笔记本中(确保也运行每个代码片段)。


首先安装所有所需的库和依赖项。


!pip install langchain --quiet
!pip install pdf2image --quiet
!pip install pdfminer.six --quiet
!pip install singlestoredb --quiet
!pip install tiktoken --quiet
!pip install --upgrade unstructured==0.10.14 --quiet
!pip install -qU pypdf langchain_community
!pip install langchain-nvidia-ai-endpoints --quiet
!pip install langchain-deepseek-official --quiet


导入库


from langchain.document_loaders import PyPDFLoader
from langchain_nvidia_ai_endpoints import ChatNVIDIA
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.chains import RetrievalQA
from langchain.vectorstores import SingleStoreDB
import os


加载你的自定义文档[我使用了一个公开可用的PDF,你可以替换并使用你自己的]。


file_path = "https://unctad.org/system/files/official-document/wesp2023_en.pdf"
loader = PyPDFLoader(file_path)
data = loader.load()


将文档拆分成多个块。


text_splitter = RecursiveCharacterTextSplitter(chunk_size=2000, chunk_overlap=0)
texts = text_splitter.split_documents(data)


设置OpenAI嵌入(用于向量化)


os.environ["OPENAI_API_KEY"] = "Add your OpenAI API key"
embedding = OpenAIEmbeddings()


将嵌入存储在SingleStore中。


docsearch = SingleStoreDB.from_documents(
    texts,
    embedding,
    table_name="deepseek_rag", # Replace table name with any name
    host="admin:password@host_url:3306/database_name",  # Replace with your SingleStore connection
    port=3306
)


在上面的代码中,“admin”是常量,不要更改它。你可以从“访问”选项卡中获取你的密码,主机URL可以按照以下方式获取。转到你的“部署”选项卡,你应该能看到你的工作区,点击“连接”,然后你会看到如下下拉菜单。从那里选择“SQL IDE”,你就会看到所有需要的详细信息。


8


接下来,通过NVIDIA NIM初始化DeepSeek


从NVIDIA NIM微服务免费获取你的DeepSeek-R1 API密钥。从这里获取。


client = ChatNVIDIA(
    model="deepseek-ai/deepseek-r1",
    api_key="Add your DeepSeek-R1 API key you received from NVIDIA NIM microservice",  # Replace with your NVIDIA API key
    temperature=0.7,
    top_p=0.8,
    max_tokens=4096
)


创建RAG链


qa_chain = RetrievalQA.from_chain_type(
    llm=client,
    chain_type="stuff",
    retriever=docsearch.as_retriever(search_kwargs={"k": 3}),
    return_source_documents=True
)


查询RAG系统


query = "What India's GDP growth is projected to be?"
result = qa_chain.invoke({"query": query})


显示结果


print("Answer:", result["result"])
print("\nSources:")
for doc in result["source_documents"]:
    print(f"- Page {doc.metadata['page']}: {doc.page_content[:100]}...")


你应该会看到模型给出的不错回应:


9


你可以去检查你的数据库,看看数据是如何被分块并以向量嵌入格式存储的。


10


文章来源:https://levelup.gitconnected.com/build-robust-rag-systems-using-deepseek-r1-langchain-01ded343ce32
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
热门职位
Maluuba
20000~40000/月
Cisco
25000~30000/月 深圳市
PilotAILabs
30000~60000/年 深圳市
写评论取消
回复取消