廖力工作日志 2026-01-13 07:25:11 星期二

上周主线: 本来应该完成:1.完成脚本编辑界面的所有数据绑定的工作。2.完成中间文件管理的数据绑定工作。但由于一直在等接口所以实际上在做一些体验优化工作
本周主线:进行一些体验优化工作,数据接口来了再进行对接口的工作

##今天的任务:

1.继续和朱德民一起研究接口

    1.已经要求朱德民不要逐字输出回复,应该是token/chunk或者Sentence级别的输出

    目前朱德民的接口返回的消息存在以下问题:
    1.回复时的sse流中内容为逐字输出
    2.出现了和工作台交互流程设计不一致的数据
    3.重复输出结果消息
    4.切换角色后可能会复用之前回复的messgeid :期望是每次回复都用不同的messageid而不是会夸消息复用messageid

2.继续研究和解决Zustandstore在快速更新时事件合并带来的一些问题

    经过一轮调查发现可能问题不在zustand的事件合并上,问题出在朱德民给的接口输出的不同角色的消息串用了一样的messageid
    目前朱德民的接口虽然还没调整到最终可用的状态,但是先根据他出的这个接口适配一版“messageid混乱”的版本确保即使messageid混乱也可以一比一在ui上渲染朱德民当前返回数据的情况。

    1.目前的接口会导致界面渲染聊天流混乱,先解决这个问题 -- 已经解决,原因是在渲染过程中信任了叫天流输出的messageid,导致渲染错误,key重复,已经改成了消息id加消息渲染index的方式进行了。
    2.由于朱德民的接口会重复使用一个messageid 所以造成界面上出现了两个特别诡异的现象:
        1.更新旧消息
        2.新消息思考为空,消息为空(因为新消息复用了旧消息的id,将这两块更新到了旧消息里,所以会这样)
    3.基于第二点,我将更新程序并兼容这种情况:当出现已经存在在内存里的messageid时,就不往对话流的数组里添加新消息,而是让程序去更新之前那个messageid的内容 -- 完成, 如果有存在的消息,就不重复添加,并将更新的这个消息放在消息流末尾并更新update time的时间
    4.使得在正文回复后也可以点击查看思考结果,而不是将思考结果隐藏。 -- 已经完成,将思考的ui组件抽象成了一个组件,可以在任何地方使用
    5.就算朱德民的接口目前不符合预期,也可以根据目前的协议正常显示消息流 
        更新顺序 - 符合当前接口情况
        内容聚合 - 符合当前接口情况

    6.适配当前朱德民给的任务结果的结构体
        发现了更严重的问题:
        1.这个接口适配了之前第一版的数字员工的数据格式,考虑这个接口为了兼容数字员工的数据格式印证了之前发现的问题:返回了不属于当前业务需求的消息类型,具体来说,第一版的任务计划的数据格式,和当前这一版计划的数据格式都参杂在了目前的接口里。
        2.由于当前返回的数据格式兼容了第一版的数据格式,所以造成了外面那一层的type代表的是第一版数据格式给前端用的类型。在tasks[{}]里的内容还有一个type用于新版给工作台v2的数据格式。
        3.当前朱德民(给我提供接口的同学)面临的第一个困难就是他可能试图要在兼容第一版数据格式的前提下要给我提供第二版数据格式,这就造成了目前sse流数据看起来“混乱”的原因

史砚哥你好,
这两天在对接并适配目前朱德民提供的 SSE 接口过程中,发现了一些结构性情况,可能会对前端稳定性、后续维护成本以及多版本并行产生影响,这里做一个简要汇报。
目前观察到的主要问题:
虽然接口仍处于未完成状态,但目前返回的数据结构中同时兼容了 v1 与 v2 两套协议语义,具体表现为:
外层 type 使用的是 v1 的语义定义
内层 tasks 中又包含 v2 使用的字段
同一个任务在 SSE 流中,会同时以 v1(旧版本)和 v2(新版本)的结构被流式输出
这会导致前端在解析和渲染时需要同时兼容两套协议,整体复杂度较高。
一个降低复杂度的建议方向:
如果条件允许,建议将 v1 与 v2 的接口或协议逻辑进行拆分,分别维护
如果暂时不方便拆分接口,也可以通过参数的方式明确当前前端期望的协议版本,例如:
?version=1 或 ?version=2,后端在一次 SSE 连接中只返回对应版本的数据结构
这样可以明显降低:
后端在实现 SSE 流逻辑时的心智复杂度
前端适配和问题排查的成本
后续版本演进和维护的风险
以上是基于当前接入过程中的一些技术观察,不影响现阶段功能使用,仅作为提前的风险提示和方案建议,供参考。

##明天的任务:

长期任务:
1.适配一个移动端版本

设计稿规格为:1440*900

—————————————————————-其它内容———————————————————————–

{“chatId”: “c7d286f2-bb5d-40a4-ada2-31be7f371b74”, “jobId”: “d09949ee-1bee-4c9f-aa89-5edaeae865dc”, “messageId”: “ce70671a-0f46-44f0-882d-6b47d812d114”, “de”: {“id”: 3, “name”: “文籽”, “avatar”: “/agent.png”, “position”: “文案专员”}, “content”: {“status”: 2, “thinking”: “”, “text”: “”, “type”: “copywriting”, “tasks”: [], “title”: “阿维塔06短视频脚本”, “body”: “”}, “artifacts”: [{“id”: 1, “name”: “短视频创作”, “description”: “”, “type”: “videoScript”, “scene”: 1, “platform”: 1, “carSeriesName”: “阿维塔06”, “carSeriesId”: 1, “highlight”: [], “topic”: “”, “videoScript”: “”}]}

{“chatId”: “c7d286f2-bb5d-40a4-ada2-31be7f371b74”, “jobId”: “d09949ee-1bee-4c9f-aa89-5edaeae865dc”, “messageId”: “ce70671a-0f46-44f0-882d-6b47d812d114”, “de”: {“id”: 3, “name”: “文籽”, “avatar”: “/agent.png”, “position”: “文案专员”}, “content”: {“status”: 2, “thinking”: “”, “text”: “”, “type”: “copywriting”, “tasks”: [], “title”: “阿维塔06短视频脚本”, “body”: “”}, “artifacts”: [{“id”: 1, “name”: “短视频创作”, “description”: “”, “type”: “videoScript”, “videoScript”: “”}]}