解锁大模型高效推理:将 LlamaIndex 与抽象链集成

在语言理解领域,对忠实推理的追求促使研究人员探索各种途径。

大型语言模型(LLMs)在解释和执行指令方面取得了显著进展,但在准确回忆和组合现实世界知识方面仍然面临挑战。

为了解决这个问题,将外部工具集成到LLMs的推理过程中已经成为一种有前途的方法。

虽然工具可以通过提供对外部知识源的访问来促进这一过程,但有效地将它们整合到多步推理任务中仍然是一个挑战。相互连接的工具调用需要对工具的有效使用进行整体规划,促使探索新的方法论来增强LLMs的推理能力。


节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。

针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。

总结链接如下:

重磅消息!《大模型面试宝典》(2024版) 正式发布!


技术交流&资料

技术要学会分享、交流,不建议闭门造车。一个人可以走的很快、一堆人可以走的更远。

成立了大模型面试和技术交流群,相关资料、技术交流&答疑,均可加我们的交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。

方式①、微信搜索公众号:机器学习社区,后台回复:加群
方式②、添加微信号:mlc2040,备注:来自CSDN + 技术交流

抽象链(CoA)

在这个背景下,我们介绍了抽象链(CoA)推理,这是一种旨在通过整合外部工具来增强LLMs多步推理的方法论。

CoA包括训练LLMs来解码带有抽象占位符的推理链,然后调用领域特定的工具来填充特定的知识,从而为最终答案生成提供基础。

LlamaIndex 是一个设计的综合知识索引系统,旨在为LLMs提供访问广泛的外部知识源的能力。它充当LLMs和现实世界知识之间的桥梁,使它们能够检索与推理任务相关的信息。通过利用LlamaIndex,LLMs可以访问领域特定的知识、事实数据和对准确和上下文相关推理所必需的上下文信息。

将LlamaIndex与抽象链集成的好处

  1. 泛化推理策略:通过解码带有抽象占位符的推理链,LLMs学习到更加泛化的推理策略,这些策略在不同领域中都具有稳健性,使它们能够轻松适应领域知识的变化。

  2. 高效的工具使用:CoA使LLMs能够并行进行解码和工具调用,消除了等待工具响应所带来的推理延迟。这导致工具的使用更加高效,推理速度更快,最终提升了LLMs的整体性能。

代码实现

CoA 的实现涉及两个关键阶段:

  1. 微调LLMs:LLMs被微调以生成带有抽象占位符的推理链,这些占位符不影响推理流程,但使得后续可以使用来自外部工具的具体知识进行填充。

  2. 推理链实例化:每个推理链都通过用来自外部工具检索到的领域特定知识替换抽象占位符来实例化。这种基于实际的方法确保了最终答案的准确性和上下文相关性。

第一步:安装库并初始化OpenAI

%pip install llama-index-core llama-index-llms-openai llama-index-embeddings-openai
%pip install llama-index-packs-agents-coa#初始化OpenAI
import osos.environ["OPENAI_API_KEY"] = "sk-..."import nest_asyncionest_asyncio.apply()

第二步:数据下载

!mkdir -p 'data/10k/'
!wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/10k/uber_2021.pdf' -O 'data/10k/uber_2021.pdf'
!wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/10k/lyft_2021.pdf' -O 'data/10k/lyft_2021.pdf'

第三步:导入库

from llama_index.core import Settings
from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.llms.openai import OpenAIfrom llama_index.core import StorageContext, load_index_from_storagefrom llama_parse import LlamaParse
from llama_index.core import SimpleDirectoryReader, VectorStoreIndexfrom llama_index.core.tools import QueryEngineToolSettings.embed_model = OpenAIEmbedding(model="text-embedding-3-small", embed_batch_size=256
)
Settings.llm = OpenAI(model="gpt-4-turbo", temperature=0.1)try:storage_context = StorageContext.from_defaults(persist_dir="./storage/lyft")lyft_index = load_index_from_storage(storage_context)storage_context = StorageContext.from_defaults(persist_dir="./storage/uber")uber_index = load_index_from_storage(storage_context)index_loaded = True
except:index_loaded = False# LlamaParse用于加载PDF文档
file_extractor = {".pdf": LlamaParse(result_type="markdown",api_key="llx-...",)
}if not index_loaded:# 加载数据lyft_docs = SimpleDirectoryReader(input_files=["./data/10k/lyft_2021.pdf"],file_extractor=file_extractor,).load_data()uber_docs = SimpleDirectoryReader(input_files=["./data/10k/uber_2021.pdf"],file_extractor=file_extractor,).load_data()# 构建索引lyft_index = VectorStoreIndex.from_documents(lyft_docs)uber_index = VectorStoreIndex.from_documents(uber_docs)# 持久化索引lyft_index.storage_context.persist(persist_dir="./storage/lyft")uber_index.storage_context.persist(persist_dir="./storage/uber")lyft_engine = lyft_index.as_query_engine(similarity_top_k=2)
uber_engine = uber_index.as_query_engine(similarity_top_k=2)query_engine_tools = [QueryEngineTool.from_defaults(query_engine=lyft_engine,name="lyft_10k",description=("提供2021年Lyft的财务信息。""请使用详细的纯文本问题作为工具的输入。"),),QueryEngineTool.from_defaults(query_engine=uber_engine,name="uber_10k",description=("提供2021年Uber的财务信息。""请使用详细的纯文本问题作为工具的输入。"),),
]

第四步:运行CoAAgentPack

# 导入CoAAgentPack类
from llama_index.packs.agents_coa import CoAAgentPack# 创建CoAAgentPack实例,传入查询引擎工具和LLM模型
pack = CoAAgentPack(tools=query_engine_tools, llm=Settings.llm)# 运行CoAAgentPack,输入问题
response = pack.run("2021年Uber的收入增长如何与Lyft相比?")# 来源# ==== 可用的解析函数 ====
def lyft_10k(input: string):"""提供2021年Lyft的财务信息。请使用详细的纯文本问题作为工具的输入。"""...def uber_10k(input: string):"""提供2021年Uber的财务信息。请使用详细的纯文本问题作为工具的输入。"""...# ==== 生成的抽象链 ====
# 要比较2021年Uber和Lyft的收入增长,我们需要获取这两家公司在该年的收入增长数据。# 1. 通过使用关于收入增长的具体问题查询Uber财务工具,获取2021年Uber的收入增长:
#    - [FUNC uber_10k("What was Uber's revenue growth in 2021?") = y1]# 2. 通过使用类似的关于收入增长的问题查询Lyft财务工具,获取2021年Lyft的收入增长:
#    - [FUNC lyft_10k("What was Lyft's revenue growth in 2021?") = y2]# 3. 比较获取的收入增长数据(y1和y2),以确定哪家公司在2021年的增长更高。这个比较将由读者在执行函数调用后进行。
# ==== 使用输入["What was Uber's revenue growth in 2021?"]执行 uber_10k ====
# ==== 使用输入["What was Lyft's revenue growth in 2021?"]执行 lyft_10k ====

结论

综上所述,将 LlamaIndex 与抽象链集成为增强LLMs的多步推理能力提供了有前途的途径。

通过系统和高效地利用外部工具,LLMs可以获得更准确和与上下文相关的响应,从而推动语言理解和推理技术的最新进展。

利用像 CoA 这样的创新方法,我们为释放 LLMs 的全部潜力铺平了道路,使它们能够轻松高效地处理复杂的推理任务。

