Haystack

在这里插入图片描述

文章目录

    • 关于 Haystack
      • 提供 NLP项目所有阶段的功能
    • Building blocks
      • 组件 Components
      • 管道 Pipelines
      • 代理 Agents
    • 基本使用 - RAG


关于 Haystack

  • 官网:https://haystack.deepset.ai
  • 官方文档:https://docs.haystack.deepset.ai/docs/intro
  • 教程:https://haystack.deepset.ai/tutorials
  • blog : https://haystack.deepset.ai/blog
  • Discord : https://discord.com/invite/VBpFzsgRVF
  • deepset : https://www.deepset.ai/

其他文章/教程等:

  • Haystack 2.0:可组合的开源LLM框架
    https://mp.weixin.qq.com/s/7gH4Saj8UlA1x4-I68XF9A

Haystack是 deepset 的开源Python框架,用于构建具有大型语言模型(LLM)的自定义应用程序。
它可以让您快速试用自然语言处理(NLP)中的最新模型,同时具有灵活性和易用性。

Haystack为开发 使用LLM(如GPT-4、Falcon等)和Transformer模型的最先进的NLP系统提供了全面的工具。
使用Haystack,您可以毫不费力地尝试托管在 Hugging Face、OpenAI、Cohere等平台上的各种模型,甚至部署在SageMaker 和本地模型上的模型,以找到最适合您用例的模型。

在这里插入图片描述


您可以构建的一些示例包括:

  • 对任何语言的大量文档进行语义搜索
  • 在包含混合类型信息(图像、文本和表格)的知识库上进行生成式问答
  • 自然语言聊天机器人由GPT-4等尖端生成模型提供支持
  • 一个基于LLM的Haystack 代理 ,能够解决复杂的查询
  • 从文档中提取信息 以填充数据库或构建知识图

这只是Haystack中可以创建的系统的一小部分。


提供 NLP项目所有阶段的功能

一个成功的NLP项目需要的不仅仅是语言模型。
作为一个端到端的框架,Haystack帮助您构建系统的每一步,为NLP项目生命周期的每个阶段提供工具:

  • 将Hugging Face或其他提供商的模型轻松部署到您的NLP管道中
  • 创建LLM提示的动态模板
  • 清洗和预处理功能用于各种格式和来源
  • 与document store 无缝集成(包括许多流行的矢量数据库,如Faiss、Pinecone、Qdrant或Weaviate):让您的NLP驱动的应用程序与Haystack的索引管道保持最新,帮助您准备和维护数据
  • 免费注释工具 以实现更快、更结构化的注释过程
  • 用于 微调预先训练的语言模型 的工具
  • 专业评估pipelines 使用不同的度量来评估整个系统或其单个组件
  • Haystack的REST API 部署最终的系统,以便使用面向用户的界面进行查询

但这还不是全部:元数据过滤,模型蒸馏,或者提示中枢,无论你的NLP内心渴望什么,你都可能在Haystack中找到它。如果没有呢?我们会一起建造它。

在这里插入图片描述


Building blocks

Haystack使用一些简单但有效的概念来帮助您构建功能齐全、可定制的端到端NLP系统。


组件 Components

Haystack的核心是其组件——可以执行文档检索、文本生成或摘要等任务的基本构建块。单个组件已经相当强大了。它可以管理本地语言模型或通过API与宿主模型通信。

虽然Haystack提供了一系列可以开箱即用的组件,但它也允许您创建自己的自定义组件。探索包含我们社区开发的自定义组件的 集成集合,您可以自由使用这些组件。

您可以将组件链接在一起以构建管道,这是Haystack中NLP应用程序架构的基础。


管道 Pipelines

管道是由组件组成的强大结构,如Retriever和Reader,连接到基础设施构建块,如DocumentStore(例如Elasticsearch或Weaviate),以形成复杂的系统。

Haystack为大多数常见任务提供了现成的管道,如问答、文档检索或摘要。但是,为比问答更复杂的NLP场景设计和创建自定义管道同样容易。


代理 Agents

Haystack Agent使用大型语言模型来解决复杂的任务。
初始化Agent时,您会为其提供一组工具,这些工具可以是管道组件,也可以是整个管道。
Agent可以反复使用这些工具来得出答案。当给定查询时,Agent会确定哪些工具对回答此查询有用,并循环调用它们,直到得到答案。通过这种方式,它可以实现比提取式或生成式问答管道多得多的功能。

在这里插入图片描述


基本使用 - RAG

安装

