2026/5/21 19:15:36
网站建设
项目流程
开鲁企业网站建设,做网站优化有什么方法,2023年战争离我们越来越近了,巴中微信网站建设目录
Part 1#xff1a;RAG 概念地图
1.1 一句话定义#xff1a;RAG 在解决什么问题1.2 数据→解析→切块#xff1a;决定你能不能检索到1.3 表示与索引#xff1a;embedding / 向量库 / ANN1.4 检索#xff1a;BM25 / 向量 / Hybrid#xff08;RRF#x…目录Part 1RAG 概念地图1.1 一句话定义RAG 在解决什么问题1.2 数据→解析→切块决定你能不能检索到1.3 表示与索引embedding / 向量库 / ANN1.4 检索BM25 / 向量 / HybridRRF1.5 重排两阶段检索的质量杠杆1.6 生成Prompt 结构、温度、幻觉与引用1.7 评估与观测为什么 RAG 绝对不能只看起来对1.8 典型升级路径从能用到好用Part 2RAGFlow 快速跑通本地知识库重点跑通 坑2.1 30 分钟跑通最短路径步骤2.2 我遇见的坑Part 3手搓一个最小 RAGLlamaIndex——把概念对齐到代码3.1 技术栈说明3.2 Indexing从文档到向量库indexer.py3.3 Query从问题到答案 引用query_service.py3.4 Query with RerankPart 4从 Demo 到 Production你还回答的 10 个问题最后如果你只做三件事引用Part 1RAG 概念地图来自公开课 https://learn.deeplearning.ai/courses/retrieval-augmented-generation/information[1] 但按工程模块重组另上述课程由浅入深学习体验也不错非常建议花时间学一下1.1 一句话定义RAG 在解决什么问题RAG 检索Retrieval 增强提示Augmented Prompt 生成Generation。它试图解决的核心矛盾是大模型的参数知识不够新/不够细/不够可信而你又希望回答能引用到你自己的文档/数据。RAG 的优势通常是可更新更新知识不必重新训练模型可引用可以把证据片段塞给模型降低幻觉可解释至少能告诉你答案来自哪些片段哪怕仍可能错代价也很真实更慢多了一段检索流程更贵更多 token、更复杂的 pipeline更难评估很多问题不是答对/答错那么简单1.2 数据→解析→切块决定你能不能检索到你最终能检索到什么往往不是模型决定的而是切块策略决定的。常见切块chunking策略固定长度切块简单粗暴入门首选按语义切块基于段落/标题层级/语义边界更适合结构化文档上下文感知切块让 chunk 带上必要的标题/上文以便模型理解Parent-Child / 结构化切块课程里会提但很多系统也实现了类似思路child chunk 用于检索召回parent chunk更大用于最终注入上下文我的入门建议先用固定 chunk 跑通再升级让 chunk “自包含”看一眼能知道它在说什么标题/小节名很关键避免把表格、代码块、清单切碎得太散会导致召回到的片段没意义1.3 表示与索引embedding / 向量库 / ANNEmbedding 在干什么Embedding 把文本映射到向量空间语义相近的文本向量距离更近。你会听到两类指标相似度cosine similarity距离cosine distance / L2 等这不是玄学它直接影响你的向量库怎么建索引top-k 的结果是什么分数阈值如何设为什么需要 ANNApproximate Nearest Neighbor如果你有很多 chunk比如几十万、百万级精确 KNN 会慢。 ANN例如 HNSW用更快的近似搜索把延迟控制在可用范围。1.4 检索BM25 / 向量 / HybridRRF检索大致三派BM25关键词/稀疏检索优点对专有名词、精确匹配、数字/术语很强缺点对同义改写不稳向量检索稠密检索优点对语义相近/改写鲁棒缺点对必须出现的关键词不敏感比如版本号、函数名Hybrid混合检索把两者结合起来常见做法RRFReciprocal Rank Fusion等。Hybrid 为什么更稳因为它同时覆盖了两类失败模式向量检索召回了语义像但关键不对的片段BM25 召回了关键词对但上下文不对的片段Hybrid 本质是在做保险只要其中一条腿没断你就还有机会在下游重排/生成纠错。我的入门建议 如果我只有一天时间把系统从经常答非所问救回来最可能有效的不是换模型而是1加 BM25/hybrid2加 rerank3改 chunk 让片段更自包含。1.5 重排两阶段检索的质量杠杆经典结构是第一阶段召回recall——尽量别漏第二阶段重排rerank——尽量别乱Reranker重排模型会看 query 和候选 chunks给更精细的相关性分数。 它对语义相近但不回答问题的负例特别有效。1.6 生成Prompt 结构、温度、幻觉与引用在 RAG 里Prompt 不是写得像人话就行而要结构化地约束模型指令区你是谁、你要做什么上下文区检索到的 chunks最好带来源问题区用户问题规则区如何引用、如何拒答、不知道就说不知道温度等采样参数温度高更发散、更会编温度低更稳、更像检索归纳我的入门建议 低温度 明确引用证据/不足则拒答。1.7 评估与观测为什么 RAG 绝对不能只看起来对RAG 的问题在于 模型可能说得很像但证据可能是错的/引用不一致/检索根本没召回到关键片段。所以评估至少要拆成两层检索评估有没有召回到正确证据Recallk 等生成评估答案是否忠于证据、是否完整、是否存在幻觉以及工程侧的观测每次 query 的检索结果、分数、最终注入上下文token 成本、延迟、失败率线上问题可以 replay回放复现1.8 典型升级路径从能用到好用固定 chunk 向量检索跑通加 metadata 过滤按时间/分类/权限加 hybridBM25 dense加 rerankquery rewrite / HyDE对短 query、口语 query 特别有效做评估集golden set 自动评测做观测与回放tracing logsPart 2RAGFlow 快速跑通本地知识库重点跑通 坑RAGFlow 更像可视化的 RAG 工厂帮你把解析、切块、索引、检索、对话、引用串起来很适合用于快速试错、对比 chunk 策略、给团队演示、做小规模内部知识库顺便提一下ragflow 采用 elasticsearch (ES 同时支持稀疏检索和向量检索)作为检索引擎是能支持 hybrid 检索的我的建议定位把 RAGFlow 当成验证想法 找坑位的工具而不是一开始就当生产系统。2.1 30 分钟跑通最短路径步骤下面是最短路径写法不追求最优参数追求先让系统跑通、能对话、能看到引用。 另外网上有非常多的 ragflow 视频教程快速上手推荐参看 https://www.bilibili.com/video/BV1VBsFe5E9b/?vd_sourcee9c10f97d409faf1f2853fda32ac3264[2]Step 1启动 RAGFlow按官方方式跟随官方文档启动用$ docker compose -f docker-compose.yml up -d方式启动即可启动时服务默认运行在80 端口在浏览器输入http://localhost即可进入 Web UI注册后即可登入。进入http://localhost/user-setting/model页面设置默认模型。设置 LLM 模型 (必选)设置 Embedding 模型 (必选)设置 Rerank 模型(可选): 参考 [坑 2Hugging Face 运行 rerank 模型]因为我有 GLM coding plan所以 LLM 和 Embedding 模型直接使用了智谱的模型但 GLM coding plan 不支持 Rerank 模型且开发机机能有限我选择本地部署 huggingface 的 cross-encoder/ms-marco-MiniLM-L-6-v2模型设置示例Step 2创建数据集 / 知识库进入知识库 Tab新建 dataset选择文档来源上传文件或连接存储上传你的笔记类文档比如 Markdown/PDF/Docx设置配置解析方法选择 General此时可以看到 chunk size / overlap 等选项开始 parsing / OCR / 抽取结构视文档类型构建索引 检索测试待 embedding/索引完成可在检索测试页输入示例问题可在结果页面查看命中的 chunk 分数/来源。Step 3进入 Chat对话并检查引用进入 Chat Tab新建 chat配置聊天设置在 知识库 设置中选择 Step2 创建的 dataset配置 rerank 模型(可选)LLM 模型和配置ragflow 提供了 balance / precise / improvise 3个预设模板可以大致感受下不同参数的意义参数平衡模式 (Balance)精确模式 (Precise)即兴模式 (Improvise)说明Temperature0.5✓0.2✓0.8✓控制生成文本的随机性和创造性Top P0.85✓0.75✓0.9✓核采样控制词汇选择的多样性Presence penalty0.2✓0.5✓0.1✓惩罚重复出现的主题Frequency penalty0.3✓0.5✓0.1✓惩罚高频词的重复使用适用场景• 需要准确、一致输出的任务 • 技术文档编写 • 数据分析和报告 • 代码生成和调试 • 事实性问答• 日常对话和交流 • 通用内容创作 • 解释和说明 • 一般性问答• 创意写作 • 头脑风暴 • 故事创作 • 诗歌和艺术创作 • 需要创新想法的场景调参原则先调整Temperature这是影响最大的参数Top P通常与 Temperature 配合使用Penalty参数用于控制重复根据具体需求调整不同模型对相同参数的响应可能不同需要针对性测试配置完成后即可尝试对话使用Chat 页回答 引用/citation 展示2.2 我遇见的坑坑 1elasticsearch 容器无法正常启动常见原因: 这是由于vm.max_map_count参数设置过低导致的 如果你是 macOS 上可以使用以下命令修复参考官方文档[3]# macOS with Docker Desktop: 更新 vm.max_map_countdocker run --rm --privileged --pidhost alpine sysctl -w vm.max_map_count262144坑 2Hugging Face 运行 rerank 模型模型下载慢 如果你的环境需要镜像或代理经常需要设置HF_ENDPOINT等环境变量具体以你环境为准使用腾讯云 https://hf-mirror.com/[4] 镜像通过text-embeddings-router本地运行 rerank 模型安装brew install text-embeddings-inference坑 3知识库的内置解析方法Resume不可用使用 resume 方法解析会返回错误原因是开源版的 ragflow 未做支持: https://github.com/infiniflow/ragflow/issues/4913[5]Part 3手搓一个最小 RAGLlamaIndex——把概念对齐到代码很多人学 RAG 最大问题是看了讲解还是不知道一段代码到底对应 pipeline 的哪一环这一部分帮助建立概念→代码映射。3.1 技术栈说明我的最小 RAG demo本地代码使用框架LlamaIndexLLMglm-4-plusEmbeddingembedding-2向量库Chroma持久化目录./chroma_db向量空间cosineHNSW向量数据库客户端VectorDBZ向量本地 Rerank 模型TEI 运行 huggingface cross-encoder/ms-marco-MiniLM-L-6-v2示例代码仓库 llamaindex_demo 地址https://github.com/dalang/llamaindex_demo[6]3.2 Indexing从文档到向量库indexer.pyIndexing 阶段做的事情可以对应到 Part 1 的模块读取文档Loader切块Chunking向量化Embedding写入向量库Vector Store Index在我的 demo 中核心关注点是两个切块参数chunk_size / overlap我使用CHUNK_SIZE 512CHUNK_OVERLAP 50本地向量数据库持久化可以重启服务而不丢索引: 我选择了 Chroma 向量数据库构建本地向量库安装完依赖并设置完 embedding model 的 api key 后执行python indexer.pyindexer.py 会读取项目根目录下的 data 文件夹并转换成向量并存储通过metadata{hnsw:space: cosine}指定使用余弦相似度因为 llamaindex 默认使用余弦相似度。执行成功后会在项目根目录下的 chroma_db 生成向量库推荐向量数据库 GUI工具 VectorDBZ 查看/验证生成的向量数据库通过 VectorDBZ[7] 查看生成的 documents每条记录对应一个向量数据。除了 vector 值和 document 文本内容还会带其他元信息字段VectorDBZ查看生成的向量数据库通过 VectorDBZ 的 search 功能验证查询VectorDBZ搜索验证先通过配置的 GLM embedding 模型将待查询文本What did the author do in college?转成向量值 (即截图中对应的 SEARCH VECTOR 框中的一组浮点序列)查询时就是用这组序列让向量数据库执行匹配结果。点击 Search 按钮返回匹配记录(Top K用于限制返回的数量)匹配记录的score字段是 chroma 数据库执行查询时计算的余弦相似度3.3 Query从问题到答案 引用query_service.py初始查询先不引入 rerank(将 config.py 中设置USE_RERANK False SIMILARITY_TOP_K 3)此时 Query 阶段对应模块将问题 embedding或使用 query transform在 Chroma 里 top-k 检索将命中的 chunks 组装成上下文Context把上下文 问题 规则交给 LLM 生成返回答案 source_nodes引用来源» uv run query_service.py RAG 查询服务 (输入 quit 退出)❓ 请输入问题: What did the author do in college? 回答:----------------------------------------------------------------------The author participated in a program at Cornell that didnt require choosing a specific major. They were able to select any classes they wanted and customize their degree program. The author chose to focus on Artificial Intelligence for their degree, though they later became disillusioned with this field during graduate school. They also worked on programming during this time, specifically writing programs on an IBM 1401 computer using Fortran, though they found it challenging to create meaningful programs with the limited available input methods. 相关来源: 来源 1 (相似度: 0.6384) Then one day in April 1990 a crack appeared in the wall. I ran into professor Cheatham and he asked ... {file_path: /Users/dalang/playground/llamaindex_demo/data/paul_graham_essay.txt, file_name: paul_graham_essay.txt, file_type: text/plain, file_size: 75042, creation_date: 2026-01-13, last_modified_date: 2026-01-13} 来源 2 (相似度: 0.6315) What I Worked OnFebruary 2021Before college the two main things I worked on, outside of school, ... {file_path: /Users/dalang/playground/llamaindex_demo/data/paul_graham_essay.txt, file_name: paul_graham_essay.txt, file_type: text/plain, file_size: 75042, creation_date: 2026-01-13, last_modified_date: 2026-01-13} 来源 3 (相似度: 0.6206) I had gotten into a program at Cornell that didnt make you choose a major. You could take whatever ... {file_path: /Users/dalang/playground/llamaindex_demo/data/paul_graham_essay.txt, file_name: paul_graham_essay.txt, file_type: text/plain, file_size: 75042, creation_date: 2026-01-13, last_modified_date: 2026-01-13}在 query_service.py 程序中使用相同的提问What did the author do in college?查询返回了相同的3条 document 记录。但是相似度值却不相同chroma db 余弦相似度llamaindex 相似度0.55130.63840.54030.63150.52290.6206理解 RAG必须要理解分数的含义这个问题困扰我许久下面直接解释原因llamaindex 返回的相似度并没有直接使用 chroma db 返回的余弦相似度在 https://github.com/run-llama/llama_index/blob/main/llama-index-integrations/vector_stores/llama-index-vector-stores-chroma/llama_index/vector_stores/chroma/base.py#L472-L473[8] 用如下指数衰减函数做了转换similarity_score math.exp(-distance)similarities.append(similarity_score)转换关系证明# 从 cosine similarity 到 score 的完整转换: cosine_similarity 0.5513# 手动计算的 cosine_distance 1 - cosine_similarity 0.4487# llamaindex 返回llamaindex_score math.exp(-cosine_distance) 0.6384 # 最终分数我认为指数衰减的优势: 非线性映射放大高相似度之间的差异,压缩低相似度的差异你可以通过以下代码查看 llamaindex 索引增强后的 LLM prompt# 添加这几行来启用详细日志import llama_index.corellama_index.core.set_global_handler(simple)# 或者启用更详细的调试logging.getLogger(llama_index).setLevel(logging.DEBUG)下面的 LLM prompt 清晰的展示了 llamaindex 如何将 rag 返回的索引组装进 prompt** Messages: **system: You are an expert QA system that is trusted around the world.Always answer the query using the provided context information, and not prior knowledge.Some rules to follow:1. Never directly reference the given context in your answer.2. Avoid statements like Based on the context, ... or The context information ... or anything along those lines.user: Context information is below.---------------------file_path: /Users/dalang/playground/llamaindex_demo/data/paul_graham_essay.txtThen one day in April 1990 a crack appeared in the wall. I ran into professor Cheatham and he asked if I was far enough along to graduate that June. ...省略文本...I had some money saved from consulting work Id done in grad school; there was probably enough to last a year if I lived cheaply. Now all I had to do was learn Italian.file_path: /Users/dalang/playground/llamaindex_demo/data/paul_graham_essay.txtWhat I Worked On省略文本...My clearest memory is of the moment I learned it was possible for programs not to terminate, when one of mine didnt. On a machine without time-sharing, this was a social as well as a technical error, as the data center managers expression made clear.With microcomputers, everything changed.file_path: /Users/dalang/playground/llamaindex_demo/data/paul_graham_essay.txtI had gotten into a program at Cornell that didnt make you choose a major. You could take whatever classes you liked, and choose whatever you liked to put on your degree. ...省略文本...I knew from experience that Lisp was interesting for its own sake and not just for its association with AI, even though that was the main reason people cared about it at the time. So I decided to focus on Lisp. In fact, I decided to write a book about Lisp hacking.---------------------Given the context information and not prior knowledge, answer the query.Query: What did the author do in college?3.4 Query with Rerank将 config.py 中设置USE_RERANK True SIMILARITY_TOP_K 10 #rerank 前通常初始检索数量建议增大到10 以上)本地使用text-embeddings-inferenceTEI 运行 huggingface rerank model:cross-encoder/ms-marco-MiniLM-L-6-v2:text-embeddings-router --model-id cross-encoder/ms-marco-MiniLM-L-6-v2 --port 8099在 macos 上用mitmproxy --mode reverse:http://127.0.0.1:8099 -p 9999, 通过 mitmproxy 可以方便查看 TEI 服务接收到的 api 请求在 config.py 中设置 rerank api:RERANK_API_URL http://localhost:9999» uv run query_service.py RAG 查询服务 (输入 quit 退出)❓ 请输入问题: What did the author do in college? 回答:----------------------------------------------------------------------The author went to Cornell University, where they were in a program that didnt require choosing a major. They selected Artificial Intelligence as their focus area. After completing their undergraduate degree, the author applied to three graduate schools (MIT, Yale, and Harvard) and was only accepted to Harvard, where they attended graduate school. During their first year of graduate school, the author became disillusioned with AI as it was practiced at the time and shifted their focus to Lisp programming, eventually deciding to write a book about Lisp hacking. 相关来源: 来源 1 (相似度: 0.0380) What I Worked OnFebruary 2021Before college the two main things I worked on, outside of school, ... {file_path: /Users/dalang/playground/llamaindex_demo/data/paul_graham_essay.txt, file_name: paul_graham_essay.txt, file_type: text/plain, file_size: 75042, creation_date: 2026-01-13, last_modified_date: 2026-01-13} 来源 2 (相似度: 0.0026) Then one day in April 1990 a crack appeared in the wall. I ran into professor Cheatham and he asked ... {file_path: /Users/dalang/playground/llamaindex_demo/data/paul_graham_essay.txt, file_name: paul_graham_essay.txt, file_type: text/plain, file_size: 75042, creation_date: 2026-01-13, last_modified_date: 2026-01-13} 来源 3 (相似度: 0.0022) I had gotten into a program at Cornell that didnt make you choose a major. You could take whatever ... {file_path: /Users/dalang/playground/llamaindex_demo/data/paul_graham_essay.txt, file_name: paul_graham_essay.txt, file_type: text/plain, file_size: 75042, creation_date: 2026-01-13, last_modified_date: 2026-01-13} 工作流程Embedding 检索 (Top 10) ChromaDB 返回 10 个候选文档↓TEI Rerank (9999 端口) Cross-encoder 精确评分 选出最相关的 3 个文档TEI Rerank API请求TEI Rerank API响应↓LLM 生成 基于 Top 3 生成高质量答案此时 相似度 值使用 rerank 的 score。Part 4从 Demo 到 Production你还回答的 10 个问题这一部分是roadmap/checklist总结行业里把 RAG 从 Demo 推到生产时经常遇到的关键问题。 我本人没有把一个 RAG 系统做过完整生产闭环因此这里不是生产复盘而是你要补的课表问题主要有以下几个方面数据质量问题解析失败、内容重复、噪声、权限检索质量问题召回不足、召回过多、query 不匹配语料生成质量问题引用不稳、幻觉、答非所问工程问题延迟、成本、稳定性、可观测性Q1知识库如何增量更新如何避免重建全库文档持续变化时全量重算 embedding 很贵而增量更新会引入版本、重复、失效引用。Q2权限/多租户怎么做ACL同一个问题不同用户能看的证据集合不同只在生成端过滤是不够的。Q3文档解析与切块如何按文档类型定制PDF、扫描件、网页、表格、代码、法律条文……结构差异巨大。Q4为什么你的系统需要 Hybrid Rerank只用 dense 检索会丢关键词BM25 又不懂语义没有 rerank 时 top-k 噪声大。Q5Query Rewrite / HyDE 什么时候做怎么避免越改越偏用户问题短、口语化、带指代直接检索容易召回不到。Q6如何做可重复的评估不是我觉得它变好了RAG 的改动影响链路很长没有评估集就只能凭感觉。Q7如何做到可观测tracing / replay / debugging线上出问题时你需要知道是没召回到、还是召回到了但没用、还是模型瞎编。Q8如何控制延迟与成本缓存、路由、分级检索 rerank 大模型生成三段叠加延迟token 成本会爆。Q9可靠性怎么做降级策略是什么向量库、rerank、LLM 任一环不稳都可能把系统拖垮。Q10安全怎么做提示注入、数据泄露、PIIRAG 会把外部内容文档喂给模型提示注入/越权读数据风险更高。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】