qt 调用本地Ollama 的模型
·
获取本机电脑Ollama 的所有模型
getOllamaComboBoxWithModels()
{
QProcess process;
process.start("ollama list"); // 启动ollama list命令
if (!process.waitForFinished()) {
// 处理错误情况
return;
}
QString output = process.readAllStandardOutput(); // 读取命令输出
QStringList models = output.split("\n"); // 假设每行一个Model名称,按行分割
qDebug() << "output" << output;
// 清除ComboBox中现有的项
ui->comboBox->clear();
// 将Model名称添加到ComboBox中
foreach (const QString &model, models) {
ui->comboBox->addItem(model);
}
}
你需要根据Ollama提供的API接口来设置HTTP请求。以下是一些基本的API接口和它们的用途:
- 流式生成文本补全:
/generate- 请求方法:
POST - 参数:
model(必填):模型名称。prompt(必填):生成文本所用的提示词。stream(必填):设置为true,启用流式传输。
- 请求方法:
- 生成对话补全:
/chat- 请求方法:
POST - 参数:
model(必填):模型名称。messages(必填):对话的消息列表,按顺序包含历史对话,每条消息包含role和content。
- 请求方法:
- 生成文本嵌入:
/embed- 请求方法:
POST - 参数:
model(必填):生成嵌入的模型名称。input(必填):文本或文本列表,用于生成嵌入。
- 请求方法:
调用Ollama Api接口
ollamaChat()
{
// 创建网络请求管理器
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
// 设置请求的URL和端口
QUrl url("http://localhost/api/chat");
// 创建请求对象
QNetworkRequest request(url);
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
// 设置POST请求的数据
QJsonObject json;
json["model"] = ui->comboBox->currentText();
// 创建QJsonArray来存储messages数组
QJsonArray messages;
// 创建第一个message对象
QJsonObject message1;
message1["role"] = "system";
message1["content"] = ui->textEdit->toPlainText();
// 创建第二个message对象
QJsonObject message2;
message2["role"] = "user";
message2["content"] = " ";
// 将message对象添加到messages数组中
messages.append(message1);
messages.append(message2);
json["messages"] = messages;
json["stream"] = false;
QJsonDocument doc(json);
QByteArray data = doc.toJson();
// 发送POST请求
QNetworkReply *reply = manager->post(request, data);
// 连接信号槽以处理响应
connect(reply, &QNetworkReply::finished, this, [this,reply]() {
if (reply->error() == QNetworkReply::NoError) {
QString response = reply->readAll();
QJsonDocument doc = QJsonDocument::fromJson(response.toUtf8());
QJsonObject obj = doc.object();
// 提取message对象
QJsonObject messageObj = obj["message"].toObject();
// 提取content字段
QString content = messageObj["content"].toString();
this->ui->textEdit_2->setPlainText(content);
qDebug() << "Response111:" << response;
qDebug() << "content:" << content;
// 处理响应数据
} else {
qDebug() << "Response:" <<reply->readAll();
// 处理错误
}
reply->deleteLater();
});
}
更多推荐


所有评论(0)