ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

秋招agent八股文(3)

秋招agent八股文(3) 用最通俗易懂的方式来理解RAG那就是从数据库查资料把查到的资料拿出来然后写进Prompt里面最后交给LLM。一、RAG到底在做什么RAG是Retrieval-Augmented Generation通常译为“检索增强生成”。我的理解是先从外部资料中检索与问题相关的内容再把这些内容连同问题交给生成模型。外部资料是回答是提供的上下文不需要把这几条重新训练进模型参数。二、实现最简RAG项目环境准备##powershell## mkdir rag_practice cd rag_practice notepad rag.py创建文件夹并且进入然后创建一个Python的记事本脚本只要你本地电脑中已经有Python就足够了不需要再设置虚拟环境因为接下来这段代码不需要安装其他Python的包只需要Python自带的内容就可以完成了。三、项目代码第一步建库人工构造 3 条文档片段手动标注 id、关键词元数据直接生成可用的文档列表。documents [ { id: D1, keywords: [RAG, 检索增强生成], text: RAG 先检索相关资料再让模型根据资料回答问题。, }, { id: D2, keywords: [切分, 分块], text: 文本切分是把长文档拆成小段方便找到相关内容。, }, { id: D3, keywords: [Agent, 智能体], text: Agent 可以根据任务决定调用哪个工具。, }, ] print(f已准备 {len(documents)} 条资料)这是极简内容在完整项目中这段内容模拟建库建立企业级数据库需要下列流程1、文档加载统一输出结构文本可能来自不同类型的文件2、文本清洗和结构化解析去除水印、空行、乱码、统一编码等真实文件存在大量噪声3、文本切分解决检索匹配问题块太大→检索匹配不准块太小→上下文语义断裂4、元数据增强记录重要数据检索时可做元数据过滤比如只搜某份文件、某类主题回答时可溯源到具体页码建库时候Embedding模型建库时 D1 的 text → Embedding 模型 → 向量 v1 D2 的 text → Embedding 模型 → 向量 v2 D3 的 text → Embedding 模型 → 向量 v3 提问时 “怎样让模型先查资料再回答” → Embedding 模型 → 问题向量 q → 比较 q 与 v1、v2、v3 的相似度 → 取回最相关资料的原文第二步接受用户问题这段代码接收用户输入的问题去除空格并将内容转变为小写。question input(请输入问题).strip() normalized_question question.lower()在真实项目中用户内容可能来自网页聊天框或者接口请求可能还需要将问题处理为向量。第三步检索相关内容这里实现的是手工标签的词面匹配没有计算相关性分数。retrieved_docs [] for document in documents: for keyword in document[keywords]: if keyword.lower() in normalized_question: retrieved_docs.append(document) break在真实项目中用 Embedding 模型把每个片段转换成向量并让向量与原文、来源保持关联。所以Embedding模型的职责是帮助找经过处理向量数据库中的关联向量。第四步查看检索结果处理空结果打印命中了哪些资料便于检查检索是否符合预期。若一条也没找到就结束程序避免把空资料交给模型。print(f检索到 {len(retrieved_docs)} 条资料) for document in retrieved_docs: print(f[{document[id]}] {document[text]}) if not retrieved_docs: print(没有检索到相关资料暂不生成回答。) raise SystemExit第五步把资料整理成上下文把每条命中资料的编号和原文放在一起再用换行符连接。最终的context就是准备提供给模型的参考资料。context_lines [] for document in retrieved_docs: context_lines.append(f[{document[id]}] {document[text]}) context \n.join(context_lines)系统可能取回多个片段连同文件名、页码等来源一起整理。同时需要控制资料长度、减少重复内容避免把大量无关片段放进模型输入。第六步构造Prompt把回答要求、检索资料和用户问题放在同一个 Prompt 中。原本模型只看到问题现在还能看到我们检索出的资料。prompt f请只根据下面的资料回答问题。 如果资料不足请回答“资料不足无法回答”。 回答后标出所用资料编号例如 [D1]。 资料 {context} 问题{question} 回答所以我们总结一下用最通俗易懂的方式来理解RAG那就是从数据库查资料把查到的资料拿出来然后写进Prompt里面最后交给LLM。写进Prompt、写进Prompt、写进Prompt重要的东西说三遍最重要的地方就是把内容写进Prompt也可以说是写进提示词工程中。
返回列表