DevLog:2026年1月22日

1、截至目前,四款应用问题如下,加粗内容暂未修复:

1.DoitWith

-首次启动应用时无需生成示例数据

-设置-已完成 Todo,数据统计不正确

-已完成Todo页面同样以分组形式显示,需要能看到Todo原本所属的分组

-已过期的Todo需要在显示上有所差异,比如标题用红字

-设置-关于卡片最下方增加版本号信息,先用v0.1.0,居中显示

-按住拖动调整排序的功能无法正常使用

-不包含任何Todo的分组下会显示“该分组暂无待办”,但底下还有半截分隔线,需要和正常的Todo条目下的分隔线格式一致

2.ChatWith(目标是对齐ChatWith for Mac)

-清除后台后,再打开应用秒闪退,无法使用

-在与支持深度思考的模型对话时,看不到思考内容,我需要增加一个展示思考内容的区域,默认折叠,可以点击展开,并且显示样式要和回答内容有所区别(两轮修改后已有思考内容区域,但看不到具体的思考内容)

-发送消息后立刻显示在对话界面内,现在好像是在AI有响应后才会显示

-虽然可以看到Tavily已经联网获取了一些链接,但AI回答内容好像没有结合Tavily搜索结果

-不要给所有填写了Tavily Key的模型自动开启联网搜索功能,改为由用户自行开启/关闭联网搜索功能

-发送按钮上方设置联网搜索开关,并调整布局,拉高消息框,右侧放竖向排列的联网搜索开关和发送按钮

-对话列表中显示的标题是用户的第一个问题,需要改为用户的最后一个问题

-参考链接区域版式优化,目前的链接间距太近,想点开某条时容易点错

-点击对话界面右上角弹出选择模型界面,每个模型的信息分成四行,备注、模型名称、是否支持联网,是否支持深度思考

-长按消息(包括用户消息和AI消息)可弹出菜单,菜单中包含复制、收藏、删除 三个按钮,其中在AI消息上长按点删除时要同步删除思考过程、回答内容和参考链接

-消息(包括用户消息和AI消息)的时间显示有问题,现在只显示时:分,看不到是哪天,当天的消息可以只显示时:分,最近的消息显示昨天、前天、几天前,较早的消息显示完整日期+时:分

3.ChatWith for Mac

-关于页面的“初始版本发布”放到最上边

-优化上传附件和图片后的显示效果,比如取消附件和图标的红叉需要改小一些

4.DoitWith for Mac

-询问并调整数据持久化方式

-界面优化,以卡片形式呈现每条Todo

-增加“下一步”功能,和DoitWith移动版采用相同的完成Todo逻辑

2、继续优化ChatWith,之前遗留的几个问题暂时搁置,本轮修改主要针对以下几点:

1.不要给所有填写了Tavily Key的模型自动开启联网搜索功能,改为由用户自行开启/关闭联网搜索功能

2.发送按钮上方设置联网搜索开关,并调整布局,拉高消息框,右侧放竖向排列的联网搜索开关和发送按钮

3.对话列表中显示的标题是用户的第一个问题,需要改为用户的最后一个问题

4.参考链接区域版式优化,目前的链接间距太近,想点开某条时容易点错

5.点击对话界面右上角弹出选择模型界面,每个模型的信息分成四行,备注、模型名称、是否支持联网,是否支持深度思考

3、Composer 1模型的修改速度一流,涉及了五个文件,连接真机测试,1已实现,2消息框的高度没有变,可输入区域还是只有一行,右侧已有联网搜索开关,3对话列表里的标题已可显示用户的最后一个问题,但点开对话之后顶部的标题还是第一个问题,需要统一成最后一个问题,4参考链接之间的间距可以适当缩小一些,5已实现,另外在设置-模型管理界面,每个模型的信息也和刚刚修改的选择模型界面一样分为四行:备注、模型名称、是否支持联网、是否支持深度思考,继续让Cursor修改

4、本次修改Cursor针对消息框设置了最多5行的显示高度,设置了最大高度为120,对话列表和对话页面标题保持一致,将参考链接间距由上次修改的12改为8,并且调整了模型管理页面,与模型选择界面保持一致,真机测试,其他问题都已解决,但输入框仍然只显示为一行,另外再调整下添加模型和编辑模型页面,现有的五个字段都必填,并且把“备注”挪到最前边,提示“起个简单好记的名字吧”

5、针对添加模型和编辑模型页面,Cursor在调整字段顺序的同时,给备注、API Key、Tavily Key字段添加了必填验证,不过Tavily Key字段其实不用必填,再次改了下,针对输入框的高度,截了一张ChatWith for Mac的输入框的图,并让Cursor参考调整了输入框的高度,但测试发现依然未能实现想要的效果,决定将联网搜索按钮从目前的位置挪出来,浮在输入框的上方,居左显示,带有提示文字,另外,在添加模型和编辑模型界面,备注字段的输入框高度和其他几个字段高度保持一致

6、再次真机测试,需求已实现,继续优化,除上述未解决的问题之外,在对话界面还要增加如下功能:

1.长按消息(包括用户消息和AI消息)可弹出菜单,菜单中包含复制、收藏、删除 三个按钮,其中在AI消息上长按点删除时要同步删除思考过程、回答内容和参考链接

2.消息(包括用户消息和AI消息)的时间显示有问题,现在只显示时:分,看不到是哪天,当天的消息可以只显示时:分,最近的消息显示昨天、前天、几天前,较早的消息显示完整日期+时:分

7、测试发现上述需求已实现,发现回收站还有一个问题,目前设置-回收站-收藏内容里会显示我删除的每一条对话内容,这里应该只显示我删除的收藏内容,经过一次修改后我才注意到,每条收藏只有复制、取消收藏两个选项,点取消收藏后,这条内容就会从收藏列表消失,不会进入回收站,需要将“取消收藏”改成“删除”,点击即进入回收站-收藏内容里,并且可恢复到收藏列表、可永久删除,这样才合理,在修改过程中,Cursor出现了反复使用同样的命令行的循环,打断之后虽然出现了构建错误,但再次反馈问题并重新生成代码、运行pod install之后,应用可正常构建,并且删除收藏/恢复收藏的需求也已达成

8、发现真机测试的效率真的比模拟器测试要高很多,而且更符合真实的使用场景,毕竟在Mac上用鼠标操作iOS应用还是不太符合使用手机的习惯,而且模拟器和手机的性能表现也很不一样,在模拟器上有些卡顿的功能,在真机上使用却会很流畅

