DevLog:2026年1月11日

1、继续修复发送图片给Claude API时的问题,包括图片缩略图无法正常显示、发送图片给Claude API后返回HTTP 400错误,针对缩略图问题,添加了文件存在性检查、优化错误处理、添加调试日志,针对HTTP 400错误,调整了系统消息处理、历史消息格式和消息构建顺序,但测试发现问题依然存在,缩略图依然不能正常显示

2、结合调试信息,Cursor认为问题在于应用无法访问用户选择的图片文件(如桌面上的文件),因为macOS沙盒限制,解决方案是在用户选择图片后,将文件复制到应用沙盒目录(文档目录),并保存复制后的路径,但依然没有解决问题

3、针对这一问题进行了多次修改,中途Cursor还认为可能是因为OpenRouter提供的Claude API和Anthropic官方的Claude API在图片代码格式上的区别导致的,在与Chatbox对话,确认OpenRouter提供的Claude Sonnet 4 API支持读取图片之后,再次让Cursor检查并修复问题

4、后来发现在一个对话中,如果默认模型不是Claude Sonnet 4,即使在对话中切换模型为Claude Sonnet 4,发送图片后也会回答“我目前无法直接查看和分析您上传的图片”之类的话,但在设置中将Claude Sonnet 4设为默认模型后,就可以读取图片了,但是返回的回答内容显示不完整,并且在调试信息中会有大量的“解析JSON错误”

5、Cursor认为这是流式响应解析问题,SSE流式响应中的JSON数据可能是分块的,导致JSON不完整,需要在解析前检查JSON是否完整,修复过程包括添加缓冲区、检查JSON完整性,同时移除了错误日志,再次测试后读取和输出正常

6、发现一个新问题,在对话界面右上角切换模型后,显示为新的模型,但仍然在跟切换前的模型对话,原因在于切换模型时,代码只更新了数据库和父组件的session,但ViewModel的_currentSession没有被更新,sendMessage方法中使用的是_currentSession,所以即使切换了模型,实际使用的仍是旧的session配置

7、Cursor修改之后,再次测试发现模型仍然不能正确切换,从支持深度思考的模型A切换至不支持深度思考的模型B后再提问,仍然是模型A在回答我,只是不显示思考过程,并不是由模型B来回答我,这是不对的,这次修改包括添加updateCurrentSession方法、修改sendMessage方法,这样在切换模型后,ViewModel的_currentSession会被正确更新,再次测试后模型切换正常,并且会结合上文内容回答我

发表回复