构建LangChain应用程序的示例代码:27、FLARE:前瞻性主动检索增强生成技术实现与应用的示例

本文主要是介绍构建LangChain应用程序的示例代码:27、FLARE:前瞻性主动检索增强生成技术实现与应用的示例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

FLARE:前瞻性主动检索增强生成

这个示例是前瞻性主动检索增强生成(FLARE)的实现。

请查看原始仓库。

基本思想是:

  • 开始回答问题
  • 如果开始生成模型不确定的标记,查找相关文档
  • 使用这些文档继续生成
  • 重复直到完成

在查找相关文档的方式上有很多有趣的细节。
基本上,模型不确定的标记会被突出显示,然后调用一个大型语言模型(LLM)生成一个会导致该答案的问题。例如,如果生成的文本是“Joe Biden went to Harvard”,模型不确定的标记是“Harvard”,那么一个生成的好问题可能是“Joe Biden 上的哪所大学?”。然后,这个生成的问题用于检索步骤来获取相关文档。

为了设置这个链,我们需要三件事:

  • 一个用于生成答案的 LLM
  • 一个用于生成用于检索的假设问题的 LLM
  • 一个用于查找答案的检索器

我们用来生成答案的 LLM 需要返回 logprobs,这样我们才能识别不确定的标记。因此,我们强烈推荐你使用 OpenAI 包装器(注意:不是 ChatOpenAI 包装器,因为它不返回 logprobs)。

我们用来生成用于检索的假设问题的 LLM 可以是任何东西。在这个示例中,我们将使用 ChatOpenAI,因为它快速且便宜。

检索器可以是任何东西。在这个示例中,我们将使用 SERPER 搜索引擎,因为它便宜。

其他需要理解的重要参数:

  • max_generation_len: 在停止检查是否有任何不确定之前生成的最大标记数
  • min_prob: 生成概率低于此的任何标记将被视为不确定

导入

import os# 设置 SERPER 和 OPENAI 的 API 密钥
os.environ["SERPER_API_KEY"] = ""
os.environ["OPENAI_API_KEY"] = ""
from typing import Any, Listfrom langchain.callbacks.manager import (AsyncCallbackManagerForRetrieverRun,CallbackManagerForRetrieverRun,
)
from langchain_community.utilities import GoogleSerperAPIWrapper
from langchain_core.documents import Document
from langchain_core.retrievers import BaseRetriever
from langchain_openai import ChatOpenAI, OpenAI

检索器

class SerperSearchRetriever(BaseRetriever):# Google Serper API 包装器search: GoogleSerperAPIWrapper = None# 创建检索器实例
retriever = SerperSearchRetriever(search=GoogleSerperAPIWrapper())

FLARE 链

# 我们这样设置,以便可以看到确切发生了什么
from langchain.globals import set_verbose# 开启详细模式
set_verbose(True)
from langchain.chains import FlareChain# 创建 FLARE 链实例
flare = FlareChain.from_llm(# 使用 ChatOpenAI 生成答案ChatOpenAI(temperature=0),# 设置检索器retriever=retriever,# 设置最大生成长度max_generation_len=164,# 设置最小概率值min_prob=0.3,
)
# 运行 FLARE 链,回答问题
query = "explain in great detail the difference between the langchain framework and baby agi"
flare.run(query)

’ LangChain is a framework for developing applications powered by language models. It provides a standard interface for chains, lots of integrations with other tools, and end-to-end chains for common applications. On the other hand, Baby AGI is an AI system that is exploring and demonstrating the potential of large language models, such as GPT, and how it can autonomously perform tasks. Baby AGI has the ability to complete tasks, generate new tasks based on previous results, and prioritize tasks in real-time. ’

# 使用 OpenAI 直接回答问题
llm = OpenAI()
llm.invoke(query)

‘\n\nThe Langchain framework and Baby AGI are both artificial intelligence (AI) frameworks that are used to create intelligent agents. The Langchain framework is a supervised learning system that is based on the concept of “language chains”. It uses a set of rules to map natural language inputs to specific outputs. It is a general-purpose AI framework and can be used to build applications such as natural language processing (NLP), chatbots, and more.\n\nBaby AGI, on the other hand, is an unsupervised learning system that uses neural networks and reinforcement learning to learn from its environment. It is used to create intelligent agents that can adapt to changing environments. It is a more advanced AI system and can be used to build more complex applications such as game playing, robotic vision, and more.\n\nThe main difference between the two is that the Langchain framework uses supervised learning while Baby AGI uses unsupervised learning. The Langchain framework is a general-purpose AI framework that can be used for various applications, while Baby AGI is a more advanced AI system that can be used to create more complex applications.’

# 运行 FLARE 链,回答另一个问题
query = "how are the origin stories of langchain and bitcoin similar or different?"
flare.run(query)

’ The origin stories of LangChain and Bitcoin are quite different. Bitcoin was created in 2009 by an unknown person using the alias Satoshi Nakamoto. LangChain was created in late October 2022 by Harrison Chase. Bitcoin is a decentralized cryptocurrency, while LangChain is a framework built around LLMs. ’


总结与扩展知识

FLARE 是一种结合了前瞻性主动检索和生成的技术,它通过在生成过程中检索相关信息来增强语言模型的生成能力。FLARE 的核心思想是在生成过程中,当模型对某些标记不确定时,通过检索相关文档来辅助生成更准确的答案。

在这个实现中,我们使用了以下技术和组件:

  1. 大型语言模型(LLM):用于生成答案和假设问题。这里推荐使用 OpenAI 的 API,因为它可以返回 logprobs,帮助我们识别模型不确定的标记。

  2. 检索器(Retriever):用于查找与生成问题相关的文档。在这个示例中,使用了 SERPER 搜索引擎,因为它成本较低。

  3. FlareChain:这是 LangChain 框架中的一个组件,用于构建和运行 FLARE 链。

  4. GoogleSerperAPIWrapper:一个包装器,用于简化与 Google SERPER 搜索引擎的交互。

  5. 环境变量:用于存储 API 密钥,保护敏感信息。

  6. LangChain 框架:一个用于构建和运行复杂语言模型链的框架,提供了一系列的工具和接口。

  7. 参数调整max_generation_lenmin_prob 是两个重要的参数,用于控制生成过程和不确定性标记的识别。

通过这些技术和组件的结合,FLARE 能够提供一种更加智能和准确的文本生成和检索方法,适用于需要高度定制化和准确性的问答系统。

这篇关于构建LangChain应用程序的示例代码:27、FLARE:前瞻性主动检索增强生成技术实现与应用的示例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1047560

相关文章

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

Python位移操作和位运算的实现示例

《Python位移操作和位运算的实现示例》本文主要介绍了Python位移操作和位运算的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 位移操作1.1 左移操作 (<<)1.2 右移操作 (>>)注意事项:2. 位运算2.1

如何在 Spring Boot 中实现 FreeMarker 模板

《如何在SpringBoot中实现FreeMarker模板》FreeMarker是一种功能强大、轻量级的模板引擎,用于在Java应用中生成动态文本输出(如HTML、XML、邮件内容等),本文... 目录什么是 FreeMarker 模板?在 Spring Boot 中实现 FreeMarker 模板1. 环

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

利用python实现对excel文件进行加密

《利用python实现对excel文件进行加密》由于文件内容的私密性,需要对Excel文件进行加密,保护文件以免给第三方看到,本文将以Python语言为例,和大家讲讲如何对Excel文件进行加密,感兴... 目录前言方法一:使用pywin32库(仅限Windows)方法二:使用msoffcrypto-too