跳转到主要内容

标签(标签)

资源精选(342) Go开发(108) Go语言(103) Go(99) angular(82) LLM(75) 大语言模型(63) 人工智能(53) 前端开发(50) LangChain(43) golang(43) 机器学习(39) Go工程师(38) Go程序员(38) Go开发者(36) React(33) Go基础(29) Python(24) Vue(22) Web开发(20) Web技术(19) 精选资源(19) 深度学习(19) Java(18) ChatGTP(17) Cookie(16) android(16) 前端框架(13) JavaScript(13) Next.js(12) 安卓(11) typescript(10) 资料精选(10) NLP(10) 第三方Cookie(9) Redwoodjs(9) LLMOps(9) Go语言中级开发(9) 自然语言处理(9) 聊天机器人(9) PostgreSQL(9) 区块链(9) mlops(9) 安全(9) 全栈开发(8) ChatGPT(8) OpenAI(8) Linux(8) AI(8) GraphQL(8) iOS(8) 软件架构(7) Go语言高级开发(7) AWS(7) C++(7) 数据科学(7) whisper(6) Prisma(6) 隐私保护(6) RAG(6) JSON(6) DevOps(6) 数据可视化(6) wasm(6) 计算机视觉(6) 算法(6) Rust(6) 微服务(6) 隐私沙盒(5) FedCM(5) 语音识别(5) Angular开发(5) 快速应用开发(5) 提示工程(5) Agent(5) LLaMA(5) 低代码开发(5) Go测试(5) gorm(5) REST API(5) 推荐系统(5) WebAssembly(5) GameDev(5) CMS(5) CSS(5) machine-learning(5) 机器人(5) 游戏开发(5) Blockchain(5) Web安全(5) Kotlin(5) 低代码平台(5) 机器学习资源(5) Go资源(5) Nodejs(5) PHP(5) Swift(5) 智能体(4) devin(4) Blitz(4) javascript框架(4) Redwood(4) GDPR(4) 生成式人工智能(4) Angular16(4) Alpaca(4) SAML(4) JWT(4) JSON处理(4) Go并发(4) kafka(4) 移动开发(4) 移动应用(4) security(4) 隐私(4) spring-boot(4) 物联网(4) nextjs(4) 网络安全(4) API(4) Ruby(4) 信息安全(4) flutter(4) 专家智能体(3) Chrome(3) CHIPS(3) 3PC(3) SSE(3) 人工智能软件工程师(3) LLM Agent(3) Remix(3) Ubuntu(3) GPT4All(3) 软件开发(3) 问答系统(3) 开发工具(3) 最佳实践(3) RxJS(3) SSR(3) Node.js(3) Dolly(3) 移动应用开发(3) 编程语言(3) 低代码(3) IAM(3) Web框架(3) CORS(3) 基准测试(3) Go语言数据库开发(3) Oauth2(3) 并发(3) 主题(3) Theme(3) earth(3) nginx(3) 软件工程(3) azure(3) keycloak(3) 生产力工具(3) gpt3(3) 工作流(3) C(3) jupyter(3) 认证(3) prometheus(3) GAN(3) Spring(3) 逆向工程(3) 应用安全(3) Docker(3) Django(3) R(3) .NET(3) 大数据(3) Hacking(3) 渗透测试(3) C++资源(3) Mac(3) 微信小程序(3) Python资源(3) JHipster(3) 大型语言模型(2) 语言模型(2) 可穿戴设备(2) JDK(2) SQL(2) Apache(2) Hashicorp Vault(2) Spring Cloud Vault(2) Go语言Web开发(2) Go测试工程师(2) WebSocket(2) 容器化(2) AES(2) 加密(2) 输入验证(2) ORM(2) Fiber(2) Postgres(2) Gorilla Mux(2) Go数据库开发(2) 模块(2) 泛型(2) 指针(2) HTTP(2) PostgreSQL开发(2) Vault(2) K8s(2) Spring boot(2) R语言(2) 深度学习资源(2) 半监督学习(2) semi-supervised-learning(2) architecture(2) 普罗米修斯(2) 嵌入模型(2) productivity(2) 编码(2) Qt(2) 前端(2) Rust语言(2) NeRF(2) 神经辐射场(2) 元宇宙(2) CPP(2) 数据分析(2) spark(2) 流处理(2) Ionic(2) 人体姿势估计(2) human-pose-estimation(2) 视频处理(2) deep-learning(2) kotlin语言(2) kotlin开发(2) burp(2) Chatbot(2) npm(2) quantum(2) OCR(2) 游戏(2) game(2) 内容管理系统(2) MySQL(2) python-books(2) pentest(2) opengl(2) IDE(2) 漏洞赏金(2) Web(2) 知识图谱(2) PyTorch(2) 数据库(2) reverse-engineering(2) 数据工程(2) swift开发(2) rest(2) robotics(2) ios-animation(2) 知识蒸馏(2) 安卓开发(2) nestjs(2) solidity(2) 爬虫(2) 面试(2) 容器(2) C++精选(2) 人工智能资源(2) Machine Learning(2) 备忘单(2) 编程书籍(2) angular资源(2) 速查表(2) cheatsheets(2) SecOps(2) mlops资源(2) R资源(2) DDD(2) 架构设计模式(2) 量化(2) Hacking资源(2) 强化学习(2) flask(2) 设计(2) 性能(2) Sysadmin(2) 系统管理员(2) Java资源(2) 机器学习精选(2) android资源(2) android-UI(2) Mac资源(2) iOS资源(2) Vue资源(2) flutter资源(2) JavaScript精选(2) JavaScript资源(2) Rust开发(2) deeplearning(2) RAD(2)

category

注意:这篇文章假设你对LangChain有一定的熟悉程度,并且是适度的技术性文章。

💡 TL;DR:我们引入了新的抽象和新的文档检索器,以便于对检索到的文档进行后处理。具体来说,新的抽象使得获取一组检索到的文档并仅从中提取与给定查询相关的信息变得容易。

介绍

许多LLM支持的应用程序需要一些可查询的文档存储,以便检索尚未烘焙到LLM中的特定于应用程序的信息。

假设你想创建一个聊天机器人,可以回答有关你个人笔记的问题。一种简单的方法是将笔记嵌入大小相等的块中,并将嵌入的内容存储在向量存储中。当你问系统一个问题时,它会嵌入你的问题,在向量存储中执行相似性搜索,检索最相关的文档(文本块),并将它们附加到LLM提示中。

langchain

A simple retrieval Q&A system

问题

这种方法的一个问题是,当您将数据摄取到文档存储系统中时,您通常不知道将使用哪些特定查询来检索这些文档。在我们的笔记问答示例中,我们简单地将文本划分为大小相等的块。这意味着,当我们得到一个特定的用户问题并检索一个文档时,即使文档有一些相关的文本,它也可能有一些不相关的文本。

在LLM提示中插入不相关的信息是错误的,因为:

  • 这可能会分散LLM对相关信息的注意力
  • 它占用了宝贵的空间,可以用来插入其他相关信息。

解决方案

为了帮助实现这一点,我们引入了DocumentCompressor抽象,它允许您在检索到的文档上运行compress_documents(documents:List[Document],query:str)。这个想法很简单:我们可以使用给定查询的上下文对它们进行压缩,从而只返回相关信息,而不是按原样立即返回检索到的文档。这里的“压缩”是指压缩单个文档的内容和大规模过滤掉文档。

langchain

Retrieval Q&A system with contextual document compression

压缩器的目标是使仅将相关信息传递给LLM变得容易。通过这样做,它还使您能够将更多信息传递给LLM,因为在最初的检索步骤中,您可以专注于召回(例如,通过增加返回的文档数量),并让压缩器处理精度。

特征

我们在LangChain Python包中实现了几个新功能:

  • 一套文档压缩器,您可以开箱即用。
  • ContextualCompressionRetriever将另一个Retriever与DocumentCompressor一起打包,并自动压缩基本Retriever的检索文档。

一些文档压缩器示例:

  • LLMChainExtractor使用LLMChain仅从每个文档中提取与查询相关的语句。
  • EmbeddingsFilter嵌入检索到的文档和查询,并筛选出嵌入与嵌入查询不太相似的任何文档。这个压缩器本身的功能与大多数VectorStore检索器非常相似,但它作为…
  • …DocumentCompressorPipeline,它可以轻松地创建转换和压缩器的管道并按顺序运行它们。一个简单的例子是,您可能需要将TextSplitter和EmbeddingsFilter组合在一起,首先将文档分解成更小的部分,然后筛选出不再相关的拆分文档。

您可以在任何现有的Retriever(无论是基于VectorStore还是其他)上尝试这些方法,比如:

from langchain.llms import OpenAI
from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import LLMChainExtractor

# base_retriever defined somewhere above...

compressor = LLMChainExtractor.from_llm(OpenAI(temperature=0))
compression_retriever = ContextualCompressionRetriever(base_compressor=compressor, base_retriever=retriever)
contextual_retriever.get_relevant_documents("insert query here")

前往笔记本这里获取一些示例

文章链接