use langchainrust::{
BaseChatModel, DeepSeekChat, DeepSeekConfig, OllamaChat, OllamaConfig, OpenAIChat, OpenAIConfig,
};
use langchainrust::schema::Message;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let provider = std::env::var("PROVIDER").unwrap_or_else(|_| "openai".to_string());
let messages = vec![
Message::system("你是一个 helpful assistant,一句话回答。"),
Message::human("用一句话介绍你自己。"),
];
let answer = match provider.as_str() {
"openai" => {
let api_key =
std::env::var("OPENAI_API_KEY").expect("请设置 OPENAI_API_KEY");
let base_url = std::env::var("OPENAI_BASE_URL")
.unwrap_or_else(|_| "https://api.openai.com/v1".to_string());
let llm = OpenAIChat::new(OpenAIConfig {
api_key,
base_url,
model: "gpt-4o-mini".to_string(),
..Default::default()
});
llm.chat(messages, None).await?.content
}
"ollama" => {
let llm = OllamaChat::with_config(OllamaConfig {
base_url: std::env::var("OLLAMA_BASE_URL")
.unwrap_or_else(|_| "http://localhost:11434/v1".to_string()),
model: "llama3.2".to_string(),
..Default::default()
});
llm.chat(messages, None).await?.content
}
"deepseek" => {
let api_key =
std::env::var("DEEPSEEK_API_KEY").expect("请设置 DEEPSEEK_API_KEY");
let llm = DeepSeekChat::new(DeepSeekConfig {
api_key,
model: "deepseek-chat".to_string(),
..Default::default()
});
llm.chat(messages, None).await?.content
}
other => {
return Err(format!(
"未知 provider: {other}(可选:openai/ollama/deepseek)"
)
.into())
}
};
println!("[{provider}] 回答:\n{answer}");
Ok(())
}