通俗易懂讲解大模型系列

  • 重磅消息!《大模型面试宝典》(2024版) 正式发布!

  • 重磅消息!《大模型实战宝典》(2024版) 正式发布!

  • 做大模型也有1年多了,聊聊这段时间的感悟!

  • 用通俗易懂的方式讲解:大模型算法工程师最全面试题汇总

  • 用通俗易懂的方式讲解:不要再苦苦寻觅了!AI 大模型面试指南(含答案)的最全总结来了!

  • 用通俗易懂的方式讲解:我的大模型岗位面试总结:共24家,9个offer

  • 用通俗易懂的方式讲解:大模型 RAG 在 LangChain 中的应用实战

  • 用通俗易懂的方式讲解:ChatGPT 开放的多模态的DALL-E 3功能,好玩到停不下来!

  • 用通俗易懂的方式讲解:基于扩散模型(Diffusion),文生图 AnyText 的效果太棒了

  • 用通俗易懂的方式讲解:在 CPU 服务器上部署 ChatGLM3-6B 模型

  • 用通俗易懂的方式讲解:ChatGLM3-6B 部署指南

  • 用通俗易懂的方式讲解:使用 LangChain 封装自定义的 LLM,太棒了

  • 用通俗易懂的方式讲解:基于 Langchain 和 ChatChat 部署本地知识库问答系统

  • 用通俗易懂的方式讲解:Llama2 部署讲解及试用方式

  • 用通俗易懂的方式讲解:一份保姆级的 Stable Diffusion 部署教程,开启你的炼丹之路

  • 用通俗易懂的方式讲解:LlamaIndex 官方发布高清大图,纵览高级 RAG技术

  • 用通俗易懂的方式讲解:为什么大模型 Advanced RAG 方法对于AI的未来至关重要?

  • 用通俗易懂的方式讲解:基于 Langchain 框架,利用 MongoDB 矢量搜索实现大模型 RAG 高级检索方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/4421.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

北京摇号发展史!摇不到号是有原因的!

北京车牌摇号史可以追溯到较早的时期,但近年来随着城市发展和汽车保有量的增加,摇号政策经历了多次调整和完善。 在摇号政策实施初期,主要是为了解决城市交通拥堵和减少汽车尾气排放等问题。当时,申请车牌的人数相对较少&#xf…

龙腾启新·AI创未来—2024上海AIGC行业技术沙龙活动成功举办

随着人工智能技术的不断发展和创新,AIGC正逐渐成为科技领域的新热点。上海作为中国的经济中心和科技创新的重要城市,拥有众多优秀的科研机构、高校和企业,为AIGC领域的发展提供了丰富的人才和资源。 4月25日,上海市人工智能行业协…

第八周学习笔记DAY.4-实用类介绍

本课目标 能够定义并使用枚举类型 掌握包装类及装箱、拆箱概念 会使用Math类进行数学运算 枚举 枚举指由一组固定的常量组成的类型 Java API 常用Java API java.lang Enum、包装类、Math、String、StringBuffer、System… … java.util java.io java.sql … … 包装类…

大数据时代,保护个人隐私小Tips Get 起来!

随着大数据时代的到来,我们的隐私正处于越来越易被侵犯的风险中。在各种社交媒体和信息共享平台上,我们需要输入各种个人信息,而这些信息可能被不法分子盗取,甚至被用来进行欺诈行为。在如今的大数据时代,保护个人隐私…

进一步了解android studio 里 AGP,gradle等关系

目录 (1) gradle是什么 (2) 工程的jdk版本,及引用包的编译版本的关系 实践 问题与解决 编译成功与运行成功 编译成功 运行成功 (1) gradle是什么 Gradle是一个构建工具,它是…

(学习日记)2024.04.28:UCOSIII第五十二节:User文件夹函数概览(uC-LIB文件夹)第二部分

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…

【八大排序(一)】插入排序与希尔排序

❣博主主页: 33的博客❣ ▶️文章专栏分类:八大排序◀️ 🚚我的代码仓库: 33的代码仓库🚚 🫵🫵🫵关注我带你了解更多排序知识 目录 1.前言2.常见排序算法3.稳定性4.插入排序4.1概念4.2直接插入排序4.3希尔排序 5.总结 …

TechTool Pro for mac中文激活版:硬件监测和系统维护工具

TechTool Pro mac帮助用户实现系统硬件监测(CPU、内存、硬盘、网络、USB等)、内存测试、S.M.A.R.T检测、磁盘宗卷扫描、宗卷重建和优化、数据恢复和粉碎等等,定期使用,可以确保您的Mac保持优化和无故障。 TechTool Pro for mac v1…

机器学习笔记(二)回归

一、线性回归 线性回归是一种用于预测的统计方法,特别适用于连续值预测。📈线性回归通过最小化误差的平方和来寻找一个线性关系,用于预测一个变量(因变量)基于一个或多个其他变量(自变量)的值。…

[Kubernetes] 集群重新初始化

