十天手搓minRAG,操纵DeepSeek的幕后黑手
如果你想让DeepSeek
乖乖听话,成为手中的提现木偶,建议阅读此篇.
RAG本质是使用本地知识库,组装成提示词(Prompt),发送给大模型,让大模型回答期望的结果.
例如把以下内容发给DeepSeek
:
根据提供的文档,回答问题\n
文档:\n
minRAG是最简单的RAG系统,项目地址:https://gitee.com/minrag/minrag\n
什么RAG系统最简单?
图上可以看出,DeepSeek
的回答实际是由RAG组装的提示词(Prompt)决定的,这样就完成了对DeepSeek
的操纵。如果没有提示词 (Prompt),DeepSeek
就是脱缰的野马,自由发挥了......
当然,我们的程序是不能直接控制DeepSeek
的问答页面的,所以我们需要调用DeepSeek
的接口,自己做个类似DeepSeek
的页面,然后把提示词和用户的问题一起发给DeepSeek
.
感谢Gitee AI提供的每天免费100次调用,我们用 DeepSeek-V3
模型进行测试, 访问 https://ai.gitee.com/hf-models/deepseek-ai/DeepSeek-V3/api
图中可以看出,我们使用Gitee AI的免费体验令牌,在System Prompt
系统提示词中输入了minRAG的信息,然后在输入框里发送了问题什么RAG系统最简单?
,DeepSeek-V3
就输出了我们想要的答案.
实际完整的curl
请求如下:
curl https://ai.gitee.com/v1/chat/completions \
-X POST \
-H "Authorization: Bearer A4FTACZVPGAIV8PZCKIBEUGV7ZBMXTIBEGUGNC11" \
-H "Content-Type: application/json" \
-d '{"model":"DeepSeek-V3",
"messages":[
{"role":"system","content":"根据提供的文档,回答问题\\n \n文档:\\n \nminRAG是最简单的RAG系统,项目地址:https://gitee.com/minrag/minrag\\n \n"},
{"role":"user","content":"什么RAG系统最简单?"}
]
}'
我们可以看到,messages
数组中,有system
和user
两种类型的消息,system
信息就是有RAG系统组装成的提示词(Prompt),user
是用户的问题.assistant
是DeepSeek
的回复,如下图:
图中我们可以看到,大模型已经回复了我们想要的结果.恭喜你,至此,你已经完全掌握了RAG的心法.
如何根据用户的问题,组装系统提示词呢?
聪明的你一定有了好答案,使用全文检索搜索引擎呀! 我们根据用户的问题,从资料库中,搜索相关联的内容,组装成提示词就可以了呀.
是的,但是还可以更近一步,使用向量数据库.最简单的场景,我们的资料库里是中文,用户用英语,德语提问怎么办?跨语种的向量模型(Embedding)可以根据语义相似匹配,例如bge-m3
模型.
嗯,那我们就把全文检索和向量模型都使用,然后拼接在一起,这样就可以了. 可是这样发给大模型的信息就很多了,比如全文检索搜索出来10条,向量数据库匹配了10条,我们组合起来就要发给大模型20条了.
有没有办法在发送之前,对这20条信息进行评分? 有的,就是重排序(reranker
)模型,例如bge-reranker-v2-m3
模型,根据用户的问题,从20条信息中筛选最接近的几条信息.
到这里,感觉已经大功告成了呀.可是,一个文档的内容很多呀,可能上万字,一部小说上百万字,不能一次性都发给DeepSeek
,它也吃不下呀.....
于是呀,就需要对这些文档进行拆分切割,把大文章拆成一个个的小块chunk
,这样只需要发小块chunk
给DeepSeek
就可以了呀.
哎呀,还有问题,如果用户上传word,pdf格式怎么办?还要把内容提取成文本,因为DeepSeek
的接口只支持文本呀.
于是,就有了RAG的基本处理流程:
然后又需要对流程进行自定义的编排,就是流水线.......
完成以上工作,minRAG
用了10天,不超过1万行代码,RAG 从未如此简单.
minRAG
是从零开始的RAG系统,追求极致的简单和强大,无需安装,双击启动.支持OpenAI、Gitee AI、百度千帆、腾讯云LKE、阿里云百炼、字节火山引擎等AI平台.
项目地址: https://gitee.com/minrag/minrag
下载体验: https://gitee.com/minrag/minrag/releases/tag/v0.0.7
文章作者
上次更新 2025-02-20