#llm #openai #claude #rag #langchain #statically-typed #parallel-processing

anchor-chain

用于构建基于 LLM 应用程序的静态类型异步框架

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异步

Download history 162/week @ 2024-05-10 19/week @ 2024-05-17 3/week @ 2024-05-24 3/week @ 2024-05-31 4/week @ 2024-06-07 3/week @ 2024-06-14 34/week @ 2024-07-05 3/week @ 2024-07-12

每月 458 次下载

MIT 许可证

90KB
1.5K SLoC

Rust Build Docs crates License

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连接到本地运行的Ollamallama.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);
}

有关更多示例和详细文档,请参阅示例目录API文档

贡献

欢迎对Anchor链做出贡献!如果您遇到任何问题,有改进的建议或想贡献新功能,请在GitHub存储库上打开问题或提交拉取请求。

TODO

虽然Anchor链现在可用,但它仍在开发中。以下是为1.0版本计划的功能列表

  • AWS Bedrock通过Mistral支持
  • Ollama REST API支持
  • 添加错误处理策略,如果主模型失败,则使用备用模型

未来版本的其他潜在功能

  • 为Askama添加功能标志以支持静态类型提示
  • 创建一个节点来分类和记录输入,以更好地观察输入
  • 输出验证节点,可以尝试修复意外或不完整的输出
  • 支持rustformers/llm以利用本地模型

许可证

Anchor链是在MIT许可证下发布的。

依赖项

~25–39MB
~650K SLoC