大数跨境

关于大模型实现流式输出结构化数据的方案——网络流与模型流式输出

关于大模型实现流式输出结构化数据的方案——网络流与模型流式输出 AI探索时代
2025-12-18
1
导读:网络流与模型流式输出同出一门,没有本质上的区别

 网络流与模型流式输出同出一门,没有本质上的区别。



在大模型应用中,结构化数据在其中扮演着重要角色,特别是在智能体的实现中;但是在大部分场景下,都是让模型一次性输出所有结构化数据,如JSON对象或数组。


但是,如果需要流式输出结构化数据应该怎么实现? 


先说这个需求产生的原因,毕竟抛开场景谈技术就是耍流氓;之所以有这个需求的原因是在一个生成结构化数据的场景中,需要在前端对数据进行渲染,但由于响应时间过长导致用户体验不好,所以想通过流式输出的方式提升用户体验。






流式输出结构化数据




流式输出结构化数据的难点不在于流式输出,而在于对输出数据的解析;在一般情况下对结构化数据进行处理,都是针对完整结构的数据,如果数据结构不完整,不论是多了还是少了都会导致解析出错。


但在流式输出中,我们无法控制模型具体的输出过程,因此只能对输出的数据进行解析处理,才能获取我们想要的数据。


但我们都知道,针对这种情况,对数据的处理需要考虑很多种情况,如结构化数据的开始与结束,输出异常数据,数据分割等。


刚开始面对这种需求,作者都感觉无从下手,但想想既然需求是合理的,那么从理论上来说就应该能够实现,即使实现的过程比较复杂。


对有过网络底层接口编程经验的来说,这种问题可能就没那么复杂了,毕竟网络的流式传输和大模型的输出过程不能说完全一样,只能说毫无区别,只不过输出对象不同而已,前者来自网络,后者来自模型。


所以,这个问题就可以借助于网络编程的思想来解决。


在底层网络编程中,数据是通过比特在网络中传播的,然后在接收端需要对网络数据包进行拆解或截取拼接,然后组装成完整的数据格式,再交由上层应用处理。如JSON,html,xml等格式化数据,亦或者字符串等非结构化数据都是通过这种方式传输和拼接的。


所以,在大模型流式输出中也是如,如果大模型输出非结构化数据,那么只需要获取模型流式输出结果,然后组装成json传交给前端解析即可;而如果针对结构化数据,这时就需要后端对流式输出的内容进行解析,然后获取到完整数据格式之后,再传给前端。


这样就可以实现模型流式输出,前端进行流式渲染的效果,只不过中间需要经过一层处理。


但是从理论上来说,虽然看起来好像就那么回事,但在实际处理过程中就比较复杂了;特别是随着数据结构的复杂,其解析难度也呈几何式增长。


如,json串一般是由{}包裹的,而如果是数组,还需要[]符合,再加上引号,换行,等多种复杂结构;这时就需要对选择合适的数据结构进行处理;如栈结构,在遇到{或[符号时对数据进行入栈,而遇到}或]结构时对数据进行出栈。


这样就可以保证结构化数据的结构完整性。


总之,结构化数据在大模型应用中扮演着重要角色,但一般情况下会使用同步输出的方式,而不会选择流式输出,但如果真的遇到这种需求我们也应该有一个大概的思路才行。






【声明】内容源于网络
0
0
AI探索时代
专注AI工程化落地,让你的技术不再纸上谈兵
内容 367
粉丝 0
AI探索时代 专注AI工程化落地,让你的技术不再纸上谈兵
总阅读1.3k
粉丝0
内容367