最近在做一个基于GPT-4的问答Agent,需要实时显示token生成过程。我参考LangChain文档分别实现了StreamingHandler和回调函数,但发现两者一起用时逻辑很乱——比如我想在流式输出中同时更新前端的状态栏,但回调里的on_llm_new_token和流式生成器似乎各走各的,导致UI刷新和最终答案拼接总是对不上。另外,如果Agent内部调用了多个工具,流式输出会中断,回调却又正常触发。想请教一下大家,在实际项目中,你们是怎么设计这套异步机制的?是统一在回调里处理,还是用队列把流式token和工具调用事件串起来?希望有经验的朋友指点一下,或者能推荐个简洁的架构思路。