
RAG+langchain
文章平均质量分 83
大模型学习笔记
背太阳的牧羊人
管它什么真理无穷,进一寸有一寸的欢喜。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
PyPDFLoader
PyPDFLoader是LangChain中用于加载PDF文本内容的工具,可将PDF转换为适合大模型处理的Document对象。它提取每页文本并生成带元数据(文件名、页码)的结构化文档,适用于RAG问答、摘要等任务。使用时需注意其依赖底层PDF解析器,无法处理图像和复杂表格。可通过自定义加载器结合PyPDF2获取更多PDF元信息(作者、标题等),增强文本处理能力。典型应用流程包括:PDF加载→文本分割→向量化→检索→LLM问答。原创 2025-08-01 15:35:39 · 834 阅读 · 0 评论 -
辅助查询是根据查询到的文档片段再去生成新的查询问题
辅助查询是系统基于已检索文档片段,自动生成的新问题,用来更深入理解文档内容。原创 2025-04-05 21:37:21 · 458 阅读 · 0 评论 -
REASONING THOUGHT和REASONING分别是什么意思,有什么区别
REASONING THOUGHT(内部推理过程):就像在纸上列出详细的草稿笔记,包括所有计算步骤、验证逻辑等,但这些草稿只存在于系统内部,不对外公开。REASONING(对用户的推理结果):就像将草稿整理成一段简明易懂的说明,只展示最核心的信息和结论,让用户能够快速理解答案。原创 2025-04-05 19:15:10 · 477 阅读 · 0 评论 -
构建高效RAG系统的常用策略
想象你是一个图书管理员,需要整理一本厚重的百科全书:- **chunk_article 就像按章节分割**: - 你首先按照章节、段落等自然分界线将书分成几个部分 - 每个部分都是完整的、有意义的内容单元 - 这样分割出来的内容对人类读者友好,容易理解- **chunk_text 就像制作索引卡片**: - 为了方便电脑检索,你需要制作标准大小的索引卡片 - 每张卡片不能太大(否则电脑处理不了) - 卡片之间可以有一些重叠内容(确保连贯性)- **同时使用两种方法**原创 2025-03-17 11:47:50 · 1544 阅读 · 0 评论 -
使用create_sql_query_chain工具根据自然语言问题生成SQL查询,踩坑版
如果你正在开发一个数据库管理工具,用户可以通过自然语言提问(如“列出所有专辑的名称”),系统将自动生成相应的SQL查询并返回结果。通过这种方式,非专业人士也可以通过简单的语言操作数据库,而不必掌握SQL语法。原创 2025-02-28 11:13:06 · 1134 阅读 · 0 评论 -
通过 PromptTemplate 生成干净的 SQL 查询语句并执行SQL查询语句
通过**修改 PromptTemplate 来生成干净的 SQL 查询**,确保生成的查询不包含任何 Markdown 代码块标记或附加评论。通过修改 PromptTemplate 来生成 SQL 查询时,明确要求返回的 SQL 查询不包含任何附加评论或 Markdown 格式,确保生成的 SQL 查询是干净的、可执行的。这样可以避免由多余的标记导致的 SQL 语法错误。原创 2025-02-28 09:24:57 · 1248 阅读 · 0 评论 -
调用LangChain 的工具(Tool Calling) 功能,它允许 大语言模型(LLM) 调用外部工具(如计算器、数据库查询、API 调用等),从而增强其功能
调用外部工具(如计算器、数据库查询、API 调用等),从而增强其功能。例如,如果 LLM 需要执行数学运算,它可以调用一个计算函数,而不是自己尝试计算答案。方法是我们自定义乱写的一个方法,让模型直接调用这个方法它会不知道这个方法是什么的,因为我们并没有在工具中定义它,它会根据我们的提示工程(prompt)返回。这样,LLM 既可以聊天,又可以。方法被模型识别并正确返回结果。这就引出了下面的内容。✅ 检索搜索引擎数据。原创 2025-02-26 16:12:42 · 2194 阅读 · 1 评论 -
PydanticToolsParser 工具(tool call)把 LLM 生成的文本转成结构化的数据(Pydantic 模型)过程中遇到的坑
PydanticToolsParser 的作用PydanticToolsParser 是一个工具,主要作用是 把 LLM 生成的文本转成结构化的数据(Pydantic 模型),让代码更容易使用这些数据进行自动化处理。换句话说,AI 生成的文本通常是自然语言,代码不好直接解析,比如 "请帮我订明天上午 10 点到上海的机票"。如果用 PydanticToolsParser,就可以把这句话解析成一个 Python 对象,比如原创 2025-02-26 15:04:29 · 1325 阅读 · 0 评论 -
PydanticToolsParser 是一个工具(tool call),主要作用是 把 LLM 生成的文本转成结构化的数据(Pydantic 模型),让代码更容易使用这些数据进行自动化处理。
使用 LangChain 解析自然语言指令,并转换为结构化数据(Pydantic 模型)。绑定 LLM 工具,让模型能够解析订票、提醒、计算等任务。执行任务逻辑,直接调用 API 或执行相应操作,实现智能任务管理。原创 2025-02-26 14:51:30 · 633 阅读 · 0 评论 -
RAG中利用预定义的元数据字段和 LLM,将用户的自然语言查询自动转化为结构化的过滤条件
利用 LangChain 框架,将一组包含电影简述和元数据的文档进行向量化存储,然后通过自然语言查询来检索符合条件的电影记录。原创 2025-02-22 17:28:47 · 761 阅读 · 0 评论 -
RAG检索中使用一个 长上下文重排序器(Long Context Reorder) 对检索到的文档进行进一步的处理和排序,优化输出顺序
使用一个长上下文重排序器对检索到的文档进行进一步的处理和排序,优化输出顺序。Chroma:一个向量数据库,用于存储和检索文本嵌入。LongContextReorder:用于重新排序文档,使得在长文本处理时能够更好地利用上下文。HuggingFaceEmbeddings:利用 HuggingFace 提供的预训练模型生成文本的嵌入向量。原创 2025-02-22 15:29:17 · 1277 阅读 · 0 评论 -
基于传统信息检索算法 BM25 的检索器 和 基于大语言模型生成的文本嵌入(dense embeddings)来计算相似度的检索器 两者的区别和联系
BM25Retriever:这是一个基于传统信息检索算法 BM25 的检索器。BM25 算法利用文档中的关键词、词频和逆文档频率(IDF)等统计信息,来衡量查询和文档之间的匹配程度。它在捕捉精确词汇匹配方面表现很好,适合那些查询中包含明确关键词的场景。dense_retriever:这是基于大语言模型生成的文本嵌入(dense embeddings)来计算相似度的检索器。它通过将查询和文档都转换为向量,然后计算它们之间的相似性(例如使用余弦相似度),可以捕捉到更深层次的语义信息。这样,即使查询和文档原创 2025-02-22 13:21:05 · 1195 阅读 · 0 评论 -
利用 LangChain 进行多向量索引(Multi-representation Indexing)
**利用 LangChain 进行多向量索引(Multi-representation Indexing)**,通过从网页爬取文章,生成摘要,并使用向量数据库(Chroma)存储摘要,同时维护原始文档的存储,以便实现高效检索。原创 2025-02-21 10:53:47 · 1127 阅读 · 0 评论 -
retriever.get_relevant_documents(query, n_results=1)的内部执行流程
LangChain 的 retriever.get_relevant_documents() 并没有真的重新搜索原文,而是先找摘要的向量相似度,再通过 doc_id 取回完整原文,这只是封装方式的问题。你可以:直接用 vectorstore.similarity_search() 拿摘要,再手动用 doc_id 去 docstore 里查原文(等效做法)。用 retriever.get_relevant_documents() 让 LangChain 帮你做这件事,更简洁、更通用原创 2025-02-21 10:37:51 · 361 阅读 · 0 评论 -
retriever.docstore.mset(list(zip(doc_ids, docs)))为什么要先zip再list
zip(doc_ids, docs):把两个列表中对应的元素配对成元组。list(zip(doc_ids, docs)):将生成的迭代器转换为列表,确保数据可以被多次使用和正确传递给需要列表参数的函数。retriever.docstore.mset(...):利用 mset 方法将这些成对的数据批量写入到文档存储中。原创 2025-02-21 09:56:14 · 307 阅读 · 0 评论 -
RAG基于用户问题的内容,对其进行分类和路由,然后选择适当的处理方式(2)
让 LLM(大语言模型)自动把用户的搜索问题转换为结构化的查询条件,从而方便在数据库或向量检索系统中使用。原创 2025-02-20 16:52:08 · 971 阅读 · 0 评论 -
在大语言模型(LLM)中调用(Function Calling) 自定义的结构化函数
**函数调用(Function Calling)** 指的是**大语言模型(LLM)自动调用我们定义的结构化函数 ,比如这里的`RouteQuery`**,它的作用是根据输入的问题内容,返回对应的数据类别(`python_docs`、`js_docs` 或 `golang_docs`)。原创 2025-02-20 16:38:05 · 818 阅读 · 0 评论 -
RAG基于用户问题的内容,对其进行分类和路由,然后选择适当的处理方式(1)
RAG在检索过程中我们有时需要先**基于用户问题的内容,对其进行分类和路由**,然后**选择适当的处理方式**。它主要涉及**两种分类方法**: 1. **基于规则的逻辑分类(Logical Routing)** 2. **基于语义相似度的分类(Semantic Routing)**原创 2025-02-20 16:32:01 · 790 阅读 · 0 评论 -
RAG查询转换(Query Transformations)的优化方案(5)——HyDE(Hypothetical Document Embeddings)
1. **HyDE 文档生成**: - LLM 生成一个类似论文的假设文档,即使它的内容可能是错的。 - 这个步骤的目的是帮助后续的检索,而不是直接回答问题。2. **基于 HyDE 文档检索相关资料**: - 用生成的 HyDE 文本去数据库搜索相关信息,找到真正的文档。3. **基于检索到的文档生成答案**: - 把检索到的文档交给 LLM,让它整理成清晰的答案,确保最终结果基于真实数据。这种方法能显著提升 RAG 任务的效果,避免 LLM 直接"胡编"答案,而是基于原创 2025-02-20 14:14:01 · 714 阅读 · 0 评论 -
RAG查询转换(Query Transformations)的优化方案(4)——回退(Step Back)
创建 Few-shot 示例,教会 AI 如何改写问题。用 Step-Back 方式改写用户问题,使其更通用、更容易回答。同时使用原始问题和改写后的问题进行检索,获取更完整的上下文信息。综合这些信息生成最终答案,保证回答的准确性。原创 2025-02-20 11:43:48 · 871 阅读 · 0 评论 -
RAG查询转换(Query Transformations)的优化方案(3)——分解(Decomposition)
**分解式(Decomposition)RAG** 的实现,它的核心思想是 **将复杂问题拆解成多个子问题,每个子问题独立查询并回答,再逐步构建完整答案**。这样可以提高回答的准确性,尤其适用于需要多步推理的问题。原创 2025-02-20 11:24:23 · 1131 阅读 · 0 评论 -
RAG查询转换(Query Transformations)的优化方案(2)——RAG融合(RAG Fusion)
实现 **RAG-Fusion(Retrieval-Augmented Generation Fusion)**,它结合了 **多查询生成** 和 **重排序(Reciprocal Rank Fusion, RRF)**,以提高检索的相关性。原创 2025-02-20 10:04:23 · 890 阅读 · 0 评论 -
RAG查询转换(Query Transformations)的优化方案(1)——多查询(Multi Query)
爬取网页内容,提取 main_box 里的文本。把文本向量化并存储到 FAISS 数据库。让 LLM 生成 5 个改写版本的问题,提高召回率。用这 5 个问题去数据库检索,获取相关文档。原创 2025-02-20 09:49:49 · 1030 阅读 · 0 评论 -
导入faiss 遇到了Importerror:导入时DLL负载失败_multiarray_umath:找不到指定的模块。
如果你在 Mac 或 Linux 上,并且 Python 版本是 2.7、3.5、3.6 或 3.7,可以直接用 PyPI 或 conda(从 pytorch 渠道)安装 Faiss;如果你在 Windows 上,就必须用 conda,并且从 conda-forge 渠道安装 CPU 版本的 Faiss原创 2025-02-19 14:24:07 · 414 阅读 · 0 评论 -
retriever = vectorstore.as_retriever()这里的retriever 本身并不是检索到的文本块,而是一个 检索器(Retriever),它的作用是 根据输入问题,从 F
✅ retriever 不是文本块,而是一个 检索器。✅ 调用 retriever.invoke(question) 时,它才会返回 相关的文本块。✅ 在 RAG 流程中,retriever 负责 从 FAISS 数据库中找到与问题最相关的内容,然后提供给 LLM 生成答案。原创 2025-02-19 14:13:51 · 409 阅读 · 0 评论 -
从指定 URL抓取网页内容获取文本并使用 LangChain 构建一个 RAG(检索增强生成)系统并用langsmith监测数据检索流程,我保证超简单教程
实现: ✅ 从网页获取内容✅ 切分并嵌入文本✅ 用 FAISS 存储向量✅ 通过 LLM 回答问题 🚀原创 2025-02-19 11:13:07 · 1492 阅读 · 0 评论 -
使用 SQL 和表格数据进行问答和 RAG(7)—将表格数据(CSV 或 Excel 文件)加载到向量数据库(ChromaDB)中
将表格数据(CSV 或 Excel 文件)加载到向量数据库(ChromaDB)中。这里定义的类 `PrepareVectorDBFromTabularData`,它的主要功能是读取表格数据文件到DataFrame中、生成嵌入向量、并将这些数据存储在向量数据库的集合中,同时对注入的数据进行验证。原创 2025-01-08 20:00:00 · 1818 阅读 · 0 评论 -
使用 SQL 和表格数据进行问答和 RAG(6)—将指定目录下的 CSV 或 Excel 文件导入 SQLite 数据库
将指定目录下的 CSV 或 Excel 文件导入 SQLite 数据库。以下是详细代码逻辑:---### 1. **类结构**该类包含三个主要方法:- **`_prepare_db`**:负责将文件夹中的 CSV 和 XLSX 文件转换为 SQL 表。- **`_validate_db`**:用于验证 SQL 数据库中创建的表是否成功。- **`run_pipeline`**:主方法,按顺序调用 `_prepare_db` 和 `_validate_db` 方法完成整个数据导入流程。原创 2025-01-08 19:30:00 · 1153 阅读 · 0 评论 -
使用 SQL 和表格数据进行问答和 RAG(5)— RAG_with_tabular_data
配置 OpenAI API 和向量数据库。检查或创建集合。从 CSV 加载数据并生成嵌入。将嵌入数据存入向量数据库。嵌入用户问题,查询向量数据库。使用语言模型基于查询结果生成回答。原创 2025-01-08 17:45:00 · 1018 阅读 · 0 评论 -
使用 SQL 和表格数据进行问答和 RAG(4)— 使用 SQL 与 CSV 数据交互
将 Titanic 数据集上传到 SQLite 数据库。使用Langchain和 OpenAI 模型结合,实现自然语言查询数据库。自动执行 SQL 查询,并返回结果。代码运行的过程中,会利用数据库中的 Titanic 数据表,接受用户的自然语言查询(例如关于某个人的信息),并通过自动生成 SQL 查询来获取相关数据。import os# 加载环境变量# 忽略警告# 设置数据库路径。原创 2025-01-07 19:20:21 · 1401 阅读 · 0 评论 -
使用 SQL 和表格数据进行问答和 RAG(3)— 使用 LangChain 和 SQL 数据库构建一个可以通过自然语言询问数据库问题的流水线(Pipeline)
使用 LangChain 和 SQL 数据库构建一个可以通过自然语言询问数据库问题的流水线(Pipeline)。以下是代码的逐步解析和示例结果说明:从代码来看,你正在使用 LangChain 和 SQL 数据库构建一个可以通过自然语言询问数据库问题的流水线(Pipeline)。以下是代码的逐步解析和示例结果说明::使用 OpenAI 的模型(如 GPT-4)。 确保输出更稳定、确定。环境变量::API 接口的基础 URL。:API 的访问密钥。2. 创建 SQL 查询链:创建一个原创 2025-01-07 18:39:41 · 1104 阅读 · 0 评论 -
使用 SQL 和表格数据进行问答和 RAG(2)—通过 langchain_community.utilities 和 SQLAlchemy 来完成不同的查询和信息提取任务
这里先操作 SQLite 数据库,分别通过和SQLAlchemy来完成不同的查询和信息提取任务。原创 2025-01-07 19:21:00 · 606 阅读 · 0 评论 -
使用 SQL 和表格数据进行问答和 RAG(1)—数据库准备
注意:这里进入 SQLite 命令行后,就不需要再使用 sqlite3 命令。此命令将在data目录中创建一个名为。sqlite 数据库。的 SQL 数据库。原创 2025-01-07 13:57:02 · 461 阅读 · 0 评论