24 个版本 (8 个破坏性更新)

新版本 0.9.0 2024 年 8 月 15 日
0.7.1 2024 年 8 月 4 日
0.7.0 2024 年 7 月 28 日

#129 in 异步

Download history 532/week @ 2024-06-10 206/week @ 2024-06-17 525/week @ 2024-06-24 288/week @ 2024-07-01 416/week @ 2024-07-08 340/week @ 2024-07-15 292/week @ 2024-07-22 139/week @ 2024-07-29 90/week @ 2024-08-05 236/week @ 2024-08-12

每月 758 次下载

MIT 许可证

370KB
6.5K SLoC

目录

CI Coverage Status Crate Badge Docs Badge Contributors Stargazers MIT License LinkedIn


Logo

Swiftide

使用 Rust 编写的快速流式索引和查询库,适用于 AI 应用
在 swiftide.rs 上了解更多信息 »

API 文档 · 报告错误 · 请求功能 · Discord

关于项目

Swiftide 是一个数据索引、处理和查询库,专为检索增强生成 (RAG) 定制。当构建大型语言模型 (LLM) 应用程序时,这些 LLM 需要访问外部资源。数据需要转换、丰富、分割、嵌入和持久化。然后可以通过检索索引数据并生成答案来增强查询。它使用 Rust 构建,使用并行、异步流,速度极快。

使用 Swiftide,您可以只用几行代码就将您的 AI 应用程序从想法构建到生产。

RAG

在与其他基于 Python 的工具一起工作时,性能、稳定性和易用性方面出现了挫折。因此,Swiftide 应运而生。索引性能从几分钟缩短到几秒钟。

是 bosun.ai 项目的部分。一个即将推出的自主代码改进平台。

我们 <3 反馈:项目想法、建议和投诉非常欢迎。请随意打开一个问题或在 discord 上联系我们。

[!警告] Swiftide 正在积极开发中,在向 1.0 版本迈进的过程中可能会有破坏性更改。这里的文档可能无法涵盖所有功能,尽管我们努力也可能有些过时。请期待错误。我们建议您始终关注我们的 githubAPI 文档。如果您发现了问题或有任何类型的反馈,我们非常愿意在问题中听到您的声音。

(返回顶部)

博客上的最新更新 🔥

(返回顶部)

示例

indexing::Pipeline::from_loader(FileLoader::new(".").with_extensions(&["rs"]))
        .with_default_llm_client(openai_client.clone())
        .filter_cached(Redis::try_from_url(
            redis_url,
            "swiftide-examples",
        )?)
        .then_chunk(ChunkCode::try_for_language_and_chunk_size(
            "rust",
            10..2048,
        )?)
        .then(MetadataQACode::default())
        .then(move |node| my_own_thing(node))
        .then_in_batch(10, Embed::new(openai_client.clone()))
        .then_store_with(
            Qdrant::builder()
                .batch_size(50)
                .vector_size(1536)
                .build()?,
        )
        .run()
        .await?;

您可以在 /examples 中找到更多示例

(返回顶部)

愿景

我们的目标是创建一个快速、可扩展的数据索引和查询平台,以进一步推动自动化LLM应用的开发,并提供易于使用和扩展的API。

(返回顶部)

功能

  • 快速、模块化的流式索引管道,具有异步、并行处理
  • 实验性查询管道
  • 多种加载器、转换器、语义分块器、嵌入器等
  • 通过扩展简单的特质或使用闭包来引入自己的转换器
  • 分割和合并管道
  • 用于提示的Jinja-like模板
  • 存储到多个后端
  • 与OpenAI、Groq、Redis、Qdrant、Ollama、FastEmbed-rs和Treesitter的集成
  • 支持稀疏向量以用于混合搜索
  • 支持 tracing 进行日志记录和跟踪,请参阅 /examples 和 tracing 包获取更多信息。

详细说明

特性 详细信息
支持的大语言模型提供商 OpenAI(和Azure)- 所有模型和嵌入
AWS Bedrock - Anthropic和Titan
Groq - 所有模型
Ollama - 所有模型
加载数据 文件
抓取
其他管道和流
转换器和元数据生成 生成文本和代码的问答对(Hyde)
通过LLM生成摘要、标题和查询
使用tree-sitter提取定义和引用
分割和分块 Markdown
代码(带有tree-sitter)
存储 Qdrant
Redis

(返回顶部)

入门

先决条件

请确保您已安装rust工具链。 rustup 是推荐的方法。

要使用OpenAI,需要API密钥。请注意,默认情况下 async_openai 使用 OPENAI_API_KEY 环境变量。

其他集成需要相应安装。

安装

  1. 设置新的Rust项目

  2. 添加swiftide

    cargo add swiftide
    
  3. 在您的 Cargo.toml 中启用您要使用的集成功能

  4. 编写管道(请参阅我们的示例和文档)

(返回顶部)

使用和概念

在构建流之前,您需要启用和配置所需的任何集成。请参阅 /examples。

流以发出节点的加载器开始。例如,使用Fileloader,每个文件都是一个节点。

然后您可以切割、切片、增强和过滤节点。管道中的每种不同类型的步骤都需要不同的特质。这使扩展成为可能。

节点具有路径、块和元数据。目前,在分块时复制元数据,并且在使用OpenAIEmbed转换器时始终嵌入。

  • from_loader (impl Loader) 是流的起始点,创建并发出节点
  • filter_cached (impl NodeCache) 过滤缓存节点
  • then (impl Transformer) 转换节点并将其放置在流上
  • then_in_batch (impl BatchTransformer) 转换多个节点并将其放置在流上
  • then_chunk (impl ChunkerTransformer) 转换单个节点并发出多个节点
  • then_store_with (impl Storage) 将节点存储在存储后端,这可以链式调用

此外,还实现了几个泛型转换器。它们接受 SimplePromptEmbedModel 的实现者来完成它们的工作。

[!NOTE] 默认情况下没有启用集成,因为一些集成代码量大。可以挑选需要的集成,或者使用 "all" 特性标志。

[!WARNING] 由于性能原因,在添加元数据之前分块可能导致 OpenAI 发生速率限制错误,尤其是在使用 3.5-turbo 等快速模型时。请注意。

有关更多示例,请参阅 /examples 和文档

(返回顶部)

路线图

查看开放问题以获取建议的功能(和已知问题)的完整列表。

(返回顶部)

社区

如果您想更多地参与 Swiftide,有问题或想聊天,您可以在discord上找到我们。

(返回顶部)

贡献

Swiftide 处于非常初期的阶段,我们清楚我们缺乏更广泛社区的功能。贡献非常受欢迎。🎉

如果您有一个很好的想法,请复制存储库并创建一个拉取请求。您也可以简单地创建一个带有 "enhancement" 标签的问题。别忘了给项目点个赞!再次感谢!

如果您只想做出贡献(真幸运!),请参阅我们的问题

  1. 复制项目
  2. 创建您的功能分支(git checkout -b feature/AmazingFeature
  3. 提交您的更改(git commit -m 'feat: 添加一些 AmazingFeature'
  4. 推送到分支(git push origin feature/AmazingFeature
  5. 打开拉取请求

有关更多信息,请参阅CONTRIBUTING

(返回顶部)

许可证

在 MIT 许可下发行。有关更多信息,请参阅LICENSE

(返回顶部)

依赖关系

~15–44MB
~852K SLoC