简单解释一下使用LLM的API的时候,Streaming和非Streaming的差别。
打个比方,如果LLM是水厂,你需要一瓶水:
用Streaming的模式,就相当于你从水厂拉了一根水管,现在你需要一瓶水,拧开水龙头,通过水管就马上给你流水了,你那个瓶子接水,等水慢慢攒够一瓶。
不用Streaming的方式,就相当于你和水厂之间有一个快递通道,你告诉水厂需要一瓶水后,水厂在它那边用一个瓶子给你现接一瓶水,接满一瓶之后马上快递给你。通常你要多等一会,但是直接就是一整瓶水给你,你不需要自己去找瓶子接水。
回到具体的应用场景,像ChatGPT官方聊天程序这样,就是往外打字蹦字的效果,就是Streaming,LLM那边生成一点,马上就发到网页端,你马上就可以看到新生成的内容了。
像有些第三方聊天应用,你发完消息,它显示一个Loading动画,突然就一次性给你生成所有消息,这就不是Streaming。
那么什么情况下你选Streaming什么情况下不需要Streaming呢?
在一些应用场景下,你希望快速看到结果,并且你不需要等待完整的结果就能用,比如聊天,那么就可以用Streaming,这样用户马上就可以看到输出而不需要等完整的结果。
对于一些你必须等待完整结果才能有效的,例如你要LLM返回JSON格式的结果,比如Function Calling,这种情况下,最好就是不用Streaming,直接返回完整的JSON数据最好。因为用Streaming的话,只要你没收到最后一个字符,你还是无法解析这个JSON格式。