充满反骨的auto-coder.RAG 知识库以及RAG的第二层认知

部署运行你感兴趣的模型镜像

"大佬 我看你这项目直接把doc 扔给llm 分析相关性啊, token不大惨了啊"。

这是大部分尝试去理解 auto-coder.RAG 知识库底层原理的人的第一反应。实际上 auto-coder.RAG 有大量反业界常识设计。

充满反骨的auto-coder.RAG 知识库

第一个最大的大反直觉设计,就是把文档全部交给大模型做召回这个事。

我们从工程角度让这件看起来粗暴的事情变得可行,我们来一起看看:

1. 从速度角度,我们基本可以确保第一个token出现的速度,就是整个过滤时间,并且几乎只消耗input token, 从模型供应商角度而言,只要他GPU资源足,那么就不会受到速度困扰(如果你依赖output token,就会受限于decoding的限制,就算GPU充足,速度也是有上限规模的。)

2. 从效果来看,我们的设计,基本上就是你给我的模型越好,我的效果就越好,你愿意投钱,效果也可以越好。而传统 EMB 架构的 RAG 是你给钱,给好的模型,效果也不会有太大提升。我们的效果有多好的呢?我么有个用户他实际用下来用了半年,给我的反馈是,达到了和 notebookllm 差不多的效果(但是notebookllm 实际上还是完全依赖自己Google模型超长上下文的,而我们还是通用的 RAG 知识库,可以支持任意多的token规模数,不受 1m 的限制)

3. 从成本角度看,我们全球第一时间适配了 DeepSeek 的缓存机制,让输入成本再降2/3 左右(每百万可以到1块钱以内),并且量大,你还可以和供应商谈。此外单次请求,我们可以精确计算成本消耗。

实际上,对于普通用户,全部给这个默认设置足够好了(你的文档规模几百万token的话),而且效果也能获得最佳。

很多用户会感到惊讶,还有一个原因是,就是成本过于透明以后,他直观的感受到了成本,本质还是因为他现在的 RAG 场景实际上可有可无,价值,如果场景是一个特别值钱,甚至对赚钱很重要的情况,用户就不会这么敏感,甚至会觉得越贵越好(只要能效果能通过投钱不断提升。。。这是一件非常的好事)。 而 auto-coder.RAG 知识库就是那个,你只要愿意花钱就能提升效果,而不是花了钱,还不知道能不能提升效果,你的每一分钱提升了多少百分比都是可以精确计算的。

当然了,也有个悖论,有价值的场景和用户是稀缺的,你想让用户真的用起来,除了引导,还需要让成本变得用户感知上能接受,此外用户可能确实有几千万,上亿token规模的文档。于是我们也通过 duckdb/byzer storage 做成本和效果的 balance 平衡,整体而言,我们的发展路子是从上往下走的。。。先做到效果top,然后再不断的减低效果来降低成本,这个和 OpenAI 的策略是颇为类似的。

说到 duckdb/byzer storage , 其中 byzer storage 是我们自研的全文检索+向量融合存储和召回引擎,效果也很好,而且我们的用法也是反直觉的,比如我们基于duckdb/byzer storage 做召回,就没有所谓相似度阈值的设计,我们从 duckdb/byzer storage 做召回的时候,是按token数来做阈值的,比如你可以控制输出100万token,那么他就输出100万token,而不是所谓相似度分值。这个就是为了控制成本而诞生的一个阈值,而不是为了效果做的设计。

第三个反直觉设设计,我们也有rerank 阶段,但是我们没有使用任何rerank 模型,不像业界傻不拉几的按所谓相关度重排,而是采用了“信息还原” 为基本原则来做重排。比如我们召回了两个来自同一个文章的片段,我们重排是按出现片段在文档中按其出现顺序来实际顺序,保证来自同一篇文章的片段都被紧挨着排序,这样可以显著的降低回答模型看信息的难度。此外,对于比如如果是两篇文章有多个片段都出现了,我们有一套完整策略保证文章之间,文章内部片段顺序性。

