DevLog:2025年8月5日

1、今天先处理一下ChatWith在使用深度思考模型时的显示效果问题,目标是如果模型支持深度思考,那就在对话过程中先展现思考过程,思考过程结束后折叠思考内容,继续展现回答内容,整个过程都需要流式输出,且能随着输出过程自动向下滚动
2、Cursor在修改过程中,根据我提供的调试信息再次添加了更详细的调试信息,再次测试时发现1.虽然可以看到思考过程,但却是在回答结束后才发现在回答内容上方有思考过程,应该先让我看到思考过程,思考结束后再呈现回答内容 2.思考过程显示不全,只能看到一部分 3.一旦折叠或展开思考过程,就会自动跳到对话界面的底部,体验也不是很好,最好是我在折叠或展开思考过程时,仍然停留在当前位置
3、这三个问题还没有解决,又发现在AI输出过程中,CPU占用率可以飙升到100%,且回答内容越长应用就会越卡顿,一旦回答完成或点击返回到对话列表后CPU占用率立即下降到0%,Cursor认为这种性能问题是由于存在多个重复的滚动监听器,并且每次流式输出都会触发频繁的UI更新,优化后性能有了明显的改善
4、多次修改后仍然不能完美解决思考过程的展现,决定暂时简化掉这一功能,去掉对深度思考过程的展现,直接流式输出回答内容,已实现
5、然后测试时发现MarkdownRenderer需要再完善一下,比如AI回答的内容里如果有链接,还会显示成带有Markdown语法的形式,不会直接显示成链接,另外还需要优化一下对话界面,在发送问题之后,发送按钮变为停止按钮,点击可以打断AI的回答,已实现
6、目前的对话列表中,长按对话可在菜单中选择置顶,但置顶后的对话和其它对话在样式上没有区别,让Cursor优化一下显示效果,Cursor优化的效果还不错,比如加上了与启动界面颜色一致的细边框、PIN图标、置顶标识、渐变背景等等,之后又边测试边让Cursor处理了无法取消置顶、对话列表不按最后对话时间排序、对话时间只显示小时和分钟等问题,并且去掉了多余的置顶和模型图标
7、出于好奇,询问了Cursor有没有必要将对话列表和收藏列表拆分成单独的视图,Cursor表示强烈建议拆分,目前这两个列表均在ChatView内,而ChatView已经有1300多行代码,包含了太多不同的功能模块,违反了单一职责原则,且代码组织混乱、状态管理复杂,建议拆分除单独的ConversationListView、FavoritesView、SearchView,并创建一个ConversationManager数据管理器来处理共享状态
8、Cursor还给出了分步骤的实施建议,先创建新文件结构,拆分独立文件,再优化数据管理,创建ConversationManager,减少重复代码,之后再组件化,提取可复用组件并创建Components目录,以提高代码复用性
9、虽然现在应用功能并不多,但拆分过程中也容易出现各种错误,比如已经拆分为单独文件的视图和原有的代码并存导致冲突,需要边修改边构建,之后再详细测试每一个功能确保应用功能正常,Cursor在拆分完成后表示,现在应用有了更好的架构基础,便于未来的功能扩展和维护
10、在Xcode模拟器中测试调整架构后的应用,发现如下问题,可能是拆分单独的视图之后导致的功能丢失:对话内容无法通过长按复制/收藏;发送问题之后会出现错误提示“请先配置API密钥”,但我已经配置了模型信息;“设置”界面左上角需要添加“返回”按钮;收藏列表需要以对话列表的样式显示,每条收藏在列表中仅显示两行文字即可
11、在修复上述问题的过程中遇到了对话长度超限的问题,不得已开启了新对话,在修复几处错误之后,Cursor试图开启模拟器帮我测试应用,我更习惯自己在模拟器中测试,回复“以后我自己”(其实还没有打完就点了发送),Cursor竟然理解了我的意思,回复说“好的,我理解您想要自己处理后续的操作”
12、再次测试,发现这些问题:新收藏的对话内容没有出现在收藏列表里;发送问题之后没有“AI正在思考中”的提示;回答过程中会同时出现两条一样的回答内容,回答结束后仅显示一条
13、Cursor没能一次解决上述问题,测试发现还有新问题:发送问题之后仍然没有“AI正在思考中”的提示;我需要以流式输出显示回答内容,不要一次跳出全部回复内容;对话界面需要跟随流式输出向下滚动,始终显示最新的回答内容;收藏列表需要按收藏时间倒序排列
14、在修改过程中,Cursor建议将ChatView的body结构拆分为更小的组件,比如消息列表、输入框、头部等分别提取为独立组件,以减少嵌套和条件判断,但多次修改后仍然频繁出现错误,比如问题提交之后应用就会卡死、新建对话后原有的对话会消失、同时输出两条一样的回答内容、对话中只能看到最早的一个问题,其它的内容都不显示 等等问题,猜测可能是在将ChatView拆分成多个文件之后,在拆分组件时,出现了功能上的重复和冲突,于是让Cursor继续检查ChatView和Views目录下的文件有没有功能重复的情况
15、目前在对话界面提交问题后应用还是会卡死,也没有了“AI正在思考中”的状态提示,明天让Cursor继续拆分ChatView,检查有无功能重复,并添加调试信息定位问题,还有另一个问题也明天处理:目前的ChatWith用StoryBoard作为启动页面,NoteWith和DoitWith则是用SplashView作为启动页,这两种形式有啥区别?
16、最近Cursor在更新之后添加了一个Context Usage的提示,以后注意时刻关注这个用量提示,如果要对应用做比较大的改动,但用量快到顶了,就开启一个新对话,虽然可以选择参考上次的对话内容,但好像参考的效果不太行