DevLog:2025年9月5日

1、继续测试和优化体验,前两天盘了下各个API平台的余额,发现百度云千帆和硅基流动上还各有五六十块钱,先用硅基流动的API来测试NoteWith的AI对话功能了
2、首先就是在添加模型时,硅基流动官方文档里提到base url是https://api.siliconflow.cn/v1,但我直接填写这个url之后,在测试时仍然提示404错误,去掉后面的v1就好了,可能是因为之前我让Cursor添加了base url自动补全功能,所以现在只需要填写AI服务的根地址就行了
3、然后是在AI对话中切换模型时,选择AI模型的界面,每个模型都显示了模型的名称和“自定义模型”两行文字,我不需要“自定义模型”,我需要在这个页面看到每个模型的备注和模型名称两个字段的信息,Cursor删除了AIModelSelectorView中“硬编码”的“自定义模型”文字,并且完成了修改
4、接下来优化一下流式输出,发现AI回答内容像是在一段一段地输出,并且在AI回答内容输出之前就会有一条白色的区域,然后“AI正在思考中”前面的加载图标也比较大
5、Cursor表示目前的流式输出回答内容的分块是160字符,减少到了50字符,同时将思考过程的分块从80字符减少到了40字符,输出间隔时间也有缩减,至于在AI回答内容输出之前的白色区域,通过修改MessageView,只有当消息内容不为空时才显示消息内容区域,只有消息有内容时才会显示操作按钮(收藏、复制、删除),避免了空消息占位符显示白色背景区域的问题,然后缩小了“AI正在思考中”前面的加载图标
6、流式输出回答内容的分块还是有点大,还可以再缩小一些,另外由于目前AI回答中的文本内容渲染采用了NSTextView,虽然可以看到渲染后的结果,但语法标记所占的位置都显示成了空格,效果不是很好,这样做的原因是之前想要复制部分回答内容
7、尝试继续完善文本的渲染效果,将语法标记完全移除而不是设置为透明,这次竟然真的搞定了!真是万万没想到
8、然后调整下AI对话的标题,之前已经修改了AIChatView,目前它只负责AI对话详情页,也就是AI对话模块的第三栏,这页左上角的标题目前固定显示为“AI对话”,决定将其改为显示当前AI对话的标题,如果我没有打开任何对话,则显示为“AI对话”,如果我打开了某个对话,就显示当前对话的标题
9、发现AI对话内容(无论是提问还是回答)的底部都有一小条空白,Cursor表示这是因为消息容器的边距和内容区域的边距叠加导致的,稍微缩减了一下,目前显示效果还行
10、在测试时我发现调试信息里很早就已经出现了API返回的回答内容,但迟迟不见AI对话界面显示回答内容,猜测可能是API返回回答内容之后,先用MarkdownWithCodeBlocksView完成渲染,再流式输出到AI对话界面,实际上是API返回完整回答(AIService),然后分块流式输出(AIViewModel),再实时渲染(MessageView+MarkdownWithCodeBlocksView)
11、这不是真正的流式API,而是完整回答后模拟流式输出,由于这种方式每次内容更新都会重新渲染整个Markdown内容,可能会在长回答时造成性能开销,导致渲染闪烁(特别是复杂格式),Cursor建议使用真正的流式API,实现增量渲染(只渲染新增部分),并且缓存已渲染的组件,避免重复解析

发表回复