第四个反直觉设计是,我们片段是会根据模型窗口,会自动调整,把小的文档做合并,把大的文档做超大切片(比如单个切片40k token),并且在做完召回后,会对切片做二次动态信息抽取,这种也是基于 emb 架构的RAG知识库不会做的。此外,我们认为窗口是极度稀缺的资源,我们将窗口按内存的方式进行管理,有全文区,有片段区,有缓存区等等,确保窗口被高质量,非重复的内容占用。

RAG 的第二层认知

最后,对于 RAG知识库,很多人是没有看到的本质的,大部分人对 RAG 知识库的认知是问答场景,也就是根据文档回答问题。这其实是一个非常初级的认知,同时这种使用场景也是一个非常初级的场景。

RAG 的本质是: 

1. 从一堆tokens中,抽取范式/经验 

2. 通过抽取的范式和经验,对新数据做处理

也就是RAG的服务不是人,而是新的数据。现在可以简单理解为,所谓“范式和经验” 等价于 ==> 资深老人。 大模型擅长“范式和经验”的抽取和模仿,而不是创新。听着比较抽象,等后续我做几个案例出来,大家就容易理解了。

最后吹了这么多,大家可以在通过这里的文档感受下 auto-coder.RAG (或者点击原文链接):

https://uelng8wukz.feishu.cn/wiki/Ham5w4qpRi5OoSkNyyAcM30Enmf?fromScene=spaceOverview

您可能感兴趣的与本文相关的镜像

Seed-Coder-8B-Base

Seed-Coder-8B-Base

文本生成
Seed-Coder

Seed-Coder是一个功能强大、透明、参数高效的 8B 级开源代码模型系列,包括基础变体、指导变体和推理变体,由字节团队开源