9、然后将ChatWith for Mac的模型服务商列表截图给Cursor,让它给添加模型和编辑模型界面增加常用的提供商,实现自动填充Base URL的功能,同时保留自定义选项,可以手动输入Base URL,修改之后替换了下百度云千帆的链接,此需求已达成

10、然后是设置-数据统计页只需要保留AI对话和收藏内容两个卡片就行,不要再套一层卡片(外层Card包装),另外设置页底部增加一个“关于ChatWith”卡片,大字显示应用名“ChatWith”,第二行小字“Any AI LLM you like.”,第三行是版本号“v0.1.0”,这三行信息都居中显示

11、至此ChatWith的修改暂告一段落,继续修改DoitWith,需求包括:

1.首次启动应用时无需生成示例数据

2.设置-已完成 Todo,数据统计不正确

3.已完成Todo页面同样以分组形式显示,需要能看到Todo原本所属的分组

4.已过期的Todo需要在显示上有所差异,比如标题用红字

5.设置-关于卡片最下方增加版本号信息,先用v0.1.0,居中显示

12、也用Composer1模型进行修改,修改点包括修改TodoData.swift以移除自动创建示例数据的逻辑,修改SettingView.swift中的统计逻辑,修改CompletedTodosView.swift以按分组显示已完成的Todo,修改TodoRowView.swift和GroupTodoRowView.swift以添加过期检查逻辑,修改SettingView的关于部分,之后开始真机测试,上述需求的2、3、4、5均已实现,1可能需要在另一台手机上测试

13、然后检查一下目前应用都在哪些地方规定了版本号,可否只在一处填写版本号,在其他地方调用该处的版本号信息?针对这一需求,Cursor创建了AppConfig.swift文件来集中管理应用配置信息,规定了版本号优先从Bundle读取(Xcode项目中的MARKETING_VERSION),如果无法读取则使用默认值“v0.1.0”,同时提供了构建版本号的读取方法,然后将刚刚增加的设置-关于板块的硬编码版本号改为从项目配置中读取,这样就实现了版本号只在一个地方定义,并自动同步到使用版本号的地方

14、不止一个地方提到了“版本号”和“构建版本号”两个概念,询问了下ChatGPT,简单说就是版本号Version是给用户看的,构建版本号Build是给系统/开发者/审核看的;版本号表示产品层面的版本,如果用三位数(比如1.0.1)的话,三位数分别代表主版本号、次版本号、修订号,分别对应大版本、功能更新、Bug修复,构建版本号表示技术层面的“第几次打包”,每打一次包,就应该不一样,同一个版本号,对应的构建号必须递增,且不能重复;举例说,日常开发版本号可能是1.0.0+1,有功能更新时版本号可能是1.1.0+10,大版本发布时版本号可能是2.0.0+1,后续可以按照这种方式来管理版本,更加规范一些

15、针对DoitWith for Mac的数据持久化方式,首先让Cursor检查了下,受到以前有AI对话和笔记板块的影响,目前实际使用的是UserDefaults+JSON编码(TodoItem和TodoGroup通过JSON序列化存储在UserDefaults,每次修改都会序列化整个数组并保存),CoreDataManager已经初始化但实际未使用,而且数据模型中还保留着已经删除功能的实体(AIMessage、AISession、AIModel、Note);目前存在的问题有些多,比如Core Data已经初始化但未使用,造成资源浪费,数据模型包含已删除功能的实体,需要清理,UserDefaults不适合存储大量结构化数据,性能较差,每次保存都要序列化整个数组,数据量大时会有性能问题

16、针对上述问题,Cursor建议了三个方案,一是完全移除Core Data以简化架构,减少资源占用,降低维护成本;二是迁移到Core Data,性能好,支持大量数据,支持复杂查询/排序/过滤;三是使用SwiftData,具备更现代的API,与SwiftUI集成更好,代码更简洁,可自动处理数据同步,ChatGPT强烈推荐使用SwiftData(苹果在WWDC23推出的Core Data现代化封装,语法极简,学习成本低),认为它能最大化开发效率,同时不牺牲未来扩展性,让待办类工具使用Core Data有些“杀鸡用牛刀”,决定采纳ChatGPT的建议,使用SwiftData

17、Cursor认为TodoItem、TodoGroup这种业务数据可以使用SwiftData,界面设置和外观设置等配置数据可以继续使用UserDefaults,明天按照Cursor的建议修改下DoitWith的数据持久化方式,后续DoitWith移动版也考虑将Core Data换成SwiftData,ChatWith和ChatWith for Mac已经使用Flutter重制,不涉及Core Data或SwiftData

DevLog:2026年1月14日

1、询问Gemini后,使用命令行在终端里打包了应用(cd+空格+项目文件夹路径,进入项目根目录,然后运行flutter build macos –release -v),实测只用了49.3秒就完成了打包,并且自动放到了项目文件夹——build-macos-Build-Products-Release文件夹下,拽到应用程序文件夹替换掉之前用Swift开发的版本,测试后发现功能正常

2、但是这个版本依然没有签名,可能在使用过程中还是会受苹果的Gatekeeper机制影响,结合Gemini的建议,删除缓存,将My Mac切换为Any Mac(Apple Silicon, Intel),并且给Xcode打开完全磁盘访问权限后再次打包,依然卡在in progress环节

3、然后根据Gemini的建议,陆续在终端中查询了最近公证记录(一共提交了4条,每条都是在in progress)、查询公证错误报告(公证流程还没有走完,所以也没有什么具体的错误信息),先继续优化应用、丰富功能,继续等这4条看啥时候能完成

4、接下来给应用增加对快捷键、右键菜单、剪贴板中的图片、拖拽图片和文件的支持,具体的需求是:

1.在设置列表中增加“快捷键”,放在数据统计和回收站中间,右侧设置详情展示对快捷键的说明

2.我需要的快捷键包括新建对话/笔记command+N(在对话页就新建对话,在笔记页就新建笔记)、发送消息command+enter(仅针对对话页)

3.另外在AI对话页,给每条消息增加右键菜单,包括收藏、复制、删除三个功能

4.AI对话页面目前好像不支持读取系统剪贴板中的图片,只支持文字,我需要在AI对话过程中,可以将剪贴板中的图片粘贴到AI对话框,效果和上传图片的效果一致

