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

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

时间:2024-06-11 17:29:48浏览次数:15  
标签:检索 27 示例 FLARE langchain 生成 framework import

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, List

from 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 能够提供一种更加智能和准确的文本生成和检索方法,适用于需要高度定制化和准确性的问答系统。

标签:检索,27,示例,FLARE,langchain,生成,framework,import
From: https://blog.csdn.net/wangjiansui/article/details/139502828

相关文章

  • 淘宝and京东商品详情API与订单详情API的实时性与准确性(接口返回数据参考示例,可高并发
    API全称应用程序编程接口(ApplicationProgrammingInterface),是一组用于访问某个软件或硬件的协议、规则和工具集合。电商API就是各大电商平台提供给开发者访问平台数据的接口。目前,主流电商平台如淘宝、天猫、京东、苏宁等都有自己的API。封装接口介绍在实际开发中,为了提高......
  • 5.27
    完成python作业 8-2【Python0022】珠算测试器【题目描述】设计一个珠算测试器,要求能够完成珠算加减法的测试。具体的要求功能如下:(1)用户启动测试,输入用户名后系统随机生成特定数目的加减法测试题;(2)要求测试使用表盘式或数字时秒表进行界面计时显示;(3)对于每道测试题......
  • 深入探讨跨域请求(CORS):原理、解决方案与详细示例代码
    深入探讨跨域请求(CORS):原理、解决方案与详细示例代码......
  • tcpdump抓包后wireshark无法打开,报错中带有272
    问题引入tcpdump抓包后wireshark无法打开(2开头版本的wireshark不能打开,4开头的wireshark可以打开)。安装最新的4开头的wireshark后可以打开抓包。使用的抓包命令是tcpdump-iany-wfff.pcap。原因2开头版本的wireshark不支持解析链路层数据类型为linuxcookedv2的抓包。......
  • 【Java】SpringBoot 实现文件的上传与下载、日志记录、参数校验等(含代码示例)
    ......
  • Serverless部署应用并使用Cloudflare加速和支持HTTPS
    ServerlessServerless是一种云计算模型,它使开发人员能够构建和运行应用程序,而无需关心底层的服务器基础设施。在传统的应用程序开发中,开发人员需要管理服务器的配置、扩展和维护等任务。而在Serverless模型中,这些任务都由云服务提供商来处理,开发人员只需专注于编写应用程序的......
  • 【栈】2751. 机器人碰撞
    本文涉及知识点栈LeetCode2751.机器人碰撞现有n个机器人,编号从1开始,每个机器人包含在路线上的位置、健康度和移动方向。给你下标从0开始的两个整数数组positions、healths和一个字符串directions(directions[i]为‘L’表示向左或‘R’表示向右)。posit......
  • 【计算机毕业设计】277微信小程序医院挂号系统
    ......
  • 纳什均衡:博弈论中的运作方式、示例以及囚徒困境
    文章目录一、说明二、什么是纳什均衡?2.1基本概念2.2关键要点三、理解纳什均衡四、纳什均衡与主导策略五、纳什均衡的例子六、囚徒困境七、如何原理和应用7.1博弈论中的纳什均衡是什么?7.2如何找到纳什均衡?7.3为什么纳什均衡很重要?7.4如何计算纳什均衡?7.5纳什均衡......
  • 2024-6-9 石群电路-27
    2024-6-9,星期日,12:49,天气:晴,心情:晴。Hello,大家,我回来啦,昨天断更了一天,是为什么捏,是因为,我通过毕业答辩啦!!!!!!果然,虽然是小小硕士,但是听到那句,“经答辩委员会决议,xx同学通过毕业论文答辩,建议授予工学硕士学位”,也是很爽的,至于博士大佬听到这句话什么感想,小子就先不想啦,哈哈哈哈哈,加油......