pip install haystack-ai

以下代码将把您的数据加载到文档存储,构建RAG管道,并根据数据提出问题。
您只需要一个OpenAI键作为环境变量OpenAI_API_key,就可以让这个代码片段工作。

import os
from haystack import Pipeline, Document
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.components.retrievers.in_memory import InMemoryBM25Retriever
from haystack.components.generators import OpenAIGenerator
from haystack.components.builders.answer_builder import AnswerBuilder
from haystack.components.builders.prompt_builder import PromptBuilder

# Set the environment variable OPENAI_API_KEY
os.environ['OPENAI_API_KEY'] = "Your OpenAI API Key"

# Write documents to InMemoryDocumentStore
document_store = InMemoryDocumentStore()
document_store.write_documents([
    Document(content="My name is Jean and I live in Paris."), 
    Document(content="My name is Mark and I live in Berlin."), 
    Document(content="My name is Giorgio and I live in Rome.")
])

# Build a RAG pipeline
prompt_template = """
Given these documents, answer the question.
Documents:
{% for doc in documents %}
    {{ doc.content }}
{% endfor %}
Question: {{question}}
Answer:
"""

retriever = InMemoryBM25Retriever(document_store=document_store)
prompt_builder = PromptBuilder(template=prompt_template)
llm = OpenAIGenerator()

rag_pipeline = Pipeline()
rag_pipeline.add_component("retriever", retriever)
rag_pipeline.add_component("prompt_builder", prompt_builder)
rag_pipeline.add_component("llm", llm)
rag_pipeline.connect("retriever", "prompt_builder.documents")
rag_pipeline.connect("prompt_builder", "llm")

# Ask a question
question = "Who lives in Paris?"
results = rag_pipeline.run(
    {
        "retriever": {"query": question},
        "prompt_builder": {"question": question},
    }
)

print(results["llm"]["replies"])

2024-04-22(一)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IP地址定位是怎么实现的?

IP地址定位技术的实现是一个涉及多方面技术和方法的复杂过程。IP地址作为互联网通信中的关键元素,每个设备在网络中都被分配一个唯一的IP地址,用于标识和定位网络上的设备。通过一系列技术手段,我们可以对这些IP地址进行分析,进而…

MATLAB 向量

MATLAB 向量 向量是一维数字数组。MATLAB允许创建两种类型的向量 行向量 列向量 行向量 行向量通过将元素集括在方括号中并使用空格或逗号定界元素来创建。 示例 r [7 8 9 10 11] MATLAB将执行上述语句并返回以下结果- r 7 8 9 10 11 列向量 列向量 通过将元素集括在方…

大型网站系统架构演化实例_6.使用分布式文件系统和分布式数据库系统

1.使用分布式文件系统和分布式数据库系统 任何强大的单一服务器都满足不了大型网站持续增长的业务需求。数据库经过读写分离后,从一台服务器拆分成两台服务器,但是随着网站业务的发展依然不能满足需求,这时需要使用分布式数据库。文件系统也一…

【高校科研前沿】东北地理所在遥感领域顶刊RSE发布中国主要红树植物群落遥感分类成果

目录 01 文章简介 02 研究内容 03 文章引用 01 文章简介 论文名称:Mangrove species mapping in coastal China using synthesized Sentinel-2 high-separability images(基于Sentinel-2高分离度图像的中国沿海红树群落制图) 第一作者及…

python爬虫学习------scrapy第二部分(第三十天)

🎈🎈作者主页: 喔的嘛呀🎈🎈 🎈🎈所属专栏:python爬虫学习🎈🎈 ✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天…

(51单片机)第十三章-STC系列51单片机功能介绍

13.1 单片机空闲与掉电模式的应用 1. 空闲模式 当单片机进入空闲模式时,除CPU处于休眠状态外,其余硬件全部处于活动状态,芯片中程序未涉及的数据存储器和特殊功能寄存器中的数据在空闲模式期间都将保持原值。假若定时器正在运行,…

第一篇:Python简介:开启你的编程之旅

Python简介:开启你的编程之旅 在这个系列文章中,我将带领大家深入了解Python——一个极具魅力的编程语言。如果你对编程感兴趣,想要掌握一门既实用又强大的语言,那么Python无疑是一个绝佳的选择。本篇文章是这个系列的序章&#…

大数据基础

基本简介 大数据特点 数据量大 种类多样 结构化:多指关系型数据库中,信用卡号码、日期、财务金额、电话号码、地址 半结构化:xml/json 非结构化:全文文本、图象、声音、影视、超媒体等信息。 应用价值高 大数据的作用 追溯…

