9 个版本
0.1.8 | 2024 年 5 月 11 日 |
---|---|
0.1.7 | 2024 年 5 月 9 日 |
0.1.2 | 2024 年 4 月 29 日 |
#703 在 Web 编程
每月 下载 52 次
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_info、
list_models 和
count_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
步骤
- 创建
.env
文件: 在你的 Rust 项目目录的根目录下创建一个名为.env
的文件。 - 添加 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