找回密码
 会员注册
查看: 42|回复: 0

AsyncOpenAIvsOpenAI在异步函数中调用OpenAIAPI进行流式输出

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
73815
发表于 2024-9-3 10:46:18 | 显示全部楼层 |阅读模式
目录在异步函数中使用AsyncOpenAI与直接从openai导入OpenAI的区别1.背景介绍1.1同步与异步编程1.2OpenAIAPI2.使用`AsyncOpenAI`的示例3.与直接导入`OpenAI`的区别3.1同步操作与异步操作3.2性能与效率3.3代码结构3.4并发性能3.5事件循环兼容性:4.结论5.补充在异步函数中使用AsyncOpenAI与直接从openai导入OpenAI的区别在现代的Python编程中,异步编程已成为提高应用程序效率和响应性的关键技术。尤其是在处理I/O操作密集的任务时,使用异步编程可以显著提高程序的响应速度和性能。在这篇文章中,我们将讨论如何在异步函数asyncdefapi_predict()中使用AsyncOpenAI来完成任务,并对其与直接从openai库中导入OpenAI的区别进行分析。1.背景介绍1.1同步与异步编程同步编程是指程序在执行一个任务时,必须等待该任务完成才能继续执行下一个任务。相反,异步编程允许程序在等待某个任务完成的同时,继续执行其他任务,从而提高程序的效率和响应速度。1.2OpenAIAPIOpenAI提供了一套强大的API,可以用于生成文本、回答问题等任务。在Python中,我们通常使用openai库来与OpenAIAPI进行交互。随着异步编程的普及,OpenAI也推出了支持异步操作的AsyncOpenAI。2.使用AsyncOpenAI的示例下面是一个使用AsyncOpenAI进行异步API调用的示例代码:fromopenaiimportAsyncOpenAIopenai_api_base="http://192.168.10.61:7862/v1"openai_api_key="EMPTY"client=AsyncOpenAI(api_key=openai_api_key,base_url=openai_api_base)asyncdefapi_predict(conversation):response=awaitclient.chat.completions.create(model="Qwen",messages=conversation,stream=True)asyncforchunkinresponse:content=chunk.choices[0].delta.contentifcontent:yieldcontent12345678910111213141516在这个示例中,我们首先从openai库中导入了AsyncOpenAI,然后配置了API的基本信息。接下来,我们定义了一个异步函数api_predict(),该函数使用await关键字等待API响应,并通过异步迭代器asyncfor来处理响应中的数据块。3.与直接导入OpenAI的区别3.1同步操作与异步操作直接从openai库中导入OpenAI适用于同步操作,例如:fromopenaiimportOpenAIopenai_api_base="http://192.168.10.61:7862/v1"openai_api_key="EMPTY"client=OpenAI(api_key=openai_api_key,base_url=openai_api_base)defapi_predict(conversation):response=client.chat.completions.create(model="Qwen",messages=conversation)forchunkinresponse:content=chunk.choices[0].delta.contentifcontent:yieldcontent123456789101112131415在这个示例中,api_predict()函数是同步的,意味着在API调用完成之前,函数会阻塞当前线程。最终返回全部内容,输出非流式。等同于fromopenaiimportOpenAIclient=OpenAI()defapi_predict():response=client.chat.completions.create(model="Qwen",messages=conversation)returnresponse.choices[0].message.content123456789103.2性能与效率使用AsyncOpenAI进行异步调用可以提高性能和效率,特别是在处理大量I/O操作时。异步编程允许程序在等待API响应的同时,执行其他任务,从而避免了线程阻塞。3.3代码结构异步代码与同步代码在结构上有所不同。异步代码使用async和await关键字,并且通常与异步框架(如asyncio)一起使用。这要求开发者对异步编程有一定的了解和掌握。3.4并发性能在处理多个请求时,AsyncOpenAI可以显著提高性能。3.5事件循环兼容性:AsyncOpenAI可以无缝集成到使用asyncio的应用中。4.结论对于需要高并发或实时数据流的应用,AsyncOpenAI是更好的选择。它提供了更大的灵活性和更好的性能,特别是在处理多个API调用或流式响应时。然而,对于简单的单次调用或不需要异步功能的脚本,传统的OpenAI客户端可能更为简单直接。5.补充在全局使用AsyncOpenAI的状态下,批处理输出(Batchoutput:是指将所有数据处理完毕后一次性输出全部结果,而不是像流式输出那样逐步、实时地输出数据)也称非流式输出是无法正常获取到输出的,获取到的是所以在AsyncOpenAI使用流式输出时还想同时使用非流式输出,参考下面的代码:asyncdefextract_summary(text):tokenizer=AutoTokenizer.from_pretrained('/home/hyh/model/Qwen2-7B-Instruct')openai_api_base="http://192.168.10.61:7862/v1"openai_api_key="EMPTY"client=OpenAI(api_key=openai_api_key,base_url=openai_api_base,)ifisinstance(text,str):iflen(text)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-13 17:46 , Processed in 1.222623 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表