这篇文章主要是面向初级开发者,适合初学者、没有接触过大模型开发的小白、没有基础想学大模型RAG开发的按照该教程也能踏入开发第一步。主要是介绍通过腾讯云提供的deepseek资源和线上环境,开发一个基于deepseek的RAG系统。RAG开发框架使用的是lamaindex,大模型使用deepseek32B,向量模型使用milkey/dmeta-embedding-zh:f16,rag程序根据给定的txt文件内容进行问答,输入exit退出问答。
简单介绍,建议自行详细了解,这里把入门用到的罗列如下。
Python | Ai开发的首选语言,不解释 | 内置3.11.1 |
---|---|---|
Conda | 开源的包管理系统和环境管理系统,帮助用户安装、更新、卸载软件包,并创建和管理虚拟环境 | 内置 |
LLM | Large Language Mode的缩写,意思为大语言模型 | |
Ollama | Ollama 是一个开源框架,专为在本地机器上便捷部署和运行大型语言模型(LLM)而设计 | 内置,直接使用 |
Deepseek | 按照参数不同有DeepSeek-R1 1.5B、7B、8B、14B 及 32B | 内置,直接使用 |
向量模型embedding | Embedding模型是一种将离散的符号数据(例如单词、图像、产品ID)转换为连续的向量表示的技术 | 需要自行安装 |
LlamaIndex | 企业级RAG的开发框架,比langchain轻量化,如果做rag首选推荐 | 需要安装 |
Pip | pip 是一个现代的,通用的 Python 包管理工具。提供了对 Python 包的查找、下载、安装、卸载的功能 | 内置,直接使用 |
Rag | 检索增强生成(Retrieval-augmented Generation),简称RAG,是当下热门的大模型前沿技术之一 | 自信学习 |
Chroma | 向量数据库 Chroma 是一种专门设计用来高效管理和查询向量数据的数据库系统。 | 需要安装 |
1、注册账号,微信直接扫码注册账号
https://cloud.tencent.com/act/pro/deepseek2025
点击立即体验即可。
分为通用工作空间和高性能工作空间,本次我们申请通用工作空间即可。
DeepSeek 体验,低门槛、零基础体验与学习,最高每月可使用12500分钟免费时长兑换
内置 Ollama、DeepSeek-R1 1.5B、7B、8B、14B 及 32B 模型,选择空间规格按照需求
建议选择DeepSeek 32B,适合高精度任务,如复杂推理、大规模知识库问答、专业领域内容生成和研究级应用。CPU:64 核,内存:128GB。
后面就是研发环境的准备,速度还是很快的。
这个ide就是网页版的vscode,各种功能和电脑本地安装的vscode完全一样,并且直接集成了腾讯云AI编程助手,这个在线的IDE确实很赞,等于有了一个移动的大模型开发工作站,性能和配置很够用,速度也很快,功能很强大,初学者省去了购置昂贵的电脑设备,环境一步到位,可以直接专注于开发。
头部
终端下拉出来新建终端。
输入 python
看到默认安装版本3.11.1
输入CTRL+Z退出继续输入
Olama list
输入
conda -V
发现预装了conda 23.5.2
Conda这个软件主要是用来管理多个虚拟环境的,运行github上的开源项目,不同的项目需要不同的python环境和依赖包,通过conda,可以为项目创建独立的运行环境隔离起来,避免产生各种冲突。
pip --version
显示系统已经内置了版本是25.0.1
可以看到开发环境内置了工具软件,省去了初学者配置开发环境的时间,这些第一次接触往往比较麻烦,很容易配置运行不成功,很多人这个环境阶段就被劝退了。
前面我们看到开发环境已经ok了,后面直接实现一个基于deepseek的rag系统,该系统完全私有化部署,不使用任何云服务,支持对上传文件的检索。
创建一个rag的目录,下面创建data目录放txt文件,为简单演示txt找了比较小的一段公司介绍文本上传到data目录下,rag目录下创建一个deepseekrag.py的文件复制代码过去,创建一个独立的myrag的虚拟环境并激活,按照步骤安装依赖包,新建终端启动chroma以服务模式运行,在rag目录下运行python deepseekrag.py,运行成功提问“合正云的成立时间”,可以看到deepseek的思考过程,并准确的给出了答案,这样一个完全本地私有化的,使用deepseek模型的rag系统就完成了,具体步骤如下。
(1) 创建一个rag目录存放代码
cd rag
(2) rag目录下创建data,上传测试tx文件
Txt文件可以百度百科随便找一段复制内容,后面问里面的问题即可。
(3) 安装向量模型milkey/dmeta-embedding-zh:f16
ollma pull milkey/dmeta-embedding-zh:f16
(4) 创建一个虚拟的开发环境并激活
环境名称为myrag,python的版本是3.12.2
conda create --name myrag python=3.12.2
成功后激活环境
conda activate myrag
(5) 安装依赖包主要有如下
在rag目录下执行
pip install -r requirements.txt
requirements.txt内容如下
llama_index
chromadb
llama_index.vector_stores.chroma
llama_index.llms.ollama
llama_index.embeddings.ollama
(6) 编写deepseekrag.py
复制后面的代码到文件保存即可
(7) 启动chroma向量服务
在rag目录下运行即可
chroma run --path ./chromadb
(7) 运行程序
rag目录下执行
python deepseek.py
程序比较清晰简单,主要有6个步骤完成,设置模型-->加载读取文档-->分块分割文-->备向量存储-->向量化生成索引-->查询流式输出。 具体代码如下,直接复制运行即可。
import chromadb
from llama_index.core import VectorStoreIndex,StorageContext
from llama_index.core import SimpleDirectoryReader,Settings
from llama_index.core.node_parser import SentenceSplitter
from llama_index.vector_stores.chroma import ChromaVectorStore
from llama_index.llms.ollama import Ollama
from llama_index.embeddings.ollama import OllamaEmbedding
from llama_index.core.callbacks import (
CallbackManager,
LlamaDebugHandler,
CBEventType,
)
#设置模型,注意因为腾讯云服务环境ollma的端口是8434,所有要正确设置base_url参数
Settings.llm = Ollama(model="deepseek-r1:32b",base_url='http://localhost:8434')
Settings.embed_model = OllamaEmbedding(model_name="milkey/dmeta-embedding-zh:f16",base_url='http://localhost:8434')
#加载与读取文档,这里是读取目录下的文件
reader = SimpleDirectoryReader("/workspace/Deepseek-R1-Chat-32B/rag/data")
documents = reader.load_data()
#分割文档
node_parser = SentenceSplitter(chunk_size=200, chunk_overlap=20)
#show_progress设置为true可以看到nodes的创建进度
nodes = node_parser.get_nodes_from_documents(documents, show_progress=True)
#准备向量存储,请确定向量数据据启动,端口是8000
chroma = chromadb.HttpClient(host="localhost", port=8000)
#chroma.delete_collection(name="ragdb")
collection = chroma.get_or_create_collection(name="ragdb", metadata={"hnsw:space": "cosine"})
vector_store = ChromaVectorStore(chroma_collection=collection)
#准备向量存储索引
storage_context = StorageContext.from_defaults(vector_store=vector_store)
index = VectorStoreIndex(nodes,storage_context=storage_context)
#构造查询引擎,采用流式输出,如果输入exit则退出
query_engine = index.as_query_engine(
streaming=True,
)
while True:
user_input = input("请输入问题:")
if user_input.lower() == "exit":
break
streaming_response = query_engine.query(user_input)
streaming_response.print_response_stream()
llama_debug = LlamaDebugHandler(print_trace_on_end=True)
pprint.pprint(llama_debug.get_event_pairs(CBEventType.QUERY))
1、ValueError: Could not connect to a Chroma server. Are you sure it is running?
Chroma服务未启动,进入到rag目录下执行chroma run --path ./chromadb
2、怎么上传文件
左侧目录导航的文件夹右键弹出找到上传点击即可
可以看到接入deepseek的rag系统开发起来并不难,后面可以有很多完善的地方,开发环境已经准备好了,完全可以根据这个简单的rag系统继续完善功能,如可以写一个前端页面,提供常见文档格式的上传,有了UI后更像一个系统,要做的功能和优化的地方还有很多,毕竟通过这个简单的例子入门了,这就迈出了很重要的第一步!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。