5.AI对话页面也需要支持拖拽图片和文件,将图片或文件拖拽到AI对话界面,效果和上传图片/文件的效果一致

5、在提交给Cursor之前,先询问下它对快捷键有哪些建议,只有上面需求中的两条好像的确有点少,结合Cursor的建议,增加command+F(打开搜索功能),其他快捷键后续再视使用情况陆续补充

6、本次修改涉及10个文件,包括设置列表中的快捷键选项、快捷键实现、AI对话页消息右键菜单、剪贴板图片粘贴支持、拖拽文件支持,测试时构建失败,可能这次同时涉及多个小功能的修改,比较复杂吧,出现了括号不匹配、结构问题、缺失的Intent类等问题,构建成功

7、逐个测试新增功能,并要求Cursor修复:

1.设置-快捷键,右侧的详情需要做一些微调,去掉顶部的“快捷键”三个字,“对话页面”改成“AI对话”,“笔记页面”改成“笔记”,去掉底部的“消息操作”分组及右键菜单的说明,其他快捷键说明和后面的文字需要居中对齐,目前好像是顶部对齐

2.新建对话、新建笔记的快捷键不管用,按command+N时未能新建对话、新建笔记,comman+enter发送消息的快捷键已支持

3.目前AI回复的消息已支持右键菜单,需要给用户消息也增加同样的右键菜单

4.不要自动把剪贴板中的图片粘贴过来,留给用户手动操作

5.实测仍不支持拖拽图片或文件到AI对话界面

8、再次测试,以上的1、3、4、5已支持,新建对话、新建笔记的快捷键command+N还是不管用,另外消息输入框还不支持通过command+V粘贴文字,也需要继续修改,当前对话中针对这一需求已经进行了两次修改,均未能实现,于是开启了一个新对话

9、提出需求:我需要在对话界面可以通过command+N新建对话,在笔记界面可以通过command+N新建笔记,另外对话的输入框需要支持用command+V粘贴从其他地方复制的文本和图片

10、Cursor指出目前新建对话和新建笔记的快捷键支持已经在对话和笔记列表中实现,无需修改,然后调整了对话输入框的粘贴处理逻辑,同时支持粘贴文本和图片,再次构建测试,对话框现在可以粘贴文字了,但粘贴图片时看不到缩略图,并且发送图片给支持图片的API后,再次出现了“错误: API密钥无效,请检查API Key设置”的提示,通过附件按钮上传图片时,可以正常显示缩略图,正常进行提问和解读,而且新建对话和新建笔记的快捷键只有光标停留在输入框、编辑某条笔记时才能生效,我需要的是只要当前位于对话界面就可以用快捷键新建对话,只要当前位于笔记界面就可以用快捷键新建笔记

11、修改后再次测试,两个问题都未能解决,继续反馈修改,粘贴到对话框的图片应该和通过附件上传图片的效果一致,Cursor添加了调试信息,明天再结合调试信息继续反馈给Cursor修改

12、发现在对AI消息进行收藏、复制操作时,没有将深度思考内容和Tavily的参考链接包含在内,但在右键点击时,在深度思考内容和Tavily参考链接的显示区域也可以弹出右键菜单,但想了想好像的确不需要复制和收藏思考内容及Tavily参考链接,以后视需求再做调整

13、明天继续详细测试每个功能,再问问Cursor能否使用macOS的textutil实现对word文档的解析(来自千问的建议),然后版本号更新为v0.1.1,build号用2,刷新README.MD和设置-关于ChatWith,下一个版本重点优化笔记板块的功能和界面

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会被正确更新,再次测试后模型切换正常,并且会结合上文内容回答我

DevLog:2025年11月4日

补充一条,时间线有点乱了,但还是要记录一下。

1、继续试用ChatWith,发现目前的应用在使用支持深度思考的模型时,思考内容好像限制了显示高度,一旦达到高度限制,就不会随着思考的内容继续自动滚动,Cursor表示思考内容的显示高度的确固定在了400点,且超出之后会出现滚动条,但超过400点后就不会再自动滚动,在修改过程中发现了另一个问题,好像在对话中切换了另一个模型,再提出新问题时应用就会卡死

2、Cursor分析了可能导致应用卡死的几个问题:Core Data并发冲突、通知监听器生命周期、状态读取时序、缺少状态同步,特别是Core Data并发冲突,由于直接在主线程修改Core Data managedobject,如果此时用户立即发送消息,可能造成并发访问冲突,updateAISession可能触发Core Data save操作,与其他操作冲突,明天继续修改这个问题

3、添加其他模型来测试Base URL的填写方法,之前已经要求Cursor将其改为用户手动填写AI服务的跟地址,应用会自动补全路径,比如api.openai.com、openrouter.ai/api,然后针对火山引擎的“应用”(bots)做了特别优化,需要填写完整地址https://ark.cn-beijing.volces.com/api/v3/bots/,测试发现百度云千帆的Base URL填写仍然有问题,比如我填写官网提供的https://qianfan.baidubce.com/v2/chat/completions就会连接失败,删掉v2往后的内容也不行,只填写https://qianfan.baidubce.com也不行,与其设定各种复杂的自动补全规则,倒不如直接要求用户填写完整的Base URL,或者应用内置一些常用的Base URL来的简单

附上常用的几个AI的Base URL:

OpenAI

https://api.openai.com/v1/chat/completions

DeepSeek

https://api.deepseek.com/v1/chat/completions

OpenRouter

https://openrouter.ai/api/v1/chat/completions

硅基流动

https://api.siliconflow.cn/v1/chat/completions

火山方舟

https://ark.cn-beijing.volces.com/api/v3/chat/completions

或

https://ark.cn-beijing.volces.com/api/v3/bots/chat/completions

百度云千帆

https://qianfan.baidubce.com/v2/chat/completions

阿里云百炼

https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions

4、询问Cursor目前应用在Base URL补全方面的规则是怎样的,根据回答内容,规则包括:

1.如果没有http://或https://,就自动添加https://

2.如果URL末尾有斜杠,就自动移除

3.如果已经包含完整路径,就不做任何修改

4.如果包含部分路径,就自动补全,比如补全v1,补全/chat/completions

5.如果只有基础URL,就自动补全/v1/chat/completions

按照这套规则,我填写了完整的百度云千帆的Base URL,应该能正常使用才对,但填写完整地址之后测试仍然提示404

