吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 230|回复: 1
上一主题 下一主题
收起左侧

[学习记录] RUST-调用Deepseek api

[复制链接]
跳转到指定楼层
楼主
Linkmanbo 发表于 2026-4-22 22:49 回帖奖励
use reqwest;
use serde::{Deserialize, Serialize};
use futures_util::StreamExt;

#[derive(Debug, Clone, Serialize, Deserialize)]
struct ChatMessage {
    role: String,
    content: String,
}

#[derive(Debug, Deserialize)]
struct StreamChoice {
    delta: Delta,
}

#[derive(Debug, Deserialize)]
struct Delta {
    content: Option<String>,
}

#[derive(Debug, Deserialize)]
struct StreamResponse {
    choices: Vec<StreamChoice>,
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let api_key = "填你的key";
   
    println!("&#128020;&#127824;&#127774;&#127827; 正在连接 DeepSeek AI...\n");
   
    let messages = vec![
        ChatMessage {
            role: "system".to_string(),
            content: "你是一个助手。".to_string(),
        },
        ChatMessage {
            role: "user".to_string(),
            content: "请详细介绍一下吾爱破解网站。".to_string(),
        },
    ];

    let client = reqwest::Client::new();
   
    let response = client
        .post("https://api.deepseek.com/v1/chat/completions")
        .header("Authorization", format!("Bearer {}", api_key))
        .header("Content-Type", "application/json")
        .json(&serde_json::json!({
            "model": "deepseek-chat",
            "messages": messages,
            "temperature": 0.7,
            "stream": true,  // 启用ds的流式模式
        }))
        .send()
        .await?;

    if !response.status().is_success() {
        let error_text = response.text().await?;
        println!(" 请求失败:{}", error_text);
        return Ok(());
    }

    println!(" AI 开始回答:\n");
   
    let mut stream = response.bytes_stream();
    let mut full_response = String::new();
   
    while let Some(chunk) = stream.next().await {
        let chunk = chunk?;
        let text = String::from_utf8_lossy(&chunk);
        
        //解析SSE
        for line in text.lines() {
            if line.starts_with("data: ") {
                let data = &line[6..];
               
                if data.trim() == "[DONE]" {
                    break;
                }
               
                if let Ok(resp) = serde_json::from_str::<StreamResponse>(data) {
                    if let Some(choice) = resp.choices.first() {
                        if let Some(content) = &choice.delta.content {
                            print!("{}", content);
                            full_response.push_str(content);
                           
                           
                            use std::io::Write;
                            std::io::stdout().flush().unwrap();
                        }
                    }
                }
            }
        }
    }
   
    println!("\n\n 回答完成!");
    println!("完整回复长度:{} 字符", full_response.len());
   
   
    println!("\n按回车键退出...");
    let mut input = String::new();
    std::io::stdin().read_line(&mut input).unwrap();

    Ok(())
}

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
三滑稽甲苯 + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
chlo8 发表于 2026-4-23 10:53
请问大佬,这个用于什么呢?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-4-23 12:37

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表