构建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

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

AI一键生成 PPT

AI一键生成 PPT 操作步骤 作为一名打工人,是不是经常需要制作各种PPT来分享我的生活和想法。但是,你们知道,有时候灵感来了,时间却不够用了!😩直到我发现了Kimi AI——一个能够自动生成PPT的神奇助手!🌟 什么是Kimi? 一款月之暗面科技有限公司开发的AI办公工具,帮助用户快速生成高质量的演示文稿。 无论你是职场人士、学生还是教师,Kimi都能够为你的办公文

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi