“深入浅出”系列之QT:(10)Qt接入Deepseek

news/2025/2/21 10:46:09/

项目配置:

在.pro文件中添加网络模块:

 QT += core network

API配置:

  • 将apiUrl替换为实际的DeepSeek API端点

  • 将apiKey替换为你的有效API密钥

  • 根据API文档调整请求参数(模型名称、温度值等)

功能说明:

  • 使用QNetworkAccessManager处理HTTP请求

  • 自动处理JSON序列化/反序列化

  • 支持异步请求处理

  • 包含基本的错误处理

扩展建议:

  • 添加更完善的错误处理(HTTP状态码检查)

  • 实现异步回调机制

  • 添加请求超时处理

  • 支持流式响应(如果API支持)

  • 使用环境变量或配置文件管理API密钥

典型输出处理:

// 在handleResponse函数中可添加以下处理逻辑:if (!content.isEmpty()) {    qDebug() << "Received response:";    qDebug().noquote() << content;  // 保留原始格式} else {    qDebug() << "No content in response";}

代码举例:

#include <QCoreApplication>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QDebug>class ApiClient : public QObject {Q_OBJECT
public:explicit ApiClient(QObject *parent = nullptr) : QObject(parent) {manager = new QNetworkAccessManager(this);connect(manager, &QNetworkAccessManager::finished, this, &ApiClient::handleResponse);}void sendRequest(const QString &prompt) {// API配置const QString apiUrl = "https://api.deepseek.com/v1/chat/completions";const QString apiKey = "your_api_key_here"; // 请替换为实际API密钥// 创建请求QNetworkRequest request;request.setUrl(QUrl(apiUrl));request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");request.setRawHeader("Authorization", QString("Bearer %1").arg(apiKey).toUtf8());// 构建JSON请求体QJsonObject requestBody;requestBody["model"] = "deepseek-chat";  // 根据实际模型名称修改requestBody["temperature"] = 0.7;requestBody["max_tokens"] = 1000;QJsonArray messages;QJsonObject systemMsg;systemMsg["role"] = "system";systemMsg["content"] = "You are a helpful assistant.";messages.append(systemMsg);QJsonObject userMsg;userMsg["role"] = "user";userMsg["content"] = prompt;messages.append(userMsg);requestBody["messages"] = messages;// 发送POST请求manager->post(request, QJsonDocument(requestBody).toJson());}private slots:void handleResponse(QNetworkReply *reply) {if (reply->error()) {qDebug() << "Error:" << reply->errorString();reply->deleteLater();return;}// 解析响应QJsonDocument response = QJsonDocument::fromJson(reply->readAll());QJsonObject jsonResponse = response.object();if (jsonResponse.contains("choices")) {QJsonArray choices = jsonResponse["choices"].toArray();if (!choices.isEmpty()) {QJsonObject choice = choices.first().toObject();QJsonObject message = choice["message"].toObject();QString content = message["content"].toString();qDebug() << "API Response:" << content;}} else {qDebug() << "Error response:" << response.toJson();}reply->deleteLater();}private:QNetworkAccessManager *manager;
};// 使用示例
int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);ApiClient client;client.sendRequest("Explain quantum computing in simple terms");return a.exec();
}#include "main.moc"

http://www.ppmy.cn/news/1573859.html

相关文章

后台管理系统-月卡管理

功能说明并准备静态结构 <template><div class"card-container"><!-- 搜索区域 --><div class"search-container"><span class"search-label">车牌号码&#xff1a;</span><el-input clearable placeho…

GCC头文件搜索顺序详解

在C/C编程中&#xff0c;合理管理头文件的引入路径对于项目的组织至关重要。GCC编译器提供了灵活的机制来指定头文件的搜索路径&#xff0c;这主要通过#include "…"和#include <…>两种形式实现。本文将详细介绍这两种形式的区别以及如何使用-I参数优化头文件…

代理和NAT多路转接

1.NAT技术背景 在IPv4协议中存在IP地址数量不充足的问题&#xff0c; NAT技术当前解决IP地址不够用的主要手段, 是路由器的一个重要功能。 NAT能够将私有IP对外通信时转为全局IP. 也就是就是一种将私有IP和全局IP相互转化的技术方法: 很多学校, 家庭, 公司内部采用每个终端设…

嵌入式0xDEADBEEF

在嵌入式系统中&#xff0c;0xDEADBEEF 是一个常见的“魔数”&#xff08;magic number&#xff09;&#xff0c;通常用于调试和内存管理。它的含义和用途如下&#xff1a; 1. 调试用途 未初始化内存的标记&#xff1a;在调试时&#xff0c;0xDEADBEEF 常用于标记未初始化或已…

解决 WSL Ubuntu 中 /etc/resolv.conf 自动重置问题

解决 WSL Ubuntu 中 /etc/resolv.conf 自动重置问题 前言问题描述问题原因尝试过的命令及分析解决方案&#xff1a;修改 wsl.conf 禁用自动生成总结 前言 在使用 Windows Subsystem for Linux (WSL) 的 Ubuntu 子系统时&#xff0c;你可能会遇到 /etc/resolv.conf 文件被自动重…

Postman配置环境变量(超详细的)

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 Postman是一套比较方便的接口测试工具&#xff0c;但我们在使用过程中&#xff0c;可能会出现创建了API请求&#xff0c;但API的URL会随着服务器IP地址的变化而改…

Python 实现反转、合并链表有啥用?

大家好&#xff0c;我是 V 哥。使用 Python 实现反转链表、合并链表在开发中比较常见&#xff0c;我们先来看看各自的应用场景。先赞再看后评论&#xff0c;腰缠万贯财进门。 2024博客之星年度总评选&#xff0c;感谢给 V 哥投上宝贵的一票 反转链表 比如&#xff0c;在处理…

跳表(Skip List)详解

一、什么是跳表&#xff1f; 跳表是一种基于有序链表的高效数据结构&#xff0c;通过建立多级索引实现快速查询。它在平均情况下支持O(log n)时间复杂度的搜索、插入和删除操作&#xff0c;性能接近平衡树&#xff0c;但实现更为简单。 二、核心原理 1. 层级结构 底层为完整…