php 8.0 无法直接运行 mistral 模型,需通过 api 调用本地 ollama 部署的 mistral 服务(如 ollama run mistral:7b-instruct-v0.2),使用 curl 发起 http 请求,注意 messages 格式、json 头、超时与错误处理,并确保安全隔离与输入输出过滤。

一、先让 Mistral 跑起来(本地或服务器)
推荐用 Ollama 快速启动(比手动搭 vLLM/Llama.cpp 更轻量,且支持 Mistral 系列):
- 安装 Ollama(Windows/macOS/Linux 均支持,见官网一键脚本)
- 拉取 Mistral 模型(例如开源兼容版):
ollama run mistral或更明确的ollama run mistral:7b-instruct-v0.2 - 默认监听
http://127.0.0.1:11434,API 路径为/api/chat(流式)或/api/generate(非流式) - 测试是否通:用 curl 发个请求,确认返回 JSON 响应,不是 404 或 connection refused
二、PHP 8.0 页面调用 Mistral API
不需要扩展或编译模块,纯 cURL 即可。关键注意三点:
- Content-Type 必须是 application/json,且 body 是合法 JSON(含 model、messages 数组)
- Mistral 的
/api/chat接口要求messages是带 role(user/system/assistant)的对象数组,不能只传 prompt 字符串 - 建议加超时(
CURLOPT_TIMEOUT_MS => 30000)和错误处理,避免页面卡死
示例代码片段(save as ask.php):
<?php if ($_POST['q'] ?? false) {
$prompt = trim($_POST['q']);
$url = 'http://127.0.0.1:11434/api/chat';
$data = [
'model' => 'mistral:7b-instruct-v0.2',
'messages' => [['role' => 'user', 'content' => $prompt]],
'stream' => false
];
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($data),
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT_MS => 30000
]);
$res = curl_exec($ch);
$err = curl_error($ch);
curl_close($ch);
if ($err) {
echo "<p>请求失败:$err</p>";
} else {
$json = json_decode($res, true);
echo "<p><strong>回答:</strong>" . htmlspecialchars($json['message']['content'] ?? '无响应') . "</p>";
}
}
?>
三、安全与可用性补漏
上线前至少检查这几项:
- 不要把 Ollama 暴露到公网(默认只监听 127.0.0.1),如需远程调用,加 Nginx 反向代理 + Basic Auth 或 IP 白名单
- PHP 页面禁用
display_errors,防止泄露路径或配置;对用户输入做htmlspecialchars()输出,防 XSS - 若并发稍高(比如 >5 QPS),Ollama 默认单线程可能响应慢,可在启动时加
--num_ctx 4096 --num_threads 4提升吞吐 - 考虑加简单缓存(如 APCu 或文件缓存),对相同问题 5 分钟内不重复请求模型
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











