4个版本 (2个破坏性版本)
新版本 0.9.0 | 2024年8月15日 |
---|---|
0.8.0 | 2024年8月12日 |
0.7.1 | 2024年8月4日 |
0.7.0 | 2024年7月28日 |
#659 in 异步
每月483次下载
用于 swiftide
84KB
1.5K SLoC
关于项目
Swiftide是一个数据索引、处理和查询库,专为检索增强生成(RAG)而定制。在构建大型语言模型(LLM)的应用程序时,这些LLM需要访问外部资源。数据需要转换、丰富、分割、嵌入和持久化。然后可以通过检索索引数据并生成答案来增强查询。它使用Rust构建,使用并行、异步流,速度极快。
使用Swiftide,您可以用几行代码将您的AI应用程序从构思到生产构建。
在使用其他基于Python的工具时,围绕性能、稳定性和易用性产生了挫败感。因此,Swiftide应运而生。索引性能从几分钟缩短到几秒钟。
是 bosun.ai 项目的一部分。一个即将推出的自主代码改进平台。
我们非常欢迎反馈:项目想法、建议和投诉。请随意在 discord 上提出问题或联系我们。
[!注意] Swiftide正在积极开发中,并在我们朝着1.0版本迈进的过程中可能存在破坏性更改。这里的文档可能无法涵盖所有功能,尽管我们尽力,但可能略有过时。请期待错误。我们建议您始终关注我们的 github 和 api文档。如果您发现错误或有任何反馈,我们很乐意在问题中听到您的意见。
(回到顶部)
博客上的最新更新 🔥
- 发布 - Swiftide 0.8 (2024-08-12)
- 发布 - Swiftide 0.7 (2024-07-28)
- 构建代码问答管道 (2024-07-13)
- 发布 - Swiftide 0.6 (2024-07-12)
- 发布 - Swiftide 0.5 (2024-07-1)
(回到顶部)
示例
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
进行日志记录和跟踪,请参阅/tracing
示例和crate获取更多信息。
详细说明
功能 | 详细信息 |
---|---|
支持的大型语言模型提供商 | 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
环境变量。
其他集成需要相应安装。
安装
-
设置新的Rust项目
-
添加swiftide
cargo add swiftide
-
在您的
Cargo.toml
中启用您要使用的集成功能 -
编写管道(请参阅我们的示例和文档)
(回到顶部)
使用和概念
在构建流之前,您需要启用和配置所需的任何集成。请参阅/examples
。
流从一个Loader开始,它发出Nodes。例如,使用Fileloader,每个文件都是一个Node。
然后您可以切片、切块、增强和过滤节点。管道中的每种不同类型的步骤都需要不同的特质。这实现了扩展。
节点有一个路径、块和元数据。目前,在分块时复制元数据,并在使用OpenAIEmbed转换器时始终嵌入。
- from_loader
(impl Loader)
是流的起点,创建并发出Nodes - filter_cached
(impl NodeCache)
过滤缓存的节点 - then
(impl Transformer)
转换节点并将其放置在流中 - then_in_batch
(impl BatchTransformer)
转换多个节点并将其放置在流中 - then_chunk
(impl ChunkerTransformer)
转换单个节点并发出多个节点 - then_store_with
(impl Storage)
将节点存储在存储后端,这可以串联使用
此外,还实现了几个通用变压器。它们接收 SimplePrompt
和 EmbedModel
的实现者来执行它们的功能。
[!NOTE] 默认情况下没有启用集成,因为一些集成代码量较大。要么选择所需的集成,要么使用 "all" 功能标志。
[!WARNING] 由于性能问题,在添加元数据之前分块会导致 OpenAI 非常快地出现速率限制错误,特别是对于 3.5-turbo 等快速模型。请注意。
更多示例请参阅 /examples 和 文档
(回到顶部)
路线图
有关建议的功能(以及已知问题)的完整列表,请参阅 公开问题
(回到顶部)
社区
如果您想更多地参与 Swiftide,有问题或想聊天,您可以在 discord 上找到我们。
(回到顶部)
贡献
Swiftide 处于一个非常早期阶段,我们意识到我们缺乏更广泛社区的功能。贡献非常受欢迎。🎉
如果您有一个很好的想法,请将存储库分叉并创建一个拉取请求。您也可以简单地打开一个带有 "enhancement" 标签的问题。别忘了为项目加星!再次感谢!
如果您只想做出贡献(祝福您!),请参阅 我们的问题。
- 分叉项目
- 创建您的功能分支(
git checkout -b feature/AmazingFeature
) - 提交您的更改(
git commit -m 'feat: Add some AmazingFeature'
) - 推送到分支(
git push origin feature/AmazingFeature
) - 打开拉取请求
有关更多信息,请参阅 CONTRIBUTING
(回到顶部)
许可证
在 MIT 许可证下分发。有关更多信息,请参阅 LICENSE
(回到顶部)
依赖关系
~11–22MB
~310K SLoC