<think>嗯,用户想了解怎么用DeepSeek OpenWebUI和Ollama搭建私有的RAG知识库。首先,我得确认这两个工具的作用和它们之间的关系。Ollama应该是在本地运行大模型的工具,而DeepSeek OpenWebUI可能是一个用户界面,用来管理和交互。RAG需要结合检索和生成,所以可能需要向量数据库,比如Chroma或者FAISS。 接下来,得理清步骤。首先,用户需要安装Ollama,然后下载适合的模型,比如llama2或者deepseek的模型。然后安装DeepSeek OpenWebUI,可能需要进行配置,让它连接到Ollama。接着处理文档,转换成向量,存入数据库。最后整合RAG流程,测试整个系统。 可能需要注意的细节:Ollama的安装方法,是否支持Windows还是仅限Linux/macOS。DeepSeek OpenWebUI的配置可能需要修改设置文件,指向本地的Ollama服务。文档处理部分需要分词、向量化,可能需要用到Hugging Face的模型或者sentence-transformers。RAG的实现逻辑,如何结合检索结果生成回答。 用户可能遇到的问题包括环境配置错误,模型下载失败,OpenWebUI无法连接Ollama,或者向量数据库的集成问题。需要确保各服务之间的端口开放,比如Ollama默认的11434端口,OpenWebUI的端口是否冲突。 另外,要提醒用户准备足够的计算资源,尤其是运行本地模型需要较大的内存和显存。如果用户没有GPU,可能需要选择较小的模型或者使用量化版本。最后,测试部分需要验证检索是否正确,生成答案是否相关,可能需要示例代码或者命令。</think>以下为使用DeepSeek OpenWebUI和Ollama搭建私有RAG知识库的完整技术方案: --- ### 一、技术架构组成 $$ \text{RAG系统} = \text{Ollama(大模型)} + \text{DeepSeek OpenWebUI(交互层)} + \text{向量数据库} + \text{文档处理流水线} $$ 其中核心组件版本建议: - Ollama v0.1.25+ - DeepSeek OpenWebUI最新版 - Sentence-Transformers/all-MiniLM-L6-v2(嵌入模型) - Chroma DB(轻量级向量库) --- ### 二、详细搭建步骤 #### 步骤1:部署Ollama ```bash # Linux/macOS安装 curl -fsSL https://ollama.ai/install.sh | sh # 启动服务 ollama serve & # 下载模型(示例) ollama pull llama2:13b-chat # 基础大模型 ollama pull deepseek-ai/deepseek-coder-33b-instruct # 专用领域模型 ``` #### 步骤2:安装OpenWebUI ```bash # 使用Docker部署 docker run -d -p 3000:8080 \ -v openwebui:/app/backend/data \ --add-host=host.docker.internal:host-gateway \ --name openwebui \ ghcr.io/openwebui/openwebui:main # 配置模型连接 修改配置文件指向本地Ollama: API_BASE_URL=http://host.docker.internal:11434 ``` #### 步骤3:文档处理流水线 ```python from langchain.document_loaders import DirectoryLoader from langchain.text_splitter import RecursiveCharacterTextSplitter # 加载文档(支持PDF/DOCX/TXT) loader = DirectoryLoader('/知识库路径', glob="**/*.pdf") docs = loader.load() # 文档分块(数学表达) $$ \text{chunk_size}=512,\ \text{chunk_overlap}=64 $$ splitter = RecursiveCharacterTextSplitter.from_huggingface_tokenizer( tokenizer_name="BAAI/bge-small-en-v1.5", chunk_size=512, chunk_overlap=64 ) chunks = splitter.split_documents(docs) ``` #### 步骤4:向量数据库构建 ```python from langchain.vectorstores import Chroma from langchain.embeddings import HuggingFaceEmbeddings # 嵌入模型选择 embed_model = HuggingFaceEmbeddings( model_name="sentence-transformers/all-MiniLM-L6-v2" ) # 创建向量库 vector_db = Chroma.from_documents( documents=chunks, embedding=embed_model, persist_directory="./chroma_db" ) ``` #### 步骤5:RAG流程集成 ```python from langchain.chains import RetrievalQA from langchain.llms import Ollama # 初始化Ollama连接 llm = Ollama(base_url="http://localhost:11434", model="deepseek-coder-33b") # 构建检索链 qa_chain = RetrievalQA.from_chain_type( llm=llm, retriever=vector_db.as_retriever(search_kwargs={"k": 3}), chain_type="stuff" ) # 查询示例 response = qa_chain.run("如何配置Ollama的GPU加速?") ``` --- ### 三、核心参数优化建议 1. **分块策略优化**: $$ \text{信息密度阈值} = \frac{\text{关键实体数}}{\text{段落长度}} \geq 0.15 $$ 建议通过TF-IDF分析动态调整chunk_size 2. **检索增强参数**: ```yaml retriever: search_type: mmr # 最大边界相关算法 score_threshold: 0.65 fetch_k: 10 ``` 3. **推理参数配置**: ```python Ollama( temperature=0.3, top_p=0.9, num_ctx=4096 # 上下文窗口 ) ``` --- ### 四、验证测试方法 1. **检索有效性测试**: $$ \text{查全率} = \frac{\text{相关段落召回数}}{\text{总相关段落数}} $$ 建议构建测试集验证召回率 > 85% 2. **生成质量评估**: ```python # 使用RAGAS评估框架 from ragas.metrics import faithfulness, answer_relevancy score = evaluate( qa_chain, metrics=[faithfulness, answer_relevancy] ) ``` --- ### 五、常见问题解决方案 | 问题现象 | 排查方向 | 修复方案 | |---------|---------|---------| | OpenWebUI无法连接Ollama | 网络策略检查 | `docker network create ollama-net`并接入同一网络 | | 中文检索效果差 | 嵌入模型适配 | 切换为`text2vec-large-chinese`模型 | | 响应速度慢 | 量化模型 | 使用`llama2:13b-chat-q4_K_M`量化版本 | --- 该方案已在16GB内存+NVIDIA T4 GPU环境验证通过,建议生产环境使用Kubernetes进行容器编排管理。可通过调整chunk_size和检索策略适配不同领域知识库需求。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值