这篇博文是与来自 Deepset 的 Tuana Çelik 共同撰写的。
企业搜索是通过文档数字化和知识管理提高组织效率的关键组成部分。 企业搜索包括存储文档(例如数字文件)、对文档进行索引以供搜索以及根据用户查询提供相关结果。 随着大型语言模型 (LLM) 的出现,我们可以在向用户提供结果时实现对话体验。 然而,我们需要确保法学硕士限制对公司数据的响应,从而减轻模型幻觉。
在这篇文章中,我们展示了如何使用 Haystack 管道和 Falcon-40b-instruct 模型,通过检索增强生成 (RAG) 构建用于企业搜索的端到端生成式 AI 应用程序 亚马逊SageMaker JumpStart 和 亚马逊开放搜索服务。 本文中展示的示例的源代码可在 GitHub存储库
解决方案概述
为了限制生成式人工智能应用程序仅响应公司数据,我们需要使用一种称为检索增强生成(RAG)的技术。 使用 RAG 方法的应用程序从企业知识库或内容中检索与用户请求最相关的信息,将其作为上下文与用户请求作为提示捆绑在一起,然后将其发送到 LLM 以获得响应。 法学硕士对输入提示的最大字数有限制,因此在企业中数千或数百万文档中选择正确的段落对法学硕士的准确性有直接影响。
RAG 技术在企业搜索中变得越来越重要。 在这篇文章中,我们展示了一个工作流程,该工作流程利用 SageMaker JumpStart 部署 Falcon-40b-instruct 模型,并使用 Haystack 设计和运行检索增强问答管道。 最终的检索增强工作流程涵盖以下高级步骤:
- 用户查询用于检索器组件,该组件进行矢量搜索,以从我们的数据库中检索最相关的上下文。
- 此上下文嵌入到提示中,旨在指示法学硕士仅根据提供的上下文生成答案。
- LLM 仅通过考虑嵌入到其收到的提示中的上下文来生成对原始查询的响应。
SageMaker 快速启动
SageMaker JumpStart 充当模型中心,封装了用于文本、视觉、音频和嵌入用例的各种深度学习模型。 其模型中心拥有 500 多个模型,其中包括来自 AI21、Stability AI、Cohere 和 LightOn 等 AWS 合作伙伴的公共模型和专有模型。 它还托管由亚马逊单独开发的基础模型,例如 AlexaTM。 有些模型提供了使用您自己的数据对其进行微调的功能。 SageMaker JumpStart 还提供了为常见用例设置基础设施的解决方案模板,以及用于 SageMaker 机器学习 (ML) 的可执行示例笔记本。
草垛
草垛 是 Deepset 的开源框架,允许开发人员编排由不同组件(如模型、矢量数据库、文件转换器和无数其他模块)组成的 LLM 应用程序。 Haystack 提供 管道 和 中介代理,两个强大的结构,用于为各种用例设计法学硕士应用程序,包括搜索、问答和对话式人工智能。 它重点关注最先进的检索方法和可靠的评估指标,为您提供交付可靠、值得信赖的应用程序所需的一切。 您可以将管道序列化为 YAML 文件,通过a暴露它们 REST API,并根据您的工作负载灵活扩展它们,从而轻松地将应用程序从原型阶段转移到生产阶段。
亚马逊开放搜索
OpenSearch Service 是一项完全托管的服务,可让您在 AWS 云中轻松部署、扩展和操作 OpenSearch。 OpenSearch 是一个可扩展、灵活且可扩展的开源软件套件,用于搜索、分析、安全监控和可观察性应用程序,并根据 Apache 2.0 许可证获得许可。
近年来,机器学习技术在增强搜索方面变得越来越流行。 其中包括使用 嵌入模型,一种可以将大量数据编码到 n 维空间中的模型,其中每个实体都被编码成 向量,该空间中的一个数据点,并进行组织以使相似的实体更靠近。 向量数据库通过提供 k-NN 索引等专门索引来提供高效的向量相似性搜索。
借助 OpenSearch Service 的矢量数据库功能,您可以实现语义搜索、带有 LLM 的 RAG、推荐引擎和搜索富媒体。 在这篇文章中,我们使用 RAG 使我们能够通过外部知识库来补充生成式法学硕士,该知识库通常是使用与矢量编码知识文章水合的矢量数据库构建的。
应用概述
下图描述了最终应用程序的结构。
在此应用程序中,我们使用 Haystack 索引管道来管理上传的文档和索引文档,并使用 Haystack 查询管道从索引文档中执行知识检索。
Haystack 索引管道包括以下高级步骤:
- 上传文件。
- 初始化
DocumentStore
和索引文件。
我们使用 OpenSearch 作为我们的 文档库 和一个干草堆 索引管道 预处理我们的文件并将其索引到 OpenSearch。 草垛 文件转换器 和 预处理器 允许您清理和准备原始文件,使其成为您的自然语言处理 (NLP) 管道和所选语言模型可以处理的形状和格式。 我们在这里使用的索引管道也使用 sentence-transformers/all-MiniLM-L12-v2
为每个文档创建嵌入,我们用它来进行高效检索。
Haystack 查询管道包括以下高级步骤:
- 我们向 RAG 管道发送查询。
- An 嵌入检索器 组件充当过滤器,检索最相关的
top_k
来自 OpenSearch 中索引文档的文档。 我们使用我们选择的嵌入模型来嵌入查询和文档(在索引时)来实现这一点。 - 检索到的文档嵌入到我们对 Falcon-40b-instruct 模型的提示中。
- LLM 返回基于检索到的文档的响应。
对于模型部署,我们使用 SageMaker JumpStart,只需按一下按钮即可简化模型部署。 尽管我们在此示例中使用并测试了 Falcon-40b-instruct,但您可以使用 SageMaker 上提供的任何 Hugging Face 模型。
最终解决方案可在 haystack-sagemaker 存储库并使用 OpenSearch 网站和文档(针对 OpenSearch 2.7)作为我们的示例数据来执行检索增强问答。
先决条件
在使用任何 AWS 服务之前要做的第一件事是确保我们已经注册并创建了一个 AWS 账户。 然后您应该创建一个管理用户和组。 有关这两个步骤的说明,请参阅 设置 Amazon SageMaker 先决条件.
为了能够使用 Haystack,您必须安装 farm-haystack
包含所需依赖项的包。 要实现此目的,请使用 requirements.txt
文件中 GitHub存储库 通过运行 pip install requirements.txt
.
将文档索引到 OpenSearch
Haystack 提供了许多数据库连接器,称为 DocumentStores
。 对于此 RAG 工作流程,我们使用 OpenSearchDocumentStore
. 这个例子 知识库 包括索引管道和 AWS CloudFormation 模板 建立一个 OpenSearchDocumentStore
包含从 OpenSearch 网站和文档页面抓取的文档。
通常,为了让 NLP 应用程序适用于生产用例,我们最终不得不考虑数据准备和清理。 这覆盖了 Haystack 索引管道,它允许您设计自己的数据准备步骤,最终将文档写入您选择的数据库。
索引管道还可能包括为文档创建嵌入的步骤。 这对于检索步骤非常重要。 在我们的示例中,我们使用 句子变压器/全MiniLM-L12-v2 作为我们的嵌入模型。 该模型用于为所有索引文档以及用户在查询时的查询创建嵌入。
将文档索引到 OpenSearchDocumentStore
,我们提供了两个选项,并在 读我 示例存储库的。 在这里,我们将逐步介绍对部署在 AWS 上的 OpenSearch 服务建立索引的步骤。
启动 OpenSearch 服务
使用提供的 CloudFormation模板 在 AWS 上设置 OpenSearch 服务。 通过运行以下命令,您将拥有一个空的 OpenSearch 服务。 然后,您可以选择对我们提供的示例数据建立索引,也可以使用您自己的数据,您可以使用以下方法清理和预处理这些数据: Haystack 索引管道。 请注意,这将创建一个向 Internet 开放的实例,不建议将其用于生产用途。
堆栈启动需要大约 30 分钟才能完成。 您可以通过导航到 AWS CloudFormation 控制台来检查其进度 堆栈 页并查找名为的堆栈 HaystackOpensearch
.
将文档索引到 OpenSearch
现在我们已经有了正在运行的 OpenSearch 服务,我们可以使用 OpenSearchDocumentStore 类连接到它并向其中写入文档。
要获取 OpenSearch 的主机名,请运行以下命令:
首先,导出以下内容:
然后,您可以使用 opensearch_indexing_pipeline.py
用于预处理和索引所提供的演示数据的脚本。
如果您想使用自己的数据,请修改索引管道 opensearch_indexing_pipeline.py
包括 文件转换器 和 预处理器 您需要的设置步骤。
实施检索增强问答管道
现在我们已经在 OpenSearch 中索引了数据,我们可以对这些文档进行问答。 对于此 RAG 管道,我们使用在 SageMaker JumpStart 上部署的 Falcon-40b-instruct 模型。
您还可以选择从 Jupyter 笔记本以编程方式部署模型。 有关说明,请参阅 GitHub回购.
- 在 SageMaker JumpStart 上搜索 Falcon-40b-instruct 模型。
- 在 SageMaker JumpStart 上部署您的模型,并记下端点名称。
- 导出以下值:
- 运行
python rag_pipeline.py
.
这将启动一个等待用户提问的命令行实用程序。 例如,我们问“如何安装 OpenSearch cli?”
之所以能达到这个结果是因为我们在 Haystack 提示模板 如下:
进一步定制
您可以对解决方案中的不同元素进行其他自定义,如下所示:
- 数据 – 我们提供了 OpenSearch 文件 和 官网 数据作为示例数据。 记得修改一下
opensearch_indexing_pipeline.py
如果您选择使用自己的数据,请编写适合您需求的脚本。 - 该模型 – 在此示例中,我们使用了 Falcon-40b-instruct 模型。 您可以在 SageMaker 上自由部署和使用任何其他 Hugging Face 模型。 请注意,更改模型可能意味着您应该根据其设计要处理的内容调整提示。
- 提示 – 对于这篇文章,我们创建了自己的
PromptTemplate
指示模型根据提供的上下文回答问题,如果上下文不包含相关信息,则回答“我不知道”。 您可以更改此提示以使用 Falcon-40b-instruct 尝试不同的提示。 您还可以简单地从以下位置获取我们的一些提示: 提示中心. - 嵌入模型 – 对于检索步骤,我们使用轻量级嵌入模型: 句子变压器/全MiniLM-L12-v2。 但是,您也可以根据需要更改此设置。 请记住修改您的预期嵌入尺寸
DocumentStore
因此。 - 检索到的文档数量 – 您还可以选择调整您询问的文件数量
EmbeddingRetriever
检索每个查询。 在我们的设置中,这被设置为 顶部_k=5。 您可以尝试更改此数字,看看提供更多上下文是否可以提高结果的准确性。
生产准备情况
本文中提出的解决方案可以加快项目开发过程的价值实现时间。 您可以构建一个易于通过 AWS 云上的安全和隐私环境进行扩展的项目。
为了安全和隐私,OpenSearch 服务提供数据保护 身份和访问管理 和 跨服务混淆代理预防。 您可以采用细粒度的用户访问控制,以便用户只能访问他们有权访问的数据。 此外,SageMaker 还提供可配置的安全设置 访问控制, 数据保护及 记录和监控。 您可以通过以下方式保护静态和传输中的数据 AWS密钥管理服务 (AWS KMS) 密钥。 您还可以使用以下命令跟踪 SageMaker 模型部署或端点访问的日志 亚马逊CloudWatch. 有关更多信息,请参阅 使用Amazon CloudWatch监控Amazon SageMaker.
为了OpenSearch服务的高可扩展性,您可以通过以下方式进行调整: 调整 OpenSearch 服务域的大小 和雇用 运营最佳实践。 您还可以利用自动缩放 SageMaker 端点 - 您可以 自动缩放 SageMaker 模型 当流量增加或资源未被使用时调整端点。
清理
为了节省成本,请删除您在本文中部署的所有资源。 如果您启动了 CloudFormation 堆栈,则可以通过 AWS CloudFormation 控制台将其删除。 同样,您可以删除通过 SageMaker 控制台创建的任何 SageMaker 终端节点。
结论
在这篇文章中,我们展示了如何使用 Haystack 管道以及来自 SageMaker JumpStart 和 OpenSearch Service 的 Falcon-40b-instruct 模型,通过 RAG 构建用于企业搜索的端到端生成式 AI 应用程序。 RAG 方法在企业搜索中至关重要,因为它确保生成的响应在域内,从而减轻幻觉。 通过使用 Haystack 管道,我们能够编排由模型和矢量数据库等不同组件组成的 LLM 应用程序。 SageMaker JumpStart 为我们提供了部署 LLM 的一键式解决方案,我们使用 OpenSearch 服务作为索引数据的矢量数据库。 您可以使用本文中概述的步骤以及 中提供的源代码开始为您的企业生成式 AI 应用程序试验和构建 RAG 概念证明。 GitHub存储库.
作者简介
图阿纳·塞利克 是 Deepset 的首席开发倡导者,她专注于 Haystack 的开源社区。 她领导开发者关系职能部门,定期在有关 NLP 的活动中发表演讲,并为社区创建学习材料。
罗伊·阿莱拉 是位于德国慕尼黑的 AWS 的高级 AI/ML 专家解决方案架构师。 Roy 帮助 AWS 客户(从小型初创公司到大型企业)在 AWS 上高效地训练和部署大型语言模型。 Roy 热衷于计算优化问题和提高人工智能工作负载的性能。
张米娅 是 Amazon Web Services 的 ML 专家解决方案架构师。 她与欧洲、中东和非洲地区的客户合作,并分享了利用她在应用数学、计算机科学和 AI/ML 方面的背景在云上运行 AI/ML 工作负载的最佳实践。 她专注于 NLP 特定的工作负载,并分享了她作为会议发言人和书籍作者的经验。 在空闲时间,她喜欢徒步旅行、棋盘游戏和冲泡咖啡。
伊南·赛义德 是 AWS 的初创解决方案架构师,主要致力于协助 B2B 和 SaaS 初创公司扩展规模并实现增长。 他对无服务器架构和 AI/ML 充满热情。 在闲暇时间,伊纳姆与家人一起享受美好时光,并沉浸在对自行车和羽毛球的热爱中。
大卫·蒂皮特 是 AWS 从事开源 OpenSearch 工作的高级开发倡导者。 他的工作涉及 OpenSearch 的所有领域,从搜索和相关性到可观察性和安全分析。
- SEO 支持的内容和 PR 分发。 今天得到放大。
- PlatoData.Network 垂直生成人工智能。 赋予自己力量。 访问这里。
- 柏拉图爱流。 Web3 智能。 知识放大。 访问这里。
- 柏拉图ESG。 汽车/电动汽车, 碳, 清洁科技, 能源, 环境, 太阳能, 废物管理。 访问这里。
- 柏拉图健康。 生物技术和临床试验情报。 访问这里。
- 图表Prime。 使用 ChartPrime 提升您的交易游戏。 访问这里。
- 块偏移量。 现代化环境抵消所有权。 访问这里。
- Sumber: https://aws.amazon.com/blogs/machine-learning/build-production-ready-generative-ai-applications-for-enterprise-search-using-haystack-pipelines-and-amazon-sagemaker-jumpstart-with-llms/
- :具有
- :是
- :不是
- :在哪里
- $UP
- 100
- 12
- 13
- 30
- 500
- 7
- 8
- a
- Able
- 关于
- 加快
- ACCESS
- 完成
- 因此
- 账号管理
- 实现
- 实现
- 行为
- 适应
- 额外
- 另外
- 行政
- 优点
- 来临
- 主张
- AI
- AI / ML
- 所有类型
- 让
- 允许
- 沿
- 还
- 尽管
- Amazon
- 亚马逊SageMaker
- 亚马逊SageMaker JumpStart
- 亚马逊网络服务
- 其中
- an
- 分析
- 和
- 回答
- 任何
- 阿帕奇
- 应用领域
- 应用领域
- 应用的
- 的途径
- 约
- 保健
- 地区
- 围绕
- 排列
- 艺术
- 刊文
- AS
- 协助
- At
- 音频
- 增强
- 作者
- 授权
- 汽车
- 可使用
- AWS
- AWS CloudFormation
- B2B模式
- 背景
- 基地
- 基于
- BE
- 因为
- 成为
- before
- 作为
- 如下。
- 最佳
- 最佳实践
- 大
- 博客
- 板
- 棋盘游戏
- 身体
- 书
- 都
- 广阔
- 建立
- 建筑物
- 建
- 捆绑
- 但是
- 按键
- by
- 被称为
- CAN
- 能力
- 例
- 更改
- 改变
- 查
- 选择
- 选择
- 选择
- 程
- 清洁
- 接近
- 云端技术
- 码
- 咖啡
- 相当常见
- 社体的一部分
- 公司
- 补充
- 完成
- 元件
- 组件
- 包含
- 一台
- 计算机科学
- 概念
- 研讨会 首页
- 困惑
- 分享链接
- 考虑
- 安慰
- 包含
- 内容
- 上下文
- 控制
- 听起来像对话
- 会话AI
- 成本
- 覆盖
- 盖
- 创建信息图
- 创建
- 创建
- 危急
- 合作伙伴
- data
- 资料准备
- 数据保护
- 数据库
- 数据库
- DBS
- 处理
- 深
- 深入学习
- 定义
- 演示
- 依赖
- 部署
- 部署
- 部署
- 部署
- 设计
- 设计
- 设计
- 详细
- 发达
- 开发商
- 开发
- 研发支持
- 不同
- 数字
- 数字化
- 尺寸
- 直接
- do
- 文件
- 文件
- 文件
- 不
- 不会
- 不
- 别
- 每
- 易
- 效率
- 高效
- 有效
- 或
- 分子
- 嵌
- 嵌入式
- 嵌入
- 欧洲与中东地区
- enable
- 结束
- 端至端
- 端点
- 引擎
- 提高
- 确保
- 确保
- 企业
- 实体
- 实体
- 环境
- 评估
- 事件
- 一切
- 例子
- 预期
- 体验
- 体验
- 实验
- 出口
- 外部
- 面部彩妆
- 家庭
- 数字
- 文件
- 档
- 过滤
- 最后
- (名字)
- 适合
- 柔软
- 灵活地
- 专注焦点
- 重点
- 以下
- 针对
- 格式
- 基金会
- 骨架
- 自由的
- 止
- 充分
- 功能
- Games
- 生成
- 产生
- 产生
- 代
- 生成的
- 生成式人工智能
- 德国
- 得到
- 特定
- 团队
- 事业发展
- 处理
- 有
- 有
- he
- 帮助
- 这里
- 相关信息
- 高
- 高水平
- 高度
- 他的
- 为了
- 创新中心
- How To
- 但是
- HTML
- HTTP
- HTTPS
- 中心
- i
- 身分
- if
- 影响力故事
- 实施
- 重要
- 改善
- in
- 包括
- 包括
- 包含
- 增加
- 日益
- 指数
- 索引
- 指标
- 信息
- 基础设施
- 输入
- 安装
- 例
- 说明
- 网络
- 成
- IT
- 它的
- JPG
- 键
- 键
- 知道
- 知识
- 知识管理
- 语言
- 大
- 发射
- 推出
- 铅
- 信息
- 学习
- 执照
- 行货
- 轻巧
- 喜欢
- 容易
- 极限
- 限制
- Line
- LLM
- 日志
- 记录
- 寻找
- 爱
- 机
- 机器学习
- 制成
- 使
- 制作
- 制作
- 管理
- 管理
- 颠覆性技术
- 物料
- 数学
- 最多
- 可能..
- 意味着
- 媒体
- 方法
- 指标
- 百万
- 分钟
- 缓解
- ML
- 模型
- 模型
- 修改
- 模块
- 美好瞬间
- 监控
- 更多
- 最先进的
- 移动
- 姓名
- 命名
- 自然
- 自然语言处理
- 导航
- 需求
- 需要
- NLP
- 笔记本
- 数
- of
- 提供
- 优惠精选
- on
- 仅由
- 打开
- 开放源码
- 开源软件
- 操作
- 优化
- 附加选项
- 附加选项
- or
- 组织
- 举办
- 原版的
- 其他名称
- 我们的
- 概述
- 超过
- 己
- 包
- 页
- 网页
- 部分
- 伙伴
- 情
- 多情
- 演出
- 性能
- 管道
- 柏拉图
- 柏拉图数据智能
- 柏拉图数据
- 播放
- 请
- 点
- 热门
- 帖子
- 强大
- 做法
- 准备
- Prepare
- 隐私
- 问题
- 过程
- 处理
- 生产
- 进展
- 项目
- 样张
- 建议
- 所有权
- 保护
- 保护
- 原型
- 提供
- 提供
- 提供
- 优
- 代理
- 国家
- 推
- 质量
- 查询
- 题
- 有疑问吗?
- 原
- 收到
- 最近
- 推荐
- 建议
- 经常
- 关系
- 相关性
- 相应
- 可靠
- 纪念
- 知识库
- 请求
- 要求
- 必须
- 岗位要求
- 资源
- 响应
- 回复
- REST的
- 限制
- 导致
- 成果
- 回报
- 丰富
- 右
- 罗伊
- 运行
- 运行
- SaaS的
- sagemaker
- 保存
- 对工资盗窃
- 可扩展性
- 可扩展性
- 鳞片
- 缩放
- 科学
- 搜索
- 保安
- 看到
- 提交
- 发送
- 前辈
- 无服务器
- 服务
- 服务
- 特色服务
- 集
- 设置
- 格局
- 形状
- 分享
- 她
- 船
- 应该
- 显示
- 展示
- 展出
- 签
- 类似
- 同样
- 简易
- 只是
- 小
- So
- 软件
- 独自
- 固体
- 方案,
- 解决方案
- 一些
- 东西
- 来源
- 源代码
- 太空
- 喇叭
- 说
- 专家
- 专门
- 稳定性
- 堆
- 阶段
- 开始
- 启动
- 初创企业
- 步
- 步骤
- 存储
- 强烈
- 结构体
- 这样
- 套房
- 肯定
- 采取
- 需要
- 技术
- 模板
- 测试
- 这
- 他们
- 然后
- 从而
- 因此
- 博曼
- 他们
- 事
- 认为
- Free Introduction
- 数千
- 通过
- 次
- 至
- 一起
- 跟踪时
- 交通
- 过境
- 可靠
- 二
- 类型
- 一般
- 最终
- 下
- 上传
- us
- 使用
- 用过的
- 用户
- 用户
- 使用
- 运用
- 效用
- 折扣值
- 价值观
- 各个
- 通过
- 愿景
- 等待
- we
- 卷筒纸
- Web服务
- 您的网站
- ,尤其是
- 这
- 将
- 中
- Word
- 工作
- 工作流程
- 加工
- 合作
- 将
- 写
- 雅姆
- 年
- 完全
- 您一站式解决方案
- 和风网