文章目录
- 关于 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(一)