关于该项目
我们博客上的最新更新
例子
想象
特征
入门
用法和概念
路线图
贡献
执照
在使用其他基于 Python 的工具时,性能、稳定性和易用性方面出现了一些问题。于是,Swiftide诞生了。 Swiftide 的目标是提供一个成熟的检索增强生成库,该库快速、易于使用、可靠且易于扩展。
bosun.ai 项目的一部分。即将推出的自主代码改进平台。
我们<3反馈:非常欢迎项目想法、建议和投诉。请随时提出问题或就不和谐问题联系我们。
很好的起点是本自述文件、swiftide.rs、示例文件夹、bosun.ai 的博客以及 swiftide-tutorial 的深入教程。
警告
Swiftide 正在大力开发中,在我们努力实现 1.0 的过程中可能会发生重大变化。尽管我们付出了努力,但这里的文档可能会缺乏所有功能,但还是有些过时。期待错误。我们建议始终关注我们的 github 和 api 文档。如果您发现问题或有任何类型的反馈,我们很乐意听取您对问题的意见。
(回到顶部)
使用 Ragas 评估 Swiftide 管道 (2024-09-15)
发布 - Swiftide 0.12 (2024-09-13)
使用 Ollama、FastEmbed 和 OpenTelemetry 的本地代码英特尔 (2024-09-04
发布 - Swiftide 0.9 (2024-09-02)
带上自己的变压器 (2024-08-13)
发布 - 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)
(回到顶部)
索引本地代码项目,分成更小的部分,用元数据丰富节点,并持久保存到 Qdrant 中:
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 ( Embed :: new ( openai_client . clone ( ) ) )
. then_store_with (
Qdrant :: builder ( )
. batch_size ( 50 )
. vector_size ( 1536 )
. build ( ) ? ,
)
. run ( )
. await ? ;
查询如何使用查询管道的示例:
query :: Pipeline :: default ( )
. then_transform_query ( GenerateSubquestions :: from_client (
openai_client . clone ( ) ,
) )
. then_transform_query ( Embed :: from_client (
openai_client . clone ( ) ,
) )
. then_retrieve ( qdrant . clone ( ) )
. then_answer ( Simple :: from_client ( openai_client . clone ( ) ) )
. query ( "How can I use the query pipeline in Swiftide?" )
. await ? ;
您可以在 /examples 中找到更多示例
(回到顶部)
我们的目标是为检索增强生成创建一个快速、可扩展的平台,通过易于使用和易于扩展的 API 进一步开发自动化 AI 应用程序。
(回到顶部)
tracing
支持日志记录和跟踪,请参阅 /examples 和tracing
箱以获取更多信息。特征 | 细节 |
---|---|
支持的大型语言模型提供商 | OpenAI(和 Azure)- 所有模型和嵌入 AWS Bedrock - Anthropic 和 Titan Groq - 所有型号 奥拉马 - 所有型号 |
加载数据 | 文件 刮痧 弗卢维奥 实木复合地板 其他管道和流 |
转换器和元数据生成 | 为文本和代码生成问题和答案 (Hyde) 通过法学硕士的摘要、标题和查询 使用 Tree-sitter 提取定义和参考 |
分割和分块 | 降价 文本(text_splitter) 代码(与树保姆) |
贮存 | 奎德兰特 雷迪斯 兰斯数据库 |
查询管道 | 相似性和混合搜索、查询和响应转换以及评估 |
(回到顶部)
确保您安装了 Rust 工具链。 rustup 是推荐的方法。
要使用 OpenAI,需要 API 密钥。请注意,默认情况下async_openai
使用OPENAI_API_KEY
环境变量。
其他集成可能有自己的要求。
设置一个新的 Rust 项目
添加迅捷
cargo add swiftide
启用您想要在Cargo.toml
中使用的集成功能
编写管道(请参阅我们的示例和文档)
(回到顶部)
在构建流之前,您需要启用并配置所需的任何集成。请参阅/示例。
我们有很多例子,请参考 /examples 和文档
笔记
默认情况下不启用任何集成,因为有些集成代码量很大。我们建议您挑选您需要的集成。按照约定,标志与其代表的集成具有相同的名称。
索引流以发出节点的加载器开始。例如,对于 Fileloader,每个文件都是一个 Node。
然后,您可以对节点进行切片、切块、扩充和过滤。管道中的每种不同类型的步骤都需要不同的特征。这使得扩展成为可能。
节点有路径、块和元数据。目前,元数据在分块时被复制,并在使用 OpenAIEmbed 转换器时始终嵌入。
(impl Loader)
流的起点,创建并发出 Node(impl NodeCache)
过滤缓存节点(impl Transformer)
转换节点并将其放入流中(impl BatchTransformer)
转换多个节点并将它们放到流上(impl ChunkerTransformer)
转换单个节点并发出多个节点(impl Storage)
将节点存储在存储后端,这可以链接起来此外,还实现了几个通用变压器。他们让SimplePrompt
和EmbedModel
的实现者来做他们的事情。
警告
由于性能原因,在添加元数据之前进行分块会导致 OpenAI 上的速率限制错误非常快,尤其是对于 3.5-turbo 等更快的模型。请注意。
查询流以搜索策略开始。在查询管道中, Query
会经历几个阶段。转换器和检索器一起工作,在生成答案之前将正确的上下文放入提示中。变压器和检索器通过通用状态机在查询的不同阶段进行操作。此外,搜索策略在整个管道中是通用的,检索器需要专门针对每个策略实施。
这听起来很多,但是,tl&dr;查询管道是完全强类型的。
此外,还可以评估查询管道。即拉加斯。
与索引管道类似,每个步骤都由简单的特征控制,闭包也实现这些特征。
(回到顶部)
请参阅未决问题以获取建议功能(和已知问题)的完整列表。
(回到顶部)
如果您想更多地参与 Swiftide、有疑问或想聊天,您可以在 Discord 上找到我们。
(回到顶部)
Swiftide 还处于非常早期的阶段,我们意识到我们缺乏适合更广泛社区的功能。非常欢迎您的贡献。 ?
如果您有一个好主意,请分叉该存储库并创建拉取请求。您也可以简单地使用标签“增强”打开问题。不要忘记给该项目一颗星!再次感谢!
如果您只是想做出贡献(祝福您!),请查看我们的问题或加入我们的 Discord。
git checkout -b feature/AmazingFeature
)git commit -m 'feat: Add some AmazingFeature'
)git push origin feature/AmazingFeature
)请参阅贡献以了解更多信息
(回到顶部)
根据 MIT 许可证分发。请参阅LICENSE
了解更多信息。
(回到顶部)