5、问题可能出现在自动补全v1上,也就是在“包含/chat/completions但不包含v1时,会自动添加v1前缀,包含/api/、/bots/、/v3/、/v2/,且不含/chat/时,则添加chat/completions”这里,根据Cursor给出的示例,可能会出现/v1出现在/chat/completions之后的情况

6、目前的规则的确有些复杂,可能用户在填写过程中也会不知道该填写完整的地址还是部分地址,倒不如直接在应用里内置几个常用的、完整的Base URL,由用户自行选择,要求:目前的规则有些复杂,我希望能在添加和编辑AI模型界面,预置几个常用的API平台的完整Base URL,用户只需要填写备注、模型名称、选择模型提供商、填写API Key、填写Tavily API Key即可使用模型

7、Cursor在修改过程中创建了APIProvider枚举,包含10个常用平台(OpenAI、DeepSeek、Anthropic Claude、OpenRouter、Google Gemini、智谱GLM、月之暗面Kimi、百度文心一言、阿里通义千问、腾讯混元、自定义),这样就不再需要配置路径补全规则,用起来也更方便了,先添加几个模型试试,再决定要不要增加或删减APIProvider

8、在修正因为使用中文引号导致构建失败的错误之后,百度云千帆和火山方舟的API都可成功连接,当API提供商选择自定义时,需在“高级设置”的Base URL中填写完整地址,即带有/chat/completions的地址

9、APIProvider需要增加硅基流动、火山方舟、百度云千帆、阿里云百炼,这四个都放在“自定义”前面,另外我发现在选择某个APIProvider之后,模型名称部分也会出现预置的模型名称,但我不需要,改成由用户手动填写模型名称,修改之后测试了几个不同的模型,都可以成功连接了

DevLog:2025年12月11日

1、需要给应用增加多模型管理和切换、联网搜索(通过Tavily,在模型界面增加Tavily Key字段)、回收站(可删除和恢复AI对话、收藏内容)、深度思考(在使用支持深度思考的模型时,可在对话过程中看到思考过程,并且样式和回答内容要有区别)、流式输出(可能现在已经有了?)、Markdown渲染(可能现在已经有了?)等功能

2、决定先增加联网搜索、回收站、深度思考功能,Cursor规划了7步:实现联网搜索功能(Tavily):添加Tavily Key字段到设置页面和存储、创建Tavily服务,实现联网搜索API调用、在聊天中集成联网搜索功能、实现回收站功能:修改数据库添加is_deleted字段、修改删除逻辑为软删除,创建回收站页面、实现深度思考功能:修改OpenAI服务解析思考内容、修改消息显示组件,区分显示思考过程和回答内容

3、Cursor只用了几分钟就完成了如下修改:

1. 联网搜索功能(Tavily):在设置页面的API配置部分添加了Tavily Key输入字段;创建了TavilyService处理联网搜索API调用;在聊天中集成:配置Tavily Key后,发送消息时会自动进行联网搜索,并将搜索结果作为上下文发送给 AI

2. 回收站功能:数据库更新:为conversations和messages表添加了is_deleted和deleted_at字段;软删除:删除操作改为软删除,数据不会真正删除;回收站页面:在设置页面的“数据管理”部分可进入回收站;可查看已删除的AI对话和收藏内容;可恢复已删除的内容;永久删除(不可恢复)

3. 深度思考功能:OpenAI服务更新:支持解析深度思考模型的thinking字段;消息显示更新:区分显示思考过程和回答内容;思考过程:灰色背景、斜体、带边框,顶部有“思考过程”标签;回答内容:正常样式显示

4、按照目前已有的功能,应该已经可以实现从添加模型到对话到删除的完整流程了,测试一下,先让Cursor解决两个问题,以及一个新需求:

1.在模拟器中打开应用时,对话页面出现了错误提示:LocaleDataException: Locale data has not been initialized, call initializedDataFormatting(<locale>).

2.在填写API Key、Base URL、模型名、Tavily Key后,填写的信息无法保存,退出设置界面后再回来看填写的信息就消失了

3.我需要把数据统计和回收站都放到设置-数据管理里

5、第一个问题,可能是因为中文日期的问题?第二个问题,为所有输入框添加了onEditComplete回调,在失去焦点时自动保存,第三个问题,将数据统计和回收站合并到了“数据管理”卡片中,继续测试,1和3已经解决,二仍然未能保存,决定直接动个大手术,添加多模型管理和切换功能,并在其中增加模型信息保存机制,需求包括:

1.在设置界面增加“模型管理”卡片,将现有的API配置整合到“模型管理”卡片中

2.可以在“模型管理”界面查看我添加的所有模型,可以在这里新建、修改、删除模型,并且可以将我添加的任何一个模型设置为默认模型,在开启新对话时,直接使用默认模型

3.添加和修改模型的界面,需要有取消和确认按钮,点确认按钮确认添加/修改,点取消按钮可取消添加/修改,点击确认或取消后可以返回“模型管理”界面

4.在添加和修改模型的界面,增加“备注”字段,可自行填写,并在对话窗口右上角的模型切换按钮上显示备注名和模型名

5.开启新对话时,直接使用默认模型

6.在对话中允许用户切换模型,模型切换按钮放在对话窗口右上角

6、修改过程中,Cursor将操作分为如下步骤:更新AIModel模型,添加备注字段和默认模型标记;创建模型数据库表和DAO;创建模型管理的Respository和Provider、创建模型管理界面、创建添加/编辑模型界面、修改设置界面,整合API配置到模型管理、修改对话页面,添加模型切换功能、修改聊天provider使用当前模型,大概耗时5分钟

7、在测试之前先记录一个关于Flutter开发的知识点:关于这几天在修改过程中频繁出现的DAO、Repository和Provider。

1.DAO(Data Access Object,数据访问对象)专注于数据存储层的读写,是直接与底层数据源交互的抽象层,封装所有数据访问细节,对外提供统一的GRUD(增删改查)接口,简单说就是DAO只负责“怎么从数据库/网络/本地文件拿数据/存数据”,不关心业务逻辑

2.Repository(业务数据仓库)是“业务层与数据层的中间层”,聚合多个DAO/数据源,封装业务逻辑,为上层(UI/Provider)提供统一的业务数据接口,简单说就是Repository负责“什么时候/从哪里/拿什么数据”,是数据的“调度中心”

