You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何借助MindsDB实现OpenAI基于自有问答表作答(PHP环境)

实现方案:PHP + MindsDB + OpenAI 基于自有问答表回答问题

一、先解决MindsDB模型创建失败问题(核心前提)

要让OpenAI基于你的问答表回答,首先得在MindsDB中完成数据连接和RAG模型创建:

    1. 连接你的业务数据库
      在MindsDB Studio或CLI中执行SQL,将你的问答数据表接入MindsDB(以MySQL为例):
CREATE DATABASE my_qna_db
WITH ENGINE = 'mysql',
PARAMETERS = {
  "host": "你的数据库IP",
  "port": 3306,
  "user": "数据库用户名",
  "password": "数据库密码",
  "database": "存储问答表的库名"
};

执行后验证连接:SELECT * FROM my_qna_db.your_qna_table LIMIT 1;,能返回数据则连接成功。

    1. 创建OpenAI驱动的问答模型
      先确保MindsDB已配置OpenAI密钥(可在MindsDB设置页或通过SQL配置),然后创建模型:
CREATE MODEL mindsdb.qna_chatbot
PREDICT answer
USING
  engine = 'openai',
  model_name = 'gpt-3.5-turbo',
  api_key = '你的OpenAI API密钥',
  prompt_template = '基于以下已知问答内容回答用户问题:{{your_qna_table.question}} -> {{your_qna_table.answer}}。用户问题:{{question}}。请严格基于提供的内容回答,不要添加外部信息。',
  question_column = 'question',
  answer_column = 'answer';

替换your_qna_table为你的数据表名,执行后等待模型状态变为complete,可通过SELECT * FROM mindsdb.models WHERE name='qna_chatbot';查看状态。

二、PHP服务端调用MindsDB实现问答

PHP端可通过两种方式调用MindsDB模型,任选其一即可:

方式1:通过MySQL协议调用(用PDO)

MindsDB兼容MySQL协议,直接用PDO连接调用:

<?php
// 连接MindsDB(默认端口47335)
$dsn = 'mysql:host=localhost;port=47335;dbname=mindsdb';
$username = 'mindsdb';
$password = ''; // 若MindsDB配置了密码则填写

try {
    $pdo = new PDO($dsn, $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // 获取用户问题(示例从POST获取,可根据业务调整)
    $userQuestion = $_POST['user_question'] ?? '';
    if (empty($userQuestion)) {
        throw new Exception('请输入问题');
    }

    // 调用MindsDB模型生成回答
    $sql = "SELECT answer FROM mindsdb.qna_chatbot WHERE question = :question";
    $stmt = $pdo->prepare($sql);
    $stmt->bindParam(':question', $userQuestion);
    $stmt->execute();

    $result = $stmt->fetch(PDO::FETCH_ASSOC);
    $answer = $result['answer'] ?? '暂无匹配的回答内容';

    // 返回JSON结果给前端
    header('Content-Type: application/json');
    echo json_encode(['answer' => $answer]);

} catch(PDOException $e) {
    header('Content-Type: application/json');
    echo json_encode(['error' => '服务端错误:' . $e->getMessage()]);
} catch(Exception $e) {
    header('Content-Type: application/json');
    echo json_encode(['error' => $e->getMessage()]);
}
?>

方式2:通过HTTP API调用(用cURL)

若更习惯HTTP请求,直接调用MindsDB的API接口:

<?php
$userQuestion = $_POST['user_question'] ?? '';
if (empty($userQuestion)) {
    echo json_encode(['error' => '请输入问题']);
    exit;
}

$apiUrl = 'http://localhost:47334/api/sql/query'; // MindsDB默认HTTP端口47334
$payload = [
    'query' => "SELECT answer FROM mindsdb.qna_chatbot WHERE question = '$userQuestion'"
];

$ch = curl_init($apiUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));

$response = curl_exec($ch);
curl_close($ch);

$result = json_decode($response, true);
$answer = isset($result['data'][0]['answer']) ? $result['data'][0]['answer'] : '暂无匹配的回答内容';

header('Content-Type: application/json');
echo json_encode(['answer' => $answer]);
?>

三、关键注意事项

  • 确保MindsDB服务正常运行,端口(47335/47334)未被防火墙拦截
  • OpenAI API密钥需有可用额度,且模型权限正常
  • 问答表的字段名要与模型创建时的question_column、answer_column严格对应
  • 若模型创建仍失败,查看MindsDB日志(默认路径/var/log/mindsdb/)排查具体错误

内容的提问来源于stack exchange,提问作者MANIKANDAN A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 16:42:46