PHP 流式调用 ollama 示例
时间: 2025-03-30 21:00:46 浏览: 45
### PHP 调用 Ollama 流式处理示例
在 PHP 中实现对 Ollama API 的流式调用,可以利用 `curl` 库来发送 HTTP 请求并实时读取返回的数据。Ollama 提供了一个支持流式传输的接口,通过设置请求头中的参数控制是否启用流模式。
以下是基于给定引用内容的一个完整的 PHP 实现:
#### 代码示例
```php
<?php
function streamCallOllama($url, $data) {
// 初始化 cURL 会话
$ch = curl_init();
// 设置目标 URL 和 POST 数据
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
// 添加必要的头部信息
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Accept: text/event-stream' // 启用 SSE (Server-Sent Events) 支持流式数据
]);
// 不要自动关闭连接,允许持续接收数据
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
// 输出接收到的内容
curl_exec($ch);
// 处理完成后关闭 cURL 连接
curl_close($ch);
}
// 示例:调用 Ollama 接口
$url = "http://localhost:11434/api/generate";
$data = [
"prompt" => "Once upon a time",
"stream" => true // 开启流式传输
];
// 执行函数
streamCallOllama($url, $data);
?>
```
上述代码实现了向指定 URL 发送带有 `"stream": true` 参数的 POST 请求,并通过事件流协议(SSE)实时获取服务器返回的结果[^1]。
---
### 解析与说明
1. **流式传输开启**
在 `$data` 数组中设置了 `"stream": true`,这告诉 Ollama API 返回的是一个连续的 JSON 响应流而不是一次性完成整个响应。
2. **cURL 配置**
使用了 `CURLOPT_HTTPHEADER` 来定义请求头,其中特别指定了 `'Accept: text/event-stream'`,这是为了兼容 Server-Sent Events 协议,从而能够逐块解析来自服务器的数据。
3. **实时输出**
将 `CURLOPT_RETURNTRANSFER` 设为 `false` 是为了让脚本直接打印从远程主机接收到的信息而无需缓存全部内容后再统一显示。
4. **性能优化建议**
如果计划频繁访问此功能,则可能还需要考虑超时时间 (`timeout`) 或者错误重试机制等问题;另外对于生产环境而言,应当加入更完善的异常捕获逻辑以便更好地应对网络波动等情况。
---
阅读全文
相关推荐


