3.Provider(状态管理工具)是“UI层与业务层的桥梁”,管理应用的状态(如用户信息、页面数据、加载状态),并将状态分发给UI组件,实现“状态变化——UI自动刷新”,简单说就是Provider负责“管理UI需要的状态,让UI能拿到最新数据”。

4.这几个概念之间的关系是:UI依赖Provider,Provider依赖Repository,Repository依赖DAO,分层设计本质是为了降低耦合,提升代码的可维护性

8、后续再测试今天新增的功能:多模型管理和切换、联网搜索、回收站、深度思考,测试正常后,还需要补充的细节包括流式输出、回答和收藏内容的Markdown渲染、模型测试、消息时间显示等等

DevLog:2026年12月5日

1、昨天引入RichTextKit,替换了目前的备忘录模块,但依然未能正常进行构建测试,在Xcode中构建时发现存在两处错误,再次反馈给Cursor并修改后构建成功

2、测试发现目前的确已经可以实现富文本编辑器的部分功能,比如设置加粗、下划线、删除线、文字颜色、字体、对齐方式,但工具栏中的斜体、字号大小,还有一个不知道是啥按钮,点亮和取消都没有看到什么变化,而且需要先选中文字,再从菜单里选“Format——More”才能在窗口底部弹出格式工具栏,感觉不够直观,需要缩减菜单层级

3、反馈后Cursor把工具栏改成了常驻在标题和编辑器之间,但在Xcode中多次构建都存在错误,猜测可能是Composer 1模型的问题?于是把Cursor中的模型切换回了Auto再试,但在修改过程中又把格式工具栏给我改回了自定义的NSAttributedString,测试发现其中的按钮基本都没有用,于是要求Cursor用RichTextKit内置工具栏RichTextFormat.Toolbar替换自定义实现

4、这下RichTextFormat.Toolbar常驻在备忘录详情页的标题和编辑器之间了,但格式工具栏高度有些夸张了,我希望能把第一行(包含加粗、斜体、下划线、删除线、字号)常驻,其他按钮先折叠起来,在第一行按钮后方增加一个向下的箭头,点击可以展开完整的工具栏

5、Cursor在使用RichTextContent的API、RichTextStyle枚举、RichTextAction,并保持与RichTextKit的兼容性的同时,实现了我的需求,工具栏默认折叠,只显示第一行常用按钮,点击箭头可以展开更多选项,效果还可以

6、接下来添加一个支持深度思考的模型,测试思考内容的流式输出和展示是否正常

7、插播另一个话题,在使用Cherry Studio询问“有哪些比较好用的跨端开发框架”时,发现使用Cherry Studio调用百度千帆平台的DeepSeek API时,响应速度和回答速度都非常慢,回答一个问题可能需要四五分钟的时间,但直接调用DeepSeek官方的API就没有问题,看了下我在百度千帆上的费用还有47块多,消耗的速度好慢

8、说到跨端开发框架,DeepSeek推荐用Flutter,支持iOS、Android、Web、桌面(Windows/macOS/Linux),高性能、重热载、组件库丰富、生态强大,缺点在于需要学习Dart语言(有Cursor,这个不算缺点)、包体积较大、Web端体验较差(无所谓,我也没打算上Web端),看起来的确是最符合我需求的跨端开发框架

9、之前移动端的ChatWith一直无法全屏显示,多次修改也无果,决定就用它开刀了,看能否在Cursor里使用Flutter框架,把它改成跨端应用,先搞好iOS端,再搞Mac端

10、询问Cursor如果我想把ChatWith改成用Flutter框架的话,可行性如何,Cursor认为目前应用的功能在Flutter中均可实现,核心功能在Flutter中均有对应的方案,我比较关注本地存储和Markdown渲染,本次存储上,Cursor建议对话数据用sqflite数据库,配置用shared_preferences,Markdown渲染用flutter_markdown或markdown_widget,且Flutter的Markdown包更成熟,但是,需要完全重写,无法复用Swift代码

11、Cursor还推荐了如下技术栈:

核心框架:Flutter SDK(最新稳定版)

状态管理:Provider或Riverpod(推荐 Riverpod)

网络请求:dio(支持流式响应)

本地存储:shared_preferences (配置)、sqflite (对话数据)

Markdown渲染:flutter_markdown

UI组件:cupertino_icons (iOS风格图标) 、flutter_slidable (滑动操作)

并且推荐完全迁移,优点在于跨平台、长期维护成本低,缺点在于需要重写所有代码

12、继续询问,如果按照Cursor的建议完全迁移,并使用Cursor推荐的技术栈的话,让它分析了一下详细的迁移计划和项目结构建议,它直接写了三个文档:FLUTTER_MIGRATION_PLAN.md(迁移计划)、FLUTTER_CODE_EXAMPLES.md(代码示例)、FLUTTER_QUICK_START.md(快速开始),可能Cursor认为我自己会参考这三个文档来开发吧,先这样,接下来让Cursor来进行迁移

DevLog:2025年12月3日

1、参考ChatWith for Mac添加模型的逻辑,预置一些常用的模型服务提供商,供用户在添加模型时选择,包括OpenAI、DeepSeek、Anthropic Claude、OpenRouter、Google Gemini、智谱GLM、月之暗面Kimi、百度文心一言、百度云千帆、阿里通义千问、阿里云百炼、腾讯混元、硅基流动、火山方舟、自定义,用户在添加模型时只需选择模型服务提供商,就能自动匹配对应的BASE URL,并且都是完整的地址,选择“自定义”时,可以自行填写BASE URL,并且有提示文字“需填写完整地址”,备注、模型名称、API Key仍然需要用户自定填写

2、在修改过程中,Cursor创建了模型服务提供商定义AIModelProvider.swift,并且将新文件添加到了项目文件里,测试发现功能基本正常,然后修改了AIModelManagementView里的几处细节:

1.有两个“服务提供商”,需要删除位置靠下的“服务提供商”,虽然完成了,但目前这里的界面略丑,后面再优化一下

2.模型名称下面的说明文字需要固定为“如openai/gpt-3.5-turbo,可根据需要修改”

3.在模型列表页,左滑菜单中已有“测试”按钮,就不需要再在模型右侧设置“地球”标志了,已经让Cursor去掉了

3、明天再让Cursor引入RichTextKit,替换目前的备忘录模块吧,今天就到这儿了

DevLog:2025年12月2日

