获取本机电脑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();
    });

}

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