#api-client #api-key #stream #deepseek #deepseek-api

deepseek-api-client

Deepseek 的非官方 API 客户端

2 个版本

0.1.1 2024年7月31日
0.1.0 2024年7月31日

#734 in 网页编程

Download history 233/week @ 2024-07-31

每月 233 次下载

Apache-2.0

24KB
515

Deepseek 的非官方 API 客户端

https://platform.deepseek.com/sign_in 上注册账户以获取您的 API 密钥。

[dependencies]
deepseek-api-client = {  path = "https://github.com/acscoder/deepseek-api-client.git" } 

开始使用

将您的 API 密钥加载到环境变量或任何秘密方式

use deepseek_api_client::*;
let api_key = std::env::var("DEEPSEEK_API_KEY").expect("$DEEPSEEK_API_KEY is not set");

调用同步函数

  1. 通过函数 chat_completion_sync 获取 llm
let mut llm_completion = chat_completion_sync(api_key) ;
  1. 然后您将获得一个函数 llm_completion,它接受消息向量输入并返回响应结果。展开响应结果,然后通过函数 get_response_text 获取第一个选择的响应文本。
let messages = vec![
    Message {
        role: "system".to_owned(),
        content: "You are a helpful assistant".to_owned(),
    },
    Message {
        role: "user".to_owned(),
        content: "Write Hello world in rust".to_owned(),
    },
]; 
let res = llm_completion(messages);
let res_text = get_response_text(&res.unwrap(), 0);
dbg!(res_text);

3. 使用函数 code_completion_syncdeepseek-coder 模型进行代码生成,以及使用 llm_function_call_sync 进行函数调用。

调用异步函数

  1. 通过函数 chat_completion 获取 llm
let mut llm_completion = chat_completion(api_key) ;
  1. chat_completion_sync 相同,但这是一个异步函数,我们可以使用 .await 调用它,我使用了 tokio crate 进行异步运行时。
let rt = Runtime::new().unwrap();
  1. 输入消息向量并返回结果,然后通过函数 get_response_text 获取第一个选择的响应文本。
let messages = vec![
    Message {
        role: "system".to_owned(),
        content: "You are a helpful assistant".to_owned(),
    },
    Message {
        role: "user".to_owned(),
        content: "Write Hello world in rust".to_owned(),
    },
];        
let res = llm_completion(messages);
let r = rt.block_on(async { get_response_text(&res.await.unwrap(), 0) });
dbg!(&r);
  1. 使用函数 code_completiondeepseek-coder 模型进行代码生成,以及使用 llm_function_call 进行函数调用。

调用异步函数流

  1. 通过 chat_completion_stream 获取 llm
let mut llm_completion = chat_completion_stream(api_key) ;
  1. 我们有一个异步函数,它接受消息向量输入并返回响应流。
let rt = Runtime::new().unwrap();
let messages = vec![
    Message {
        role: "system".to_owned(),
        content: "You are a helpful assistant".to_owned(),
    },
    Message {
        role: "user".to_owned(),
        content: "Write Hello world in rust".to_owned(),
    },
];   
let response_result = llm_completion(messages);
let _ = rt.block_on(async {
            let res = response_result.await.unwrap();
            let mut stream = res.bytes_stream();
            while let Some(item) = stream.next().await {
                let item = item.unwrap();
                let s = match std::str::from_utf8(&item) {
                    Ok(v) => v,
                    Err(e) => panic!("Invalid UTF-8 sequence: {}", e),
                };
                let data = string_to_ChatResponses(s);
                let text = get_response_text(&data, 0).unwrap_or("".to_owned());
                println!("{}", text);
            }
        });
  1. 使用函数 code_completion_streamdeepseek-coder 模型进行代码生成,以及使用 llm_function_call_stream 进行函数调用。

完整示例代码在此 https://github.com/acscoder/deepseek-api-example-code

依赖项

~4–15MB
~215K SLoC