1、昨天在引入MarkdownUI替换之前自定义的MarkdownRenderer之后,Cursor未能进行构建测试,虽然也自称检查后未发现语法错误,但今天在Xcode中构建测试发现AI对话核心的文件AIChatView存在多个错误,导致构建失败,先复制给Cursor让它修复下这些错误

2、Cursor在简化了AIChatView的部分代码后构建成功,接下来测试并逐个修改各个模块的问题,先是这两个:

1.添加模型之后,发送消息后收到错误提示:发送消息失败:API错误(404),导致无法正常对话

2.AI模型管理界面缺少对模型的测试机制,需要增加测试机制,点击可测试,确认能正常连接

3、Cursor认为第一个问题是因为缺少URL补全机制导致的,于是修复了URL拼接问题,在用户填写的Base URL后面增加/chat/completions,然后在模型管理界面(包括列表视图、表单视图)添加了测试UI

4、在Xcode中打开发现测试UI工作正常,但我与测试可用的模型对话时,出现AI正在思考中的提示之后,没有收到任何回复,继续让Cursor检查原因并修复

5、Cursor修复了流式解析问题,包括改进流式响应解析逻辑、改进错误处理、增强兼容性等,虽然可以正常构建了,但我测试了两个问题,回答内容都未能完整显示,输出了一部分就停了,并且停止按钮一直未能变成发送按钮(正常的话应该收到所有回答之后停止按钮就会变成发送按钮)

6、Cursor认为问题原因在于流式输出解析顺序和ViewModel中的更新逻辑,前者主要是先检查finish_reason再处理delta,导致最后一块内容可能被跳过,当finish_reason存在时直接break,未处理该条数据中的delta,后者主要是更新频率限制在100ms,可能导致最后的内容未及时更新,同时,为了确保流式输出正确完成,Cursor也做了一些修改,无论finish_reason是否存在,都会在结束时调用onUpdate,即使delta为空,也会更新一次,确保状态正确,isLoading会被正确设置为false,停止按钮会变回发送按钮

7、继续在Xcode中测试了两个问题,这次可以完整显示所有回答内容了,并且停止按钮也会随着输出结束变回发送按钮

8、接下来准备参考ChatWith for Mac添加模型的逻辑,预置一些常用的模型服务提供商供用户选择,包括OpenAI、DeepSeek、Anthropic Claude、OpenRouter、Google Gemini、智谱GLM、月之暗面Kimi、百度文心一言、百度云千帆、阿里通义千问、阿里云百炼、腾讯混元、硅基流动、火山方舟、自定义,然后让Cursor引入RichTextKit,替换目前的备忘录模块

DevLog:2025年11月5日

1、今天先来修复在对话过程中切换模型会导致应用卡死的问题,以及思考内容高度超出400点后无法自动滚动到最新内容的问题

2、昨天Cursor分析了切换模型可能导致应用卡死的问题,认为首要问题在于Core Data并发冲突,主要修复策略是1.将通知监听器从sheet移到主视图 2.使用安全的方式更新Core Data 3.添加状态管理避免并发冲突,测试发现仍然会卡死,于是要求Cursor添加调试信息来定位问题,在排查过程中还出现了在不同对话间切换会卡死的问题,甚至只是打开一个对话就会导致应用卡死

3、Cursor在对话流程涉及的多个文件中都添加了大量调试信息,在可以正常切换对话、可以看到对话内容后,又出现了与支持深度思考的模型对话时看不到流式输出,但调试信息里可以看到正在输出的问题,原因在于负责思考内容的ThinkingProcessView的ScrollView频繁重建导致卡死(思考内容每秒更新10-20次——每次更新都重建ScrollView——ScrollView重建会触发布局计算——主线程被大量布局计算阻塞,导致卡死),修改过程中Cursor移除了ScrollView,改用简单Text,并且移除了展开/折叠动画,但我觉得展开/折叠动画还是可以保留的,又让Cursor加了回来

4、在修改过程中顺便给浅色模式下的AI对话增加了不同的底色,在最近更新系统到macOS 26之后,浅色模式下对话内容底色太浅,几乎是透明的,深色模式还是正常的,切换深色和浅色外观有时不会立即生效,也一并修改了

5、还是感觉AI回答内容的输出有些慢,怀疑可能是先接收到所有回答内容后再批量输出,Cursor认为当前“应该是”实时流式输出,但也添加了调试信息来帮我确认,如果是实时流式输出,就会在每次收到新内容后,MessageView立刻重新渲染,如果是批量延迟输出,就会在内容累积完成后再渲染,结合调试信息,的确是实时流式输出,在回应Cursor之后,Cursor便自动开始清理所有调试日志,让代码更简洁,涉及文件包括AIChatView、AIViewModel、AIService、MessageView、DataManager、CoreDataManager、TavilySearchService、AIChatSessionListView,二百来行调试信息

6、再次测试,发现现在又出现了在对话中切换模型、发送问题后应用会卡死的问题,打开一个新对话并且使用新模型就不会卡死,要求Cursor把跟这个过程相关的调试信息加回来,好定位一下问题出现在哪里,但添加调试信息后重新测试,发现无论是在新创建的对话里切换模型,还是在已有的对话里切换模型并对话,应用都不会再卡死,难道还是概率性出现?先留着调试信息,后面如果再出现就直接提交给Cursor

7、我需要在设置-关于页面下面增加一个文本区域,显示近期更新内容,并且让Cursor先拟一下近期更新点,微调内容和顺序之后,把版本号也改成了v0.2,以后每个版本都在这个位置显示一下更新日志,目前的更新日志包括:

“🎯 新增OpenAI、DeepSeek、Anthropic Claude及硅基流动、火山方舟等14个平台预设”,

“✨ 优化 AI 模型配置流程,自动填充常用平台的完整 API 地址”,

“🚀 大幅优化流式输出性能,AI 回答更加流畅”,

“🎨 改进消息气泡样式,浅色模式下有明显的背景色区分”,

“🎨 优化思考过程显示,支持完整内容展示”,

“⚡ 优化 Core Data 保存策略,减少数据库操作频率”,

“🔧 修复应用在切换对话时卡死的问题”,

“🔧 修复应用在切换模型后发送消息时卡死的问题”,

“🔧 修复深度思考模型卡死的问题”,

“🔧 修复外观模式切换无法生效的问题”,

“🐛 修复空消息导致的渲染循环问题”,

