异步调用OpenAI LLM的示例代码

释放双眼,带上耳机,听听看~!
本文介绍了如何使用Python的asyncio库实现异步调用OpenAI LLM的示例代码,并提供了同时并发调用多个LLM的效果。

引言:

前四篇都是最基础的,适合稍微有些编程基础的人,已经能够做出个人的gpt应用。但是如果想要实现更加复杂或者体量更大的服务,就需要真正的程序员来了。之后的文章都是写给程序员的。理解难度倒是不大,但是需要有技术背景。但是难度越大,收获越大。

先抛出一个问题,

在实际开发中,我们经常遇到的一个问题就是:需要同时执行多个任务。如果使用同步调用,需要等待每个任务执行完成才能执行下一个任务,而使用异步调用可以同时执行多个任务,提高程序的并发性能。如果你的gpt应用同时被多个人使用,那么就不得不考虑异步调用的问题了。

在LangChain中,使用asyncio库可以为LLMs提供异步支持。

异步支持特别适用于同时调用多个LLM的情况,因为这些调用是网络绑定的。当前支持OpenAI、PromptLayerOpenAI、ChatOpenAI和Anthropic等模型的异步支持,但在未来会增加对其他LLM的异步支持。

你可以使用agenerate方法异步调用OpenAI LLM。下面是使用该方法异步调用OpenAI LLM的示例代码:


# 引入time和asyncio模块
import time
import asyncio
# 引入OpenAI类
from langchain.llms import OpenAI


# 定义异步函数async_generate,该函数接收一个llm参数
async def async_generate(llm):
    # 调用OpenAI类的agenerate方法,传入字符串列表["Hello, how are you?"]并等待响应
    resp = await llm.agenerate(["Hello, how are you?"])
    # 打印响应结果的生成文本
    print(resp.generations[0][0].text)


# 定义异步函数generate_concurrently
async def generate_concurrently():
    # 创建OpenAI实例,并设置temperature参数为0.9
    llm = OpenAI(temperature=0.9)
    # 创建包含10个async_generate任务的列表
    tasks = [async_generate(llm) for _ in range(10)]
    # 并发执行任务
    await asyncio.gather(*tasks)


# 主函数
# 如果在Jupyter Notebook环境运行该代码,则无需手动调用await generate_concurrently(),直接在下方执行单元格即可执行该函数
# 如果在命令行或其他环境下运行该代码,则需要手动调用asyncio.run(generate_concurrently())来执行该函数
await generate_concurrently()

上面的示例代码中,我们使用asyncio.gather()方法同时运行10个异步生成任务,实现了同时并发地调用多个LLM的效果。

你也可以使用以下代码串行地调用OpenAI LLM:


def generate_serially():

    llm = OpenAI(temperature=0.9)

    for _ in range(10):

        resp = llm.generate(["Hello, how are you?"])

        print(resp.generations[0][0].text)

generate_serially()

但是,相较于异步调用,串行调用的效率较低。

你可以通过下面的代码来比较异步调用和串行调用的效率差别:


import time

s = time.perf_counter()

await generate_concurrently() 

elapsed = time.perf_counter() - s

print('33[1m' + f"Concurrent executed in {elapsed:0.2f} seconds." + '33[0m')

s = time.perf_counter()

generate_serially()

elapsed = time.perf_counter() - s

print('33[1m' + f"Serial executed in {elapsed:0.2f} seconds." + '33[0m')

结果表明,使用并发异步方法调用的时间要比串行调用时间快很多。

Concurrent executed in 1.39 seconds.#并行调用
Serial executed in 5.77 seconds.#串行调用

今天就到这里,明天继续连载。

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

向ChatGPT询问的艺术

2023-12-22 19:33:14

AI教程

ChatGPT:人工智能界的超级大网红

2023-12-22 19:40:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索