Stream DATA From openai GPT-3 API using php

news/2024/9/18 14:45:46/ 标签: ai, php, streaming, openai api
aidu_pl">

题意:“使用 PHP 从 OpenAI GPT-3 API 流式传输数据”

问题背景:

I'm having trouble with the OpenAI API, Basically what I'm trying to do is stream each data node that is streamed back from the openai API response and output each data node one at a time as it streams in from the API call, but I have no clue how this is done, I researched for hours and can not find any information on how this can be achieved with PHP.

“我在使用 OpenAI API 时遇到了问题。基本上,我想要做的是流式处理从 OpenAI API 响应中返回的每个数据节点,并在从 API 调用中接收到时逐个输出这些数据节点,但我不知道如何实现这一点。我研究了好几个小时,却找不到任何关于如何使用 PHP 实现这一点的信息。”

How can I get my code to output each data node in real time as the API streams in the data?

The Following is the best I can come up with, it outputs all the data at once after the call is complete, but It does not stream in the data.

“如何让我的代码在 API 流式传输数据时实时输出每个数据节点?

以下是我能想到的最好办法,但它在调用完成后一次性输出所有数据,而不是实时流式传输数据。”

php">function openAI(){$OPENAI_API_KEY="API_KEY_GOES_HERE";$user_id="1";  //  users id optional$prompt="tell me what you can do for me.";$temperature=0.5;  // 1 adds complete randomness  0 no randomness 0.0$max_tokens=30;$data = array('model'=>'text-davinci-002','prompt'=>$prompt,'temperature'=>$temperature,'max_tokens'=>$max_tokens,'top_p'=>1.0,'stream'=>TRUE,// stream back response'frequency_penalty'=>0.0,'presence_penalty'=>0.0,'user' => $user_id);$post_json= json_encode($data);$ch = curl_init();curl_setopt($ch, CURLOPT_URL, 'https://api.openai.com/v1/completions');curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);curl_setopt($ch, CURLOPT_POSTFIELDS, $post_json);$headers = array();$headers[] = 'Content-Type: application/json';// $headers[] = 'Content-Type: text/event-stream';$headers[] = "Authorization: Bearer $OPENAI_API_KEY";curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);$result = curl_exec($ch);return $result;curl_close($ch);
}echo openAI();

问题解决:

I ended up solving my problem. Hopefully my answer will help someone in the future.

I made the following additions to my code. This simple logic makes what I inquired about work.

“我最终解决了我的问题。希望我的答案能在未来帮助到其他人。

我在代码中做了以下添加。这种简单的逻辑实现了我所询问的功能。”

php">// This should be at the very top, alternatively can be set in you php.ini file
@ini_set('zlib.output_compression',0);
@ini_set('implicit_flush',1);
// This function discards the contents of the topmost output buffer and turns off this output buffering.
@ob_end_clean(); 

The following curl_setopt should also be added. I personally added it on the line after CURLOPT_POSTFIELDS

“还应添加以下 curl_setopt。我个人是在 CURLOPT_POSTFIELDS 之后的一行添加的。”

php">curl_setopt($ch, CURLOPT_WRITEFUNCTION, function($curl, $data) {# str_repeat(' ',1024*8) is needed to fill the buffer and will make streaming the data possibleecho $data.str_repeat(' ',1024*8);return strlen($data); 
});

Alternatively instead of adding str_repeat(' ',1024*8) you can shut off buffering in your web servers config file, e.g.(nginx.conf)

“或者,可以不添加 str_repeat(' ',1024*8),而是在你的 Web 服务器配置文件(如 nginx.conf)中关闭缓冲。”

gzip off;
proxy_buffering off;


http://www.ppmy.cn/news/1516984.html

相关文章