“🐛 修复死锁问题,提升应用稳定性”

8、然后优化收藏界面,发现在点击右上角的复制按钮时虽然的确可以复制整条收藏内容,但没有任何提示,于是让Cursor增加了Toast提示,并且在2秒后自动隐藏

9、收藏界面最右侧详情栏会显示两行一模一样的标题,Cursor检查后在收藏列表(NoteListView)和收藏内容(NoteEditView)中各有一个标题,只保留了后者,正好和复制收藏的按钮位于同一行,但复制按钮的高度好像有点高,导致收藏列表顶部的分割线和收藏内容顶部的分割线不对齐,可能是plus和doc.on.doc两个图标本身高度就不一样,于是让Cursor改成了文字按钮“创建新对话”和“复制收藏内容”,这下高度都一致了

10、再在更新日志中增加一条“🎨 优化创建新对话、复制收藏内容按钮的样式,删除重复的收藏标题”,明天继续测试、优化应用

Mac常用App推荐:Obsidian及实用插件

换用vivo X100 Ultra之后,因为不能使用苹果的备忘录,我用了Obsidian大概一年时间。这次结合个人的使用情况分享一下Obsidian的主要功能,一些比较实用的Obsidian第三方插件,以及对我而言它的优势和不足,仅供参考。

一、笔记基础功能

使用Obsidian记笔记更像是在管理文件,很多地方都与管理文件的思路类似。比如可以打开文件所在路径,直接添在访达中添加或修改文件夹,在不同的文件夹之间移动笔记等等。

单篇笔记可以左右分屏、上下分屏,方便对比笔记中的不同内容,可以同时打开多篇笔记,也可以把某篇笔记以单独的窗口打开,自由度很高。

笔记内容的编辑功能很完善,需要注意的是,Obsidian是一款典型的Markdown笔记工具,如果要设置样式,需要添加特定的符号标记,虽然也可以用Editing Toolbar插件实现一些具备富文本效果的编辑操作,便于调整版式,但它本身仍然是一款Markdown工具,点击带有格式的文字位置,仍然会看到符号标记。

除了基本的笔记功能之外,还支持关系图谱功能,可以用“双链”构建知识网络,也可以用“白板”梳理素材和思路,下文详细说。

在多端同步方面,Obsidian官方提供了包含多端同步在内的服务,按月付款每月5美元,能获得跨设备同步、端到端加密、版本历史、通过共享仓库协作等服务。当然也可以通过个人OneDrive账号或iCloud来实现免费的多端同步,实测同步效果还可以,下文详细说。

如果需要复杂排版,或者个人比较偏好可视化操作,喜欢所见即所得,推荐用富文本工具,比如苹果设备自带的备忘录就是典型的富文本笔记工具。如果追求写作效率、喜欢简洁的界面、需要进行长期的知识管理,推荐用Obsidian这种Markdown工具。

二、关系图谱管理

Obsidian和其它笔记工具的主要差异,在于它的重点是构建个人知识网络,而非传统的收集信息。从一条条孤立的笔记到用关系图谱管理知识网络,虽然可能需要一些时间的积累,但长期用起来就会发现这个功能有多方便。

通过Obsidian的关系图谱功能,可以建立笔记间的关联,还能用双向链接关联到某条笔记中的某个段落。比如可以将关于同一个主题的多条笔记进行关联,方便后续查看和管理。设置关联后,在关系图谱中会在多条笔记之间画线表示存在关联。有两种方法可以建立关联:双向链接、标签。

双向链接:在笔记内容里添加双方括号,就能添加双向链接,点击链接可以直接跳转到对应笔记,在设置关联时也会根据输入的内容自动匹配可能要关联的笔记。默认会显示被关联笔记的完整标题,也可以在完整标题后面加一条竖线再自己随便编个别名,这样就会只显示笔记的别名,看起来更顺眼一些,点击同样也能跳转。

通过双向链接建立关联后,可以在笔记界面右下角查看反向链接,即有哪些笔记链接到了当前这条笔记,或者在设置-反向链接中开启“在标签页中显示反向链接”,就可以在笔记底部更方便地管理关联笔记。如果被关联的笔记有更新,Obsidian会提示是否更新。

或者,也可以用标签来标记笔记,在笔记中任意位置输入井号和文字就能添加标签,点击某个笔记中的标签,就能快速查看使用同一标签的所有笔记。

在关系图谱中的设置中,可以给不同的标签、文件路径、文件名等设置不同的颜色组,让关系图谱更符合自己的使用习惯,也更容易找到一些重要的内容,还可以设置是否显示孤立文件,大家可以多试试。

个人认为没有必要建立过多链接,可能会让关系图谱变得杂乱,而且就我个人的工作需求来看,也不需要建立太多关联,因为很多笔记之间根本没有什么关系。

三、白板

Obsidian的白板功能提供了无限大的画布,可以在这里自由组织和连接笔记、图片、文字、网页等等。我觉得这三个场景比较适合使用白板:需要一些视觉化的手段来管理多篇笔记;需要写作,但素材分散在好几篇笔记中;需要记录一些脑暴想法,方便后续整理。

在白板里,不仅可以根据需要添加纯文本的卡片,并且随时将其转换为笔记文件,也可以粘贴一些截图到白板中。并且白板中的这些元素之间可以添加连线,也可以自由调整卡片大小,或者选中后创建分组,自由度相当高,推荐大家体验下。

四、网页浏览器

Obsidian内嵌了web viewer(需要先在设置-核心插件里启用网页浏览器),既能从笔记里点击链接打开浏览器,也可以在新标签页中直接打开浏览器。

有了这个功能,一些比较简单的资料搜索需求可以直接在Obsidian内搞定,可以直接将网页保存到内容库(Save to vault),也可以选中文字并右键保存到笔记中,简化了资料收集操作。这个内嵌的浏览器同样可以设置默认首页、搜索引擎、保存网页的文件夹、广告屏蔽规则,界面非常简洁,但整合的功能都相当实用。

五、实用插件推荐

接下来结合网上看到的推荐文章和我的实际体验,给大家推荐几个实用的插件。

1、Editing Toolbar

正如名字一样,编辑工具栏,调整格式非常方便,尤其对于不是很习惯Markdown语法的朋友们来说更是必备插件,选中文字再点击格式按钮就能设置格式了。

2、Importer

