DeepSeek 大模型 + LlamaIndex + MySQL 数据库 + 知识文档 实现简单 RAG 系统
以下是一个使用 DeepSeek 大模型(假设为一个高性能的中文大模型)、LlamaIndex、MySQL 数据库 和 知识文档 实现简单 RAG(检索增强生成)系统的完整示例。该示例将涵盖从数据准备到最终响应生成的全过程,并附带详细代码和注释。
1. 环境准备
1.1 安装依赖
首先,确保安装了必要的 Python 库:
pip install llama-index deepseek-cpm mysql-connector-python
1.2 准备 MySQL 数据库
假设我们有一个简单的 MySQL 数据库,包含一个 documents
表,结构如下:
CREATE TABLE documents (
id INT AUTO_INCREMENT PRIMARY KEY,
content TEXT
);
插入一些示例数据:
INSERT INTO documents (content) VALUES
('去年公司的营收为10亿元人民币。'),
('今年计划增加研发投入,预算为2亿元。');
1.3 准备知识文档
假设我们有一份知识文档 knowledge.txt
,内容如下:
公司成立于2010年,专注于技术研发。
去年的研发投入为5亿元。
2. 数据加载与索引构建
2.1 从 MySQL 数据库加载数据
import mysql.connector
def load_data_from_mysql():
# 连接 MySQL 数据库
conn = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="yourdatabase"
)
cursor = conn.cursor()
# 查询 documents 表中的所有记录
cursor.execute("SELECT content FROM documents")
rows = cursor.fetchall()
# 将查询结果转换为文本列表
documents = [row[0] for row in rows]
cursor.close()
conn.close()
return documents
# 加载 MySQL 数据
mysql_documents = load_data_from_mysql()
print("Loaded from MySQL:", mysql_documents)
2.2 从知识文档加载数据
def load_data_from_file(file_path):
with open(file_path, 'r', encoding='utf-8') as file:
content = file.read()
return [content]
# 加载知识文档
file_documents = load_data_from_file('knowledge.txt')
print("Loaded from file:", file_documents)
2.3 合并数据并构建索引
from llama_index import SimpleDirectoryReader, GPTListIndex, Document
def build_index(documents):
# 将文档列表转换为 Document 对象
docs = [Document(text) for text in documents]
# 构建索引
index = GPTListIndex.from_documents(docs)
return index
# 合并来自 MySQL 和文件的数据
all_documents = mysql_documents + file_documents
print("All documents:", all_documents)
# 构建索引
index = build_index(all_documents)
3. RAG 流程实现
3.1 定义查询函数
def query_index(index, query_text):
response = index.query(query_text)
return response.response
# 测试查询
query = "去年公司的研发投入是多少?"
response = query_index(index, query)
print("Query Response:", response)
3.2 结合 DeepSeek 大模型生成最终回答
假设 deepseek_cpm
是一个封装好的 DeepSeek 大模型调用接口:
import deepseek_cpm
def generate_response_with_model(query, context):
prompt = f"问题: {query}\n上下文: {context}\n回答:"
response = deepseek_cpm.generate(prompt)
return response
# 获取检索结果作为上下文
context = query_index(index, query)
final_response = generate_response_with_model(query, context)
print("Final Response with Model:", final_response)
4. 完整代码示例
以下是将上述步骤整合在一起的完整代码示例:
import mysql.connector
from llama_index import SimpleDirectoryReader, GPTListIndex, Document
import deepseek_cpm
# 1. 从 MySQL 数据库加载数据
def load_data_from_mysql():
conn = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="yourdatabase"
)
cursor = conn.cursor()
cursor.execute("SELECT content FROM documents")
rows = cursor.fetchall()
documents = [row[0] for row in rows]
cursor.close()
conn.close()
return documents
# 2. 从知识文档加载数据
def load_data_from_file(file_path):
with open(file_path, 'r', encoding='utf-8') as file:
content = file.read()
return [content]
# 3. 合并数据并构建索引
def build_index(documents):
docs = [Document(text) for text in documents]
index = GPTListIndex.from_documents(docs)
return index
# 4. 定义查询函数
def query_index(index, query_text):
response = index.query(query_text)
return response.response
# 5. 结合 DeepSeek 大模型生成最终回答
def generate_response_with_model(query, context):
prompt = f"问题: {query}\n上下文: {context}\n回答:"
response = deepseek_cpm.generate(prompt)
return response
# 主程序
if __name__ == "__main__":
# 加载数据
mysql_documents = load_data_from_mysql()
file_documents = load_data_from_file('knowledge.txt')
all_documents = mysql_documents + file_documents
# 构建索引
index = build_index(all_documents)
# 测试查询
query = "去年公司的研发投入是多少?"
context = query_index(index, query)
final_response = generate_response_with_model(query, context)
print("Final Response with Model:", final_response)
5. 表格整理总结
步骤 | 操作内容 | 注意事项 |
---|---|---|
1. 环境准备 | 安装必要库,准备 MySQL 数据库和知识文档。 | 确保数据库连接信息正确,文档路径有效。 |
2. 数据加载 | 从 MySQL 和知识文档中加载数据。 | 数据格式应统一,避免编码问题。 |
3. 索引构建 | 将加载的数据合并并构建 LlamaIndex 索引。 | 索引构建可能耗时,根据数据量选择合适索引类型。 |
4. RAG 查询 | 使用 LlamaIndex 进行检索,获取相关上下文。 | 查询语句应简洁明了,便于模型理解。 |
5. 模型生成 | 结合检索结果和原始查询,使用 DeepSeek 大模型生成最终回答。 | 提供足够上下文信息,避免模型“幻觉”现象。 |
6. 结果展示 | 将最终回答返回给用户。 | 格式化输出,提升用户体验。 |
6. 总结
通过上述步骤,我们实现了一个简单的 RAG 系统,该系统结合了 DeepSeek 大模型、LlamaIndex、MySQL 数据库 和 知识文档,能够根据用户查询动态检索相关信息并生成准确的回答。此示例展示了 RAG 技术的基本流程和关键要点,适用于多种实际应用场景(如企业知识库、客服系统等)。
如果需要进一步优化或扩展功能(如多轮对话、错误处理等),可以根据具体需求进行调整。