#llm #language-model #openai-api #gemini #anthropic #different #unified

llm_api_access

用于查询流行的大型语言模型(LLM)的包

9 个版本

0.1.8 2024 年 5 月 11 日
0.1.7 2024 年 5 月 9 日
0.1.2 2024 年 4 月 29 日

#703Web 编程

Download history 296/week @ 2024-04-26 380/week @ 2024-05-03 224/week @ 2024-05-10 35/week @ 2024-05-17 6/week @ 2024-05-24 1/week @ 2024-06-07 7/week @ 2024-07-19 45/week @ 2024-07-26

每月 下载 52

MIT/Apache

45KB
1K SLoC

llm_api_access crate 提供了一种统一的方式与不同的大型语言模型(LLM)如 OpenAI、Gemini 和 Anthropic 进行交互。

LLM 枚举

此枚举表示支持的 LLM 提供商

  • OpenAI:表示 OpenAI 语言模型。
  • Gemini:表示 Gemini 语言模型。
  • Anthropic:表示 Anthropic 语言模型。

访问特质

Access 特质定义了与 LLM 交互的异步方法

  • send_single_message:发送一条消息并返回生成的响应。
  • send_convo_message:发送一条消息列表作为对话并返回生成的响应。
  • get_model_info:获取特定 LLM 模型的信息。
  • list_models:列出所有可用的 LLM 模型。
  • count_tokens:计算给定文本中的标记数量。

LLM 枚举实现了 Access,为所选 LLM 提供商的每个方法提供特定的实现。

注意: 目前,get_model_infolist_modelscount_tokens 只适用于 Gemini LLM。其他提供商返回错误,表明此功能尚未支持。

使用 dotenv 加载 API 凭据

llm_api_access crate 使用 dotenv 库从你的 Rust 项目根目录下的 .env 文件安全地加载 API 凭据。此文件应包含你想要使用的每个 LLM 提供商的键值对。

示例结构

OPEN_AI_ORG=your_openai_org
OPENAI_API_KEY=your_openai_api_key
GEMINI_API_KEY=your_gemini_api_key
ANTHROPIC_API_KEY=your_anthropic_api_key

步骤

  1. 创建 .env 文件: 在你的 Rust 项目目录的根目录下创建一个名为 .env 的文件。
  2. 添加 API 密钥: 使用以下格式填写 .env 文件,用你的实际 API 密钥替换占位符。

重要提示

  • 永远不要.env 文件提交到版本控制系统如 Git 中。它包含敏感信息,如 API 密钥。

示例用法

send_single_message 示例

use llm::{LLM, Access};

#[tokio::main]
async fn main() {
    // Create an instance of the OpenAI LLM
    let llm = LLM::OpenAI;

    // Send a single message to the LLM
    let response = llm.send_single_message("Tell me a joke about programmers").await;

    match response {
        Ok(joke) => println!("Joke: {}", joke),
        Err(err) => eprintln!("Error: {}", err),
    }
}

此示例创建了一个 LLM::OpenAI 提供者的实例,并使用 send_single_message 方法发送一条消息。然后它匹配结果,打印生成的笑话或错误消息(如果发生错误)。

send_convo_message 示例

use llm::{LLM, Access, Message};

#[tokio::main]
async fn main() {
    // Create an instance of the Gemini LLM
    let llm = LLM::Gemini;

    // Define the conversation messages
    let messages = vec![
        Message {
            role: "user".to_string(),
            content: "You are a helpful coding assistant.".to_string(),
        },
        Message {
            role: "model".to_string(),
            content: "You got it! I am ready to assist!".to_string(),
        },
        Message {
            role: "user".to_string(),
            content: "Generate a rust function that reverses a string.".to_string(),
        },
    ];

    // Send the conversation messages to the LLM
    let response = llm.send_convo_message(messages).await;

    match response {
        Ok(code) => println!("Code: {}", code),
        Err(err) => eprintln!("Error: {}", err),
    }
}

注意:此示例需要 Gemini LLM 提供者的 API 密钥和配置。

测试

llm_api_access 包包含对 Access 特性中各种方法的单元测试。这些测试展示了与不同 LLM 提供者的使用和预期行为。

依赖关系

~6–19MB
~274K SLoC