可以将其它笔记工具的内容导入到Obsidian,支持导入Notion、Evernote、Apple Notes(苹果的备忘录)、Microsoft OneNote、Google Keep、Bear、Roam以及HTML文件,是从其它笔记工具搬迁到Obsidian的必备插件。安装之后点击主界面左侧的Importer图标就能快速导入。

3、Remotely Save

不想订阅Obsidian官方的同步功能,并且没有使用苹果设备的话,可以用它给Obsidian增加跨端同步功能,需配合OneDrive个人版使用,同步速度也还可以,如果出现同步失败的情况,可以在Remotely Save插件的设置中对OneDrive进行鉴权,可恢复正常。

但是,偶尔会需要重新鉴权,大概一周左右会需要重新鉴权一次?而且还存在同步不及时的情况,比如我在电脑上使用时,如果中途打开了一次手机端Obsidian,再切到电脑端,进度可能会回退,新创建的文件可能会消失,比较影响使用。

说到这里,顺便说一下在苹果设备间通过iCloud同步的方法:

首先在iOS设备上创建iCloud仓库,打开Obsidian,点击 “新建仓库”,在仓库名称中输入相应名称,启用 “存储在iCloud中” 选项,然后点击 “创建”。

然后在Mac上打开Obsidian,在 “打开本地仓库” 右侧选择 “打开”,导航到 “iCloud→Obsidian”,选择在iOS设备上创建的仓库文件夹即可。这种同步方式明显比通过OneDrive要简单且稳定的多。

4、Copilot

可以为Obsidian增加AI对话能力,或者基于个人的笔记进行问答等等,下文详细说。

需要注意的是,安装插件前需要先在设置-第三方插件中关闭安全模式并且架梯子,才能访问社区插件市场。

六、Copilot插件使用方法

在Obsidian中使用Copilot插件接入AI,可以实现Chat、Vault QA、右键菜单修改内容三种功能,Chat可以询问AI任何问题,Vault QA可以询问有关现有笔记的问题。这样让自己的笔记真正成为一个知识库,也可以更方便地用AI辅助创作。

先说怎样添加模型(Chat Model和Embedding Model,前者负责对话,后者负责建立所有笔记的索引)。

关于Chat Model,可以直接在Copilot插件的设置界面中填写几家大模型的API Key,并选择、使用模型,支持OpenRouter、Gemini、OpenAI、Anthropic、Cohere、XAI、Groq、Mistral和DeepSeek。

或者添加自定义的模型,点Model标签页的Add Model——填写Model Name——选择Provider(OpenAI Format,或者选择Ollama来调用本地模型)——填写Base URL和API Key——Verify一下,提示成功就可以Add Model。添加Embedding Model的方法类似,然后将Default Chat Model和Embedding Model切换成刚刚添加的模型。

在添加自定义模型时,有一个“Enable CORS”的选项,一直没弄明白到底要不要开,询问ChatGPT,它说Enable CORS用于允许Copilot向非同源的大模型API发起请求,主要解决本地、自建或内网模型接口被浏览器跨域机制拦截的问题,勾选Enable CORS之后,会放宽网络访问限制,Copilot也提示“Only check this option when prompted that CORS is needed”,也就是只有在系统提示需要CORS时才开启,大家可以在使用过程中试一试。

添加Embedding Model之后,会快速对所有笔记内容进行索引,并且打开任何一篇笔记都会在右侧边栏推荐相关笔记,点击就能直接查看相关笔记,推荐的还是比较准确的。如果变更Embedding Model,需要重建整个库的索引,但也很快,我这有1000+条笔记大概半分钟索引完毕。

奇怪的是,在添加自定义的Embedding Model时,即使是用的同一个嵌入式模型(比如BAAI/bge-m3),如果选择Provider为SiliconFlow,再填写API Key,就会提示Key错误,如果选择Provider为OpenAI Format,并填写硅基流动的Base URL和API Key,就能正常添加并且开始indexing。

另外,值得一提的是,在Copilot中使用DeepSeek-R1或者其它支持深度思考的模型时,也可以看到思考过程。

然后说说用法。

在Obsidian主界面点击左侧工具栏的“对话窗口”标志即可在右侧窗口启动Copliot插件,之后可以使用Chat或Vault QA两种模式。

Chat模式可以进行三种问答:直接问AI任何问题;输入“双方括号”(表示引用某条笔记)再输入命令,可针对引用的笔记进行回答;输入大括号{activeNote}并提出问题,可针对当前活跃的笔记进行问答。

vault QA模式可以结合你选中的笔记或者某个文件夹中所有笔记的内容进行问答,比如结合这些笔记做一些总结等等,这两种模式下AI回答的内容都可以复制、插入到笔记中,或者重新生成回答。并且在这两种模式下与AI对话的内容都会默认保存到copilot>copilot-conversations文件夹下,便于回顾。

在使用Obsidian的过程中,也可以在笔记里选中一段内容,点击右键菜单Copilot,进行语法修正、翻译、总结、简化、扩写等等操作,输出结果可以直接插入到笔记中。

七、优势和不足

优势:

1、界面超级简洁,没有任何的装饰,使用过程中响应速度很快。

2、如果不设置同步机制,所有的笔记都是纯本地存储,更加安全。

3、有大量的插件可以自行安装,扩展应用的功能,可以在社区插件市场里下载安装。

4、支持macOS、Windows、Linux、Android、iOS这些主流平台,并且在不同平台上的功能、文件结构、使用方法都基本一致。

不足:

1、Obsidian是原生Markdown笔记,不知道大家是不是都习惯用Markdown语法,就我个人而言,日常笔记内容以文字为主,但Obsidian不方便保存一些带有符号的文字,比如想用井号体现微博话题,想用星号备注一些内容,就会被识别成Markdown语法,变成tag和斜体字,再比如把加粗的文字粘贴到word文档或者其它地方,就会出现一组双星号(MarkDown语法标记),还需要手动删除。

2、安装的插件如果比较多,或者保存的笔记比较多的话,冷启动会比较慢。

3、如果使用的是多台苹果设备,在多设备间通过iCloud同步会很方便,而且速度很快,但如果是其它设备,比如安卓手机和苹果电脑、Windows电脑,要么订阅Obsidian的同步服务,要么依赖Remotely Save插件和OneDrive,略显繁琐,且有时会同步失败。

不定期更新App推荐及使用心得,欢迎关注。

最初发布于2025年12月26日