protobuf协议逆向解析

protobuf协议逆向解析 地址: aHR0cHM6Ly93d3cudGlrdG9rLmNvbS9tZXNzYWdlcz9sYW5nPWVu找到接口/v2/message/get_by_user_init 如图所示, 参数和响应并不是可直接使用的, 虽然部分内容可读。 跟栈到这里, 找到封包前的数据 打上断点, 查看变量t就是请…

数字安全实操AG网址漏洞扫描原理与技术手段分析

在数字化世界的大舞台上,网络安全如同守护者一般,默默保卫着我们的虚拟疆界。当我们在享受互联网带来的便利时,一场无形的战争正在上演。黑客们利用各种手段试图攻破网站的安全防线,而防守方则依靠先进的技术和策略来抵御入侵。其…

武汉星起航:创新孵化模式,一站式服务助力卖家全球化拓展

在全球化浪潮席卷而来的今天,跨境电商行业已成为推动国际贸易的重要力量。武汉星起航电子商务有限公司,作为这一领域的佼佼者,以其前瞻性的战略眼光和创新的经营模式,积极践行“走出去”战略,凭借自营店铺运营经验和跨…

Golang | Leetcode Golang题解之第50题Pow(x,n)

题目: 题解: func myPow(x float64, n int) float64 {if n > 0 {return quickMul(x, n)}return 1.0 / quickMul(x, -n) }func quickMul(x float64, n int) float64 {if n 0 {return 1}y : quickMul(x, n/2)if n%2 0 {return y * y}return y * y * …

云赛道---深度学习

• 分析问题定位任务:首先定位问题,将实际问题转化为机器学习问题,需要什么样的 数据,然后进行数据的采集。包含数据探查、场景抽象、算法选择。比如逻辑回归可 以决定我们是不是能喝咖啡;那另外朴素贝叶斯算法可以用来区分垃圾…

Linux|Awk 变量、数字表达式和赋值运算符

引言 本部分[1]将深入学习 Awk 的高级应用,以应对更为复杂的文本或字符串过滤任务。将介绍包括变量、数值表达式和赋值运算符在内的 Awk 功能。 这些概念与你之前可能在诸如shell、C、Python等许多编程语言中接触过的概念并没有本质上的不同,所以你不必过…

SaaS云HIS平台源码 采用云部署模式,部署一套可支持多家医院共同使用

目录 云HIS门诊业务使用流程 云HIS住院业务使用流程 云HIS系统使用流程 云HIS优势 云HIS系统功能模块 医疗业务: 电子病历: 经济管理: 药物管理: 统计报表: 系统管理: 运营运维: 通…

NLP step by step -- 了解Transformer

Transformer模型 Transformer相关历史 首先我们先看一下有关Transformer模型的发展历史,下面的图是基于Transformer架构的一些关键模型节点: 图片来源于Hugging Face 图片来源于Hugging Face Transformer 架构 于 2017 年 6 月推出。原本研究的重点是…

deepin 亮相 Intel 合作伙伴交流会,展示AI大模型应用最新成果

内容来源:deepin 社区 2024 年 4 月 18 日,备受业界瞩目的 Intel Channel Partner Networking Fair 在香港天际万豪酒店隆重举办。 在这场行业盛会上,deepin(深度)受邀参与了 Intel Demo Showcase 环节,向…

JDBC查询大数据时怎么防止内存溢出-流式查询

文章目录 1.前言2.流式查询介绍3.使用流式查询3.1不开启流式查询的内存占用情况3.2开启流式查询的内存占用情况 4.开启流式查询的注意点 1.前言 在使用 JDBC 查询大数据时,由于 JDBC 默认将整个结果集加载到内存中,当查询结果集过大时,很容易…

python与pycharm如何设置文件夹为源代码根目录

相信大家遇到过下面这种情况 当我们在当前项目下引入了其它项目的代码,这是其它项目的包的导入路径是不用于当前项目的,这样导致项目无法正常起来,但是我们又不可能一个个文件去处理,这时可以用下面的方式解决 pycharm直接设置 …

Centos 5 的yum源

背景 有使用较老的Centos 5 系统内部安装软件无法正常报错,是由于系统叫老yum源存在问题 处理方法 更换下述yum源,可以将其他repo源文件备份移动到其他目录,添加下述源后重新测试 [C5.11-base] nameCentOS-5.11 baseurlhttp://vault.c…