Indexify:将 HuggingFace 模型引入实时生产应用管道

社区文章 发布于 2024 年 5 月 31 日

无论您是在开发电子商务应用、客户支持聊天机器人,还是法律和金融 RAG 应用,Hugging Face 都提供了几乎所有用例的模型。每周都会新增针对特定任务的模型,确保您始终拥有所需的工具。使用无处不在的 Transformers 库进行应用原型开发非常简单,但开发人员在构建实际世界中的数据密集型应用时,通常会面临重大挑战。

这些挑战包括

  • 跟上不断变化的数据。
  • 通过持续处理数据来确保管道的可靠性,即使在计算或模型服务基础设施发生暂时性故障时也是如此。
  • 使管道适应新模型。

值得庆幸的是,使用 Indexify(一个用于构建实时、数据密集型应用的开源数据框架)可以轻松解决这些挑战。借助 Indexify,您可以使用一个或多个 Hugging Face 模型构建管道,可靠地处理数万个请求。最棒的是什么?Indexify 可以在您的笔记本电脑上运行以进行原型开发,并无缝扩展到云基础设施,以处理生产环境中的任何流量。

创建更智能的会议记录

如果您想深入了解此示例的代码,请点击此处

假设您正在构建一个用于生成会议记录的应用。典型的工作流程如下:

  1. 接收会议录音流。
  2. 使用自动语音识别模型转录录音,最好带说话人识别,以保留说话人身份。
  3. 总结转录内容以创建可搜索的会议记录。
  4. 从总结的转录内容生成最终会议记录。

要使用 Indexify 实现这一点,您首先需要创建一个能够处理这些步骤的管道。在 Indexify 中,我们将这些管道称为提取图。提取图由一个或多个提取器组成,这些提取器使用模型或其他算法转换非结构化数据,然后将处理后的数据传递给另一个提取器或直接传递给存储系统。

from indexify import IndexifyClient, ExtractionGraph

client = IndexifyClient()

extraction_graph_spec = """
name: 'asrrag'
extraction_policies:
  - extractor: 'tensorlake/asrdiarization'
    name: 'sttextractor'
    input_params:
      batch_size: 24
  - extractor: 'tensorlake/chunk-extractor'
    name: 'chunker'
    input_params:
      chunk_size: 1000
      overlap: 100
    content_source: 'sttextractor'
  - extractor: 'tensorlake/arctic'
    name: 'embedder'
    content_source: 'chunker'
"""

extraction_graph = ExtractionGraph.from_yaml(extraction_graph_spec)
client.create_extraction_graph(extraction_graph)
  • 第一个提取器 `tensorlake/asrdiarization` 使用 `openai/whisper-large-v3` 和 `pyannote/speaker-diarization-3.1` 进行说话人识别和转录。
  • `tensorlake/chunk-extractor` 将文本分割成 1,000 个字符的块,并带有 100 个字符的重叠,以改进处理和检索。
  • `tensorlake/arctic` 使用 Snowflake 的 Arctic 嵌入模型进行快速准确的语义相似性搜索。

配置完成后

  • 将任意数量的音频上传到 Indexify。
  • Indexify 持续执行管道,将转录和摘要存储在 Blob 存储中,并将嵌入存储在向量数据库中。
  • 系统持续运行,在会议结束后立即生成摘要并使其可搜索。
  • Indexify 自动扩展以高效管理工作负载,无需基础设施延迟。
content_id = client.upload_file("asrrag", "interview.mp3")

即插即用 Hugging Face 模型

Indexify 支持 Hugging Face 上所有开源的大型语言模型。如果您需要基于 Hugging Face 的任何其他开源模型创建提取器,过程很简单——让我们看看如何创建一个基本的命名实体识别提取器。

from typing import List, Union, Optional
from indexify_extractor_sdk import Content, Extractor, Feature
from pydantic import BaseModel, Field
from transformers import AutoTokenizer, AutoModelForTokenClassification
from transformers import pipeline

class NERExtractorConfig(BaseModel):
    model_name: Optional[str] = Field(default="dslim/bert-base-NER")

class NERExtractor(Extractor):
    name = "tensorlake/ner"
    description = "An extractor that let's you do Named Entity Recognition."
    system_dependencies = []
    input_mime_types = ["text/plain"]

    def __init__(self):
        super(NERExtractor, self).__init__()

    def extract(self, content: Content, params: NERExtractorConfig) -> List[Union[Feature, Content]]:
        text = content.data.decode("utf-8")
        model_name = params.model_name

        tokenizer = AutoTokenizer.from_pretrained(model_name)
        model = AutoModelForTokenClassification.from_pretrained(model_name)
        nlp = pipeline("ner", model=model, tokenizer=tokenizer)

        ner_results = nlp(text)
        
        return Content.from_text(str(ner_results))

    def sample_input(self) -> Content:
        return Content.from_text("My name is Wolfgang and I live in Berlin")

如果您想深入了解此提取器的代码,请点击此处

为什么可靠性和实时性对 AI 应用很重要?

AI 应用需要对变化做出响应,例如在业务中,文档会频繁更新或创建。设想一个场景,用户依赖您的会议总结应用与他们的团队分享更新;如果管道未能执行,这将降低用户体验并损害用户信任。另一个潜在问题是,如果您的应用变得非常流行并获得高采用率,但由于数据处理基础设施并非为水平扩展而设计,因此无法扩展。

大多数成功的 AI 应用都在消费者或决策者的工作流中运行。因此,模型的数据需要根据这些工作流的时间限制进行更新。它必须由一个强大的基础设施支持,该基础设施能够处理故障,例如集群中的节点宕机或模型 API 变慢或产生错误。

使 Indexify 成为构建生产应用的理想选择的关键功能

多模态和可扩展性

Indexify 默认支持多模态。您可以在管道中处理文档、文本、视频和音频。在应用中处理新数据类型时,您无需寻找其他工具或框架。

LLM 框架和数据库兼容性

Indexify 的检索 API 易于集成到您的应用中,我们已经与 Langchain 和 DSPy 等框架建立了集成。

Indexify 支持广泛的向量和结构化数据存储数据库,包括 Qdrant、Pinecone、PgVector、LanceDB、Postgres 和 SQLite。更多与 Cassandra、MongoDB 和 Weviate 等后端的集成正在开发中。

多地域部署

Indexify 可以部署在多数据中心模式下,允许从任何地方进行数据提取和查询。如果您的 Azure 或 GCP 中有额外的 GPU 或计算能力,而您的数据和应用位于 AWS 中,这将很有利。您可以将 Indexify 的摄取服务器和调度器部署在 AWS 中,并在其他云中运行提取器,反之亦然。这种灵活性优化了容量、成本和性能,确保您的 LLM 应用随着数据量的增加无缝扩展。

Indexify 使用 mTLS 加密控制平面和数据平面之间的所有流量,以确保互联网上的数据移动安全。这种强大的安全措施可保护您的敏感数据并确保符合数据隐私法规。

开始使用 Indexify

访问我们的网站和 GitHub 仓库,了解更多关于项目及其使用方法的信息。

社区

注册登录 发表评论