-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathchatpro.h
More file actions
74 lines (68 loc) · 2.24 KB
/
Copy pathchatpro.h
File metadata and controls
74 lines (68 loc) · 2.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#ifndef CHATPRO_H
#define CHATPRO_H
#include <QObject>
#include <QDebug>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QJsonObject>
#include <QJsonDocument>
#include <QJsonArray>
#include <QList>
enum MessageType{
SYSTEM_MESSAGE,
USER_MESSAGE,
ASSISTANT_MESSAGE,
TOOL_MESSAGE
};
class ChatPro : public QObject
{
Q_OBJECT
public:
QJsonArray m_messages;
// 单例模式
static ChatPro *Get(){
static ChatPro cp;
return &cp;
}
// 构造请求头
QNetworkRequest buildRequestHeader();
// 构造请求体
QByteArray buildRequestBody(const QJsonArray &messages, const QJsonArray &tools);
// 数据流转Json对象
QJsonObject qByteArrayToQJsonObject(const QByteArray &data);
// QString转Json对象
QJsonObject qStringToQJsonObject(const QString &qStr);
// Json对象转数据流
QByteArray qJsonObjectToQByteArray(const QJsonObject &obj);
// 响应
QNetworkReply* getReply(const QJsonArray &messages, const QJsonArray &tools);
// 构建信息(系统、用户、助手、工具)
QJsonObject buildMessage(const QString &message, MessageType type,
const QJsonArray &toolCalls = QJsonArray(),
const QString &name = "",
const QString &id = "");
// 解析流式输出
QJsonArray parseChunkResponse(const QByteArray &resp);
// 获取信息
QJsonObject getMessage(const QJsonObject &chunk);
// 获取内容
QString getContent(const QJsonObject &message);
// 从多条不完整的ToolCalls字段中解析出完整的字段
QJsonArray parsetoolCallPieces(const QList<QJsonArray> &toolCalls);
void ConnectReply(const QJsonArray &messages, const QJsonArray &tools);
private:
// 网络管理器
QNetworkAccessManager *manager;
QString m_url = "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions";
QString m_api_key = "sk-a90528958d5d4abb8621ef0886f85f7f1";
QString m_model = "qwen-max";
QList<QJsonArray> m_toolCallPieces;
bool m_isFunction = false;
protected:
ChatPro();
~ChatPro();
signals:
void receiveContent(QString);
void respEnd(QJsonArray, bool);
};
#endif // CHATPRO_H