文章目录 1.master节点2.worker节点3.查看结果 1.master节点 kubeadm reset清理信息: cd ~ 进入根目录ll -a 查看是否存在.kube文件 rm -rf /root/.kubesystemctl restart docker ## 重启docker systemctl restart kubelet ## 重启kubeletrm -rf /etc/cni/net.d初始化主节点…

【Canvas与艺术】绘制朝鲜国旗

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>绘制朝鲜国旗</title><style type"text/css">…

windows环境下DVWA靶场搭建

目录 一&#xff0c;安装PHPstudy 二&#xff0c;DVWA靶场上传 一&#xff0c;安装PHPstudy 具体安装步骤&#xff0c;请看上篇文章https://blog.csdn.net/m0_72210904/article/details/138258609?spm1001.2014.3001.5501 二&#xff0c;DVWA靶场上传 压缩包&#xff1a;&…

【3GPP IAB】 3GPP支持IAB架构概述

1 概述 IAB用于回传链路的无线传输&#xff0c;对于NR高频尤其重要&#xff0c;3GPP协议讨论了IAB的可能架构和部署方式&#xff0c;一起来看看吧。 2 IAB 功能和接口 IAB尽量重用为接入定义的现有功能和接口。特别是&#xff0c;移动终端(MT)、gNB- DU、gNB- CU、UPF、AMF和S…

虚拟与现实的融合:线上盲盒小程序的创新探索

随着科技的飞速发展&#xff0c;虚拟世界与现实生活之间的界限日益模糊。线上盲盒小程序&#xff0c;作为这一融合趋势的生动体现&#xff0c;以其独特的创新探索&#xff0c;将虚拟的惊喜与现实的体验完美结合&#xff0c;为我们打开了一个全新的购物世界。 线上盲盒小程序的…

VulnHub靶机 DC-9 靶机 详细渗透过程

VulnHub靶机 DC-9 打靶实战 详细渗透过程 目录 VulnHub靶机 DC-9 打靶实战 详细渗透过程一、将靶机配置导入到虚拟机当中二、渗透测试主机发现端口扫描Web渗透SQL注入登入后台文件包含SSH爆破提权 一、将靶机配置导入到虚拟机当中 靶机地址&#xff1a; https://www.vulnhub.…

使用QTcpSocket

(1)客户端每隔10ms向服务器发送一次数字字符串&#xff0c;从0开始。 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QTcpSocket> #include <QLabel> #include <QTimer> namespace Ui { class MainWindow; }class Mai…

单模与多模光纤:深入解析与应用

在现代通信系统中&#xff0c;光纤技术是不可或缺的一部分&#xff0c;它以其高速度和大容量传输数据而闻名。光纤主要分为两种类型&#xff1a;单模光纤&#xff08;Single-Mode Fiber, SMF&#xff09;和多模光纤&#xff08;Multimode Fiber, MMF&#xff09;。这两种光纤在…

Matplotlib是什么?

一、Matplotlib是什么&#xff1f; Matplotlib是一个Python语言的2D绘图库&#xff0c;它非常广泛地用于数据的可视化。以下是一些主要特点&#xff1a; 多功能性&#xff1a;它允许用户创建各种静态、动态或交互式的图表&#xff0c;如线图、散点图、直方图等。跨平台性&…

计算机视觉——使用OpenCV GrabCut算法从图像中移除背景

GrabCut算法 GrabCut算法是一种用于图像前景提取的技术&#xff0c;由Carsten Rother、Vladimir Kolmogorov和Andrew Blake三位来自英国剑桥微软研究院的研究人员共同开发。该技术的核心目标是在用户进行最少交互操作的情况下&#xff0c;自动从图像中分割出前景对象。 在Gra…

机器学习/算法工程师面试题目与答案-数学基础部分

机器学习/算法工程师面试题目--数学基础部分 一、数学基础1、微积分SGD,Momentum,Adagard,Adam原理L1不可导的时候该怎么办sigmoid函数特性 2、统计学&#xff0c;概率论求 Max(a, b) 期望拿更长的玫瑰花的最好策略最大化工作天数的员工数切比雪夫不等式随机截成三段组成三角形…