综合评价 | 基于层次-熵权-变异系数-正态云组合法的综合评价模型(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 综合评价 | 基于层次-熵权-变异系数-正态云组合法的综合评价模型(Matlab) AHP层次分析法是一种解决多目标复杂问题的定性和定量相结合进行计算决策权重的研究方法。该方法将定量分析与定性分析…

Qt:玩转QPainter序列一

前言 最近想潜心研究一下QPainter这个类,最好把QPainter所有的函数都敲一遍,特地记录一下。 在说QPainter之前我们需要了解两个非常重要的东西 第一个坐标系 我用两张图来表示 代码实操的结果 更加详细的坐标系内容请看我的另一篇博客 第二个是有…

VCTP(Visual Chain-of-Thought Prompting for Knowledge-Based Visual Reasoning)论文

目录 摘要介绍相关工作方法总体模型细节 实验 摘要 知识型视觉推理仍然是一个艰巨的任务,因为它不仅要求机器从视觉场景中解释概念和关系,而且还需要将它们与外部世界知识联系起来,对开放世界问题进行推理链。然而,以前的工作将视…

【区块链 + 智慧文旅】鲜檬内容生态平台 | FISCO BCOS应用案例

基于鲜檬(虎彩集团旗下的“鲜檬摄影有限公司”,简称鲜檬)的业务规划,除了婚拍摄影外,以定制化家纺、 餐具、陶瓷品为主的产品诉求也日渐增加。为了支撑庞大的业务体量,设计能力的连接和整合迫在眉睫。同时&…

[C++番外] 抛异常

一、C语言的时候我们怎么判断错误的呢? C语言的错误处理机制: 终止程序,如assert,缺陷:用户难以接受。如发生内存错误,除0错误时就会终止程序。返回错误码,缺陷:需要程序员自己去查…

如何下载jmeter旧版本

如何下载jmeter旧版本 推荐先用旧版本做好测试基本操作,因为高版本不适合做压力测试,需要证书,有点麻烦。 1.百度或直接打开jmeter官网:https://jmeter.apache.org/ 2.向下拖到Archives一栏,点击Apache Jmeter archi…

SpringCache源码解析(一)-Annotation

〇、常用注解 包地址注解名作用域作用org.springframework.cache.annotationCacheConfig类级别s设置缓存的公共配置Cacheable方法级别缓存读取操作CacheEvict方法级别缓存失效操作CachePut方法级别缓存更新操作Caching方法级别h混合读取、失效、更新操作CacheConfig方法级别统…

springboot-从0开始创建一个starter

创建一个Spring Boot Starter是一个很好的方式来封装常用的配置和依赖,以便在多个项目中重用。以下是一个简单的指南,教你如何开发一个自己的Spring Boot Starter。 一、创建步骤 1. 创建项目 首先,你需要创建一个Maven或Gradle项目。这里我…

QMT量化+通道快速,完美结合应对市场!

关注韭菜修养(同名全拼音),投资道路我们一起成长!第一:国内的量化交易软件众多,我们可以参考这几个维度①全内存极速交易:全内存交易,单笔延时<1ms满足量化高频交易客户对…

谷粒商城实战笔记-249-商城业务-消息队列-RabbitMQ工作流程

文章目录 一,基本概念二,消息从producer到consumer的过程 一,基本概念 RabbitMQ是一个流行的开源消息代理软件,它实现了高级消息队列协议(AMQP)。以下是RabbitMQ的一些基本概念: Broker&#x…

3 pytest Fixture

目录 3.1 通过 conftest.py 共享 fixture3.2 使用 fixture 执行配置及销毁逻辑3.3 使用 --setup-show 回溯 fixture 的执行过程3.4 使用 fixture 传递测试数据3.5 使用多个 fixture3.6 指定 fixture 作用范围3.7 使用 usefixtures 指定 fixture3.8 为常用 fixture 添加 autouse…

windows C++- WRL 使用计时器

由于WRL技术已经不作为主流继续发展,所以这里这个文档主要是收录WRL作为一些特殊情况下的查阅和理解windows体系开发的技术脉络,故本文档仅仅演示各项关键技术,例如本文档如何使用 Windows 运行时 C 模板库 (WRL) 启动异步操作并在操作完成时…

.ipynb文件:交互式 Jupyter Notebook

Python 接口文件(带有扩展名的文件.pyi),或称为 Python 存根文件,在使用类型提示增强 Python 代码方面发挥着至关重要的作用。 当你遇到名称以 .ipynb、.pyi、.pyc 等结尾的 Python 文件时,你是否会感到困惑&#xff…

asp.net core在win上的发布和部署

一、asp.net core两种发布方式 1、两个发布方式——【框架依赖发布】和【独立发布】 2、两种发布方式的差别 二、发布的详细过程 1、【生成】->【发布】 2、框架依赖发布 设置发布参数,然后进行发布 发布好的文件,把它们放到一个新的目录文件夹里 …

LLaMA Factory微调Llama3模型

LLaMA Factory是一款开源低代码大模型微调框架,集成了业界最广泛使用的微调技术,支持通过Web UI界面零代码微调大模型,目前已经成为开源社区内最受欢迎的微调框架。 💥GPU推荐使用24GB显存的A10(ecs.gn7i-c8g1.2xlarg…

百度:未来or现在 顾此失彼?

用AI押注未来,却丢了现在 国内AI先行者百度 走到哪了? 作为这个星球最热门的概念,AI无疑是个好故事,不只是百度,美股的一众科技公司几乎都在讲述自己的AI投入及发展成果,市值也随着AI预期坐过山车。而市场…

css基础学习总结(一)

文章目录 一. 选择器1. 标签选择器2. 类选择器3. ID选择器4. 分组选择器5. 派生与子元素选择器6. 属性选择器7. 伪类选择器8. 伪对象选择器9. 选择器的优先级别css优先级 的 6大分类 一. 选择器 1. 标签选择器 选择器例子描述elementp/div/span选择所有含有指定标签的元素 &…

神经网络参数个数的计算

计算神经网络中参数的个数取决于网络的结构,包括层的类型和每层的节点数。以下是一些常见层类型的参数计算方法: 全连接层(Fully Connected Layer): 参数个数 输入节点数 输出节点数 输出节点数(偏置项…

什么是数据库 DevOps?

原文地址 https://www.bytebase.com/blog/what-is-database-devops/ 在深入研究数据库 DevOps 之前,先回顾一下什么是 DevOps。它没有统一的定义,但我们知道它起源于软件开发方法与部署和运维的结合。 大约 2007 年和 2008 年,软件开发和 I…

中国高校发表科技论文及著作数量数据集(2009-2022年)

中国各地区的高校科技产出数据,包括27个指标,科技论文发表、著作出版、专利申请、专利转让、国家标准项等。这些指标综合反映了各地区高校在科学研究和技术开发方面的活跃程度及创新能力 一、数据介绍 数据名称:中国地区高校发表科技论文、…