7 个不稳定版本 (3 个破坏性更新)
0.4.2 | 2024 年 5 月 13 日 |
---|---|
0.4.1 | 2024 年 4 月 16 日 |
0.3.2 | 2024 年 4 月 7 日 |
0.2.0 | 2024 年 4 月 6 日 |
0.1.0 | 2024 年 4 月 5 日 |
#320 在 异步
每月 458 次下载
90KB
1.5K SLoC
Anchor Chain
Anchor Chain 是一个旨在简化涉及大型语言模型 (LLM) 的工作流程编排的 Rust 框架。受 LangChain 启发,Anchor Chain 提供了一套易于使用且可扩展的构建块,使开发者能够快速创建基于 LLM 的应用程序。该框架通过设计优先考虑类型安全性、处理效率和可组合性。
Anchor Chain 目前处于积极开发中,其 API 可能会发生变化。该框架尚未达到稳定版 1.0 发布,且 1.0 版本之前的版本不保证向后兼容性。
|> |> |>
)_) )_) )_)
)___))___))___)
)____)____)_____)
_____|____|____|____
---------\ 0 /--------
^^^^^ ^^^^^^^^^^^^^^^^^^^0^
0
0
0
|
\_⟂_/
特性
-
静态类型链:Anchor Chain 利用 Rust 的类型系统提供静态类型链,在编译时捕获潜在的类型不匹配。
-
异步运行时以实现并行执行:Anchor Chain 使用 Rust 的异步运行时构建,允许对复杂链中的节点进行高效的并行处理。
-
通过节点特性进行扩展:`Node` 特性允许开发者创建针对特定用例定制的节点,使它们能够无缝集成到链中。
-
支持流行的 LLM:Anchor Chain 提供了对流行 LLM 的内置支持,如 OpenAI 的 GPT 模型和 Anthropic 的 Claude,通过抽象 API 细节来提供一个通用接口。
-
并行节点执行:`ParallelNode` 结构体使多个节点能够并行执行,利用并发来提高链的整体性能。
-
跟踪支持:Anchor Chain 集成了 `tracing` crate,提供详细的日志和诊断,帮助开发者理解其链的执行流程。
-
OpenSearch 集成:Anchor Chain 支持 OpenSearch 向量索引的文档索引和搜索,使检索增强生成 (RAG) 工作流程成为可能。
支持的模型
目前,Anchor链支持通过使用async-openai crate和AWS Bedrock API的Claude 3 Sonnet,以及OpenAI的GPT3.5 Turbo、GPT4 Turbo和GPT3.5 Instruct。计划添加对Mistral和其他AWS Bedrock支持的模型的支持,以及通过提供的REST API连接到本地运行的Ollama或llama.cpp模型的支持。
为什么选择Anchor链?
Anchor链解决了开发者在使用LangChain时面临的一些挑战,例如缺乏文档、模糊不清的API以及缺乏类型安全。这些问题可能导致在构建基于LLM的应用程序时进行耗时的试错。
通过利用Rust的表达性类型系统,Anchor链提供了静态类型链,提供了清晰的编译时反馈和编辑器中的类型提示。这有助于在开发过程的早期捕捉潜在的错误,并促进更高效的流程。
此外,Anchor链内置了对异步运行时的支持,可以有效地并行处理复杂链中的节点。这可以显著减少基于LLM的工作流程的总体执行时间,使Anchor链成为性能关键应用的吸引人选择。
入门指南
要开始使用Anchor链,请将以下依赖项添加到您的Cargo.toml
文件中
[dependencies]
anchor-chain = "0.1.1"
然后,您可以使用ChainBuilder
创建链,并使用.process()
函数调用它们
use anchor_chain::{
chain::ChainBuilder,
nodes::prompt::Prompt,
models::openai::OpenAIModel,
};
use std::collections::HashMap;
#[tokio::main]
async fn main() {
let chain = ChainBuilder::new()
.link(Prompt::new("{{ input }}"))
.link(OpenAIModel::new_gpt4_turbo("You are a helpful assistant".to_string()).await)
.build();
let output = chain
.process(HashMap::from([(
"input".to_string(),
"Write a hello world program in Rust".to_string(),
)]))
.await
.expect("Error processing chain");
println!("Output:\n{}", output);
}
贡献
欢迎对Anchor链做出贡献!如果您遇到任何问题,有改进的建议或想贡献新功能,请在GitHub存储库上打开问题或提交拉取请求。
TODO
虽然Anchor链现在可用,但它仍在开发中。以下是为1.0版本计划的功能列表
- AWS Bedrock通过Mistral支持
- Ollama REST API支持
- 添加错误处理策略,如果主模型失败,则使用备用模型
未来版本的其他潜在功能
- 为Askama添加功能标志以支持静态类型提示
- 创建一个节点来分类和记录输入,以更好地观察输入
- 输出验证节点,可以尝试修复意外或不完整的输出
- 支持rustformers/llm以利用本地模型
许可证
Anchor链是在MIT许可证下发布的。
依赖项
~25–39MB
~650K SLoC