欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 高考 > 大模型RAG项目实战-知识库问答助手v1版

大模型RAG项目实战-知识库问答助手v1版

2025/9/15 7:28:27 来源:https://blog.csdn.net/AIMing_byte/article/details/147055142  浏览:    关键词:大模型RAG项目实战-知识库问答助手v1版

安装 Ollama

根据官网指导,安装对应版本即可。

下载安装指导文档:

handy-ollama/docs/C1/1. Ollama 介绍.md at main · datawhalechina/handy-ollama

注意:在 Windows 下安装 Ollama 后,强烈建议通过配置环境变量来修改模型存储位置,不然就会默认存储在 C 盘目录下,而大模型文件一般都比较大。

知识库问答助手

架构图

RAG 知识库架构图如下:

知识库

知识库分块

功能:读取知识库文本文件,并将内容分割成多个段落块。

# 1、读取文件内容
with open("knowledge/中医v1.txt", encoding="utf-8", mode="r") as fp:data = fp.read()# 2、根据换行分割
chunk_list = data.split("\n\n")
chunk_list = [chunk for chunk in chunk_list if chunk]
print(chunk_list)

文本向量化

功能:将分块后的文本,通过调用文本向量模型,进行向量化。

import requeststext = "感冒发烧"res = requests.post(url="http://127.0.0.1:11434/api/embeddings",json={"model": "nomic-embed-text","prompt": text},
)embedding_list = res.json()['embedding']print(text)
print(len(embedding_list), embedding_list)

向量数据库

功能:将文本向量化后,存储到向量数据库中,这里用 Chroma 向量数据库,支持通过语义相似度进行搜索。

import uuid
import chromadb
import requestsdef ollama_embedding_bye_api(text):res = requests.post(url="http://127.0.0.1:11434/api/embeddings",json={"model": "nomic-embed-text","prompt": text},)embedding_list = res.json()['embedding']return embedding_listclient = chromadb.PersistentClient(path="db/chroma_demo")
collection = client.get_or_create_collection(name="collection_v1")documents = ["风寒感冒", "寒邪客胃", "心脾两虚"]
ids = [str(uuid.uuid4()) for _ in documents]
embeddings = [ollama_embedding_bye_api(text) for text in documents]# 插入数据
collection.add(ids=ids,documents=documents,embeddings=embeddings
)# 关键字搜索
qs = "感冒胃疼"
qs_embedding = ollama_embedding_bye_api(qs)res = collection.query(query_embeddings=[qs_embedding, ], query_texts=qs, n_results=2)
print(res)

推理模型

功能:调用 AI 大模型,实现文本生成功能

import requestsprompt = "今天天气怎么样"response = requests.post(url="http://127.0.0.1:11434/api/generate",json = {"model": "deepseek-r1:1.5b","prompt": prompt,"stream": False}
)
res = response.json()['response']
print(res)

集成

完整代码:

import uuidimport chromadb
import requestsdef file_chunk_list():# 1、读取文件内容with open("knowledge/中医v1.txt", encoding="utf-8", mode="r") as fp:data = fp.read()# 2、根据换行分割chunk_list = data.split("\n\n")chunk_list = [chunk for chunk in chunk_list if chunk]return chunk_listdef ollama_embedding_bye_api(text):res = requests.post(url="http://127.0.0.1:11434/api/embeddings",json={"model": "nomic-embed-text","prompt": text},)embedding_list = res.json()['embedding']return embedding_listdef ollama_generate_by_api(prompt):response = requests.post(url="http://127.0.0.1:11434/api/generate",json={"model": "deepseek-r1:1.5b","prompt": prompt,"stream": False})res = response.json()['response']return resdef initial():client = chromadb.PersistentClient(path="db/chroma_demo")# 创建集合# client.delete_collection("collection_v2")collection = client.get_or_create_collection(name="collection_v2")# 构造数据documents = file_chunk_list()ids = [str(uuid.uuid4()) for _ in range(len(documents))]embeddings = [ollama_embedding_bye_api(text) for text in documents]# 插入数据collection.add(ids=ids,documents=documents,embeddings=embeddings,)def run():# 关键字搜索qs = "风寒感冒"qs_embedding = ollama_embedding_bye_api(qs)client = chromadb.PersistentClient(path="db/chroma_demo")collection = client.get_collection(name="collection_v2")res = collection.query(query_embeddings=[qs_embedding, ], query_texts=qs, n_results=2)result = res["documents"][0]context = "\n".join(result)print(context)prompt = f"""你是一个中医问答机器人,任务是根据参考信息回答用户问题,如果参考信息不足以回答用户问题,请回复不知道,不要去杜撰任何信息参考信息:{context},来回答问题:{qs},"""result = ollama_generate_by_api(prompt)print(result)if __name__ == "__main__":initial()run()

项目参考:

【大模型RAG完整教程】手把手带你结合项目实战,完成一套完整的RAG项目!增加检索/文本向量/知识库搭建_哔哩哔哩_bilibili

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com