Ollama是开源本地大模型运行工具,支持Windows/macOS/Linux离线运行Qwen、DeepSeek等模型,全程数据不外传,提供OpenAI兼容API;2026年最新v0.32.x版优化显卡加速与内存调度,降低硬件门槛。

用 PHP 8.4 搭配 Ollama 实现离线问答功能,核心是让 PHP 后端能安全、稳定地调用本地运行的 Ollama 模型服务(如 deepseek-r1:8b 或 qwen2.5:7b),不依赖网络、不上传数据。整个流程不需大模型 API 密钥,也不走云端,真正私有可控。
一、确认 Ollama 已就绪并暴露 HTTP 接口
Ollama 默认监听 http://127.0.0.1:11434,这是 PHP 调用的基础。请先验证:
- 终端执行
ollama serve(确保后台服务已启动) - 运行
curl http://localhost:11434/api/tags,应返回 JSON 列出已拉取的模型(如deepseek-r1:8b) - 若使用 Docker 部署 Ollama,请确认容器映射了
-p 11434:11434,且 PHP 运行环境能访问该地址(例如同宿主机或正确配置了 Docker 网络)
二、PHP 8.4 项目中发起模型请求
无需额外扩展,纯原生 cURL 即可完成。推荐封装一个轻量类,例如:
<?php
class LocalLLM {
private string $baseUrl = 'http://127.0.0.1:11434';
public function chat(string $model, string $prompt, array $options = []): array
{
$payload = array_merge([
'model' => $model,
'prompt' => $prompt,
'stream' => false,
], $options);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->baseUrl . '/api/chat');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode !== 200 || !$response) {
throw new RuntimeException("Ollama request failed: $httpCode");
}
return json_decode($response, true);
}
}
?>
立即学习“PHP免费学习笔记(深入)”;
调用示例:
$llm = new LocalLLM();
try {
$result = $llm->chat('deepseek-r1:8b', '请用中文总结:人工智能在医疗影像分析中的三个关键应用');
echo $result['message']['content'] ?? '无响应';
} catch (Exception $e) {
echo '模型调用失败:' . $e->getMessage();
}
三、接入知识库:PHP 处理文档 + 向量检索(离线版)
纯问答只是起点,要支持“基于你自己的 PDF/Word/Markdown 文档问答”,需补充两步:
-
文档解析与分块:用 PHP 原生库(如
phpoffice/phpword、setasign/fpdi解析 Word/PDF),或更轻量方式——将知识文档统一转为 UTF-8 纯文本,按段落或 256 字符切片存入 SQLite 或 JSON 文件 -
语义匹配(无向量库也可行):对用户问题,用 PHP 的
similar_text()或levenshtein()粗筛最相关片段;进阶可用php-ml的 TF-IDF + 余弦相似度(完全离线,不联网) -
组合提示(RAG):把匹配到的 2–3 个知识片段拼进 prompt,例如:
"根据以下资料回答问题:\n[片段1]\n[片段2]\n问题:{用户输入}"
四、部署注意事项(PHP 8.4 + 离线环境)
确保生产环境长期稳定运行:
- Ollama 模型加载后常驻内存,建议用
systemd或supervisord守护其进程,避免意外退出 - PHP 执行时间需放宽(模型响应可能达 5–20 秒),在
php.ini中设max_execution_time = 120 - 禁用 PHP 的
allow_url_fopen不影响 Ollama 调用,因为 cURL 访问的是本地 HTTP,不是远程 URL - 如需并发处理多个问答请求,Ollama 支持多会话,但注意显存/内存压力——
deepseek-r1:8b在 16GB 内存设备上建议限制并发 ≤ 2



















