我们将从NVIDIA NIM微服务中设置DeepSeek API密钥(是的,我会向你展示如何操作)。NVIDIA NIM(推理微服务)是一组微服务,用于帮助在云、数据中心和工作站之间部署AI模型。我们将使用LangChain作为我们的LLM(大型语言模型)框架来整合所有内容。我们将使用SingleStore作为我们的向量数据库。
先决条件
首先,创建一个免费的SingleStore账户。登录你的账户,并为自己创建一个工作区和数据库。
创建工作区后,在该工作区下创建一个数据库。如仪表板截图所示,点击“创建数据库”来创建一个数据库。
太好了。现在,我们已经创建了数据库,用于存储我们RAG(检索增强生成)应用程序的自定义文档。
下一步是创建一个笔记本。没错,一个免费的笔记本环境。SingleStore有一个非常酷的集成功能,你可以使用他们的笔记本[就像你的Google Colab一样]。
进入Data Studio,然后创建一个新的笔记本。
给你的笔记本起个名字。
这是你将进入的页面
请确保从下拉菜单中选择你创建的工作区和数据库,如下所示。我的工作区名称是“pavappy-workspace-1”,我创建的数据库是“DeepSeek”。所以我已经选择了这两者。
现在我们已经准备好为我们的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”,你就会看到所有需要的详细信息。
接下来,通过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]}...")
你应该会看到模型给出的不错回应:
你可以去检查你的数据库,看看数据是如何被分块并以向量嵌入格式存储的。