AccessAI 这个开源项目,我断断续续维护了不短时间。起因并不复杂——我自己的工作日常离不开多模型并存:写代码时习惯调用代码理解能力强一些的模型,改文档时换长文本处理顺手的,头脑风暴又会想切到表达风格更松弛的另一个模型。过去在这几个服务之间来回跳,最累的从来不是等回答,而是每次切换工具都要把前因后果重新给模型讲一遍。AccessAI 最早的版本就是从这里长出来的:把多个模型收进同一个入口,把对话上下文留在自己能掌控的本地,把历史记录整理成随时能翻回来的资产。
这次更新的标题里四个词没有一个是虚的:新界面、多模型、对话上下文、历史管理。我按实际开发的顺序把这四条主线拆开讲,再把开发过程中踩过的那几个大坑一并交代清楚。如果你也在做同类聚合类 AI 工具,或者只是对“怎么把多个模型服务真正用顺手”这件事感兴趣,这篇内容应该能给你省不少试错时间。
1. 为什么会有 AccessAI:不是模型不够,而是会话上下文散了
1.1 我原来的多模型工作流,乱在哪
在动手写 AccessAI 之前,我的工作状态是典型的“多标签页流浪”。一个浏览器窗口里开着多个模型服务的对话框,每个对话框都有一段独立的故事线。比如上午在 A 模型里讨论某段代码的重构方案,下午要换到 B 模型去让它做 Code Review,问题就来了:B 模型根本不知道上午讨论了什么。
那时候唯一能做的,就是把 A 模型会话里的关键代码、约束条件、已经讨论过的结论手动复制出来,重新贴到 B 模型里。一次两次还能接受,次数多了你会明显感觉到思路被打断。更难受的是历史记录分散在各家手里:几天后想回忆当时为什么那么设计,得先回忆当时用的是哪个服务、大概在哪个日期,然后一个页面一个页面翻。
这种“上下文断裂”其实是很多 AI 工具使用者的常态,不一定是因为模型能力不行,而是会话本身没有一个统一归属地。
1.2 为什么没有直接选现成全家桶
市面上并不是没有一站式聚合产品,但我要的不是一个多入口套壳,而是几个更具体的东西:
第一,数据要留在本地。聊天记录包含大量项目细节甚至草稿,我不太想每一次思考都默认沉淀到别人服务器上。
第二,能自由接不同模型。今天大家说 A 模型最强,明天可能 B 模型在某些任务上反超,如果工具本身把模型写死,升级成本很高。AccessAI 要做的是“随时换引擎”,而不是“选定一辆车”。
第三,界面交互要按自己习惯长。多模型工具最大的价值,是让人把注意力放在对话内容而非工具本身。现成产品总是有些交互不符合直觉,小到切换模型的点击次数,大到历史记录的组织方式,自己维护一个开源项目的自由度完全不一样。
所以 AccessAI 不是想把所有模型能力“包一层皮”给你,而是想做一个本地优先、支持多模型、带完整会话和历史的对话基础设施。
1.3 这次更新具体动了哪四块
这里可以先给一个全景,后面每个章节再展开:
- 新界面:把主界面从“功能型控制台”改成“对话型工作台”,把会话、消息、模型状态之间的层级理顺。
- 多模型:新增统一的模型接入抽象,不再每个模型单独写一套调用逻辑,同时支持同一会话内快速切换模型。
- 对话上下文:解决多轮对话真正“接得上”的问题,包括 token 预算控制、超长会话压缩、切换模型后上下文完整性处理。
- 历史管理:引入结构化存储与会话索引,支持搜索、导入导出、清理策略,重构记忆归属感。
这四条线看起来互不相关,实际动手做以后会发现它们深度耦合:界面要显示上下文占用,就得从对话上下文模块拿数据;对话上下文要组装历史,又依赖历史管理存储的消息;多模型 Provider 的能力差异又会反向影响上下文压缩策略。这也是我为什么坚持把这些事完整讲一遍,而不是只发一个 Release Notes。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 新界面:把“管理工具”改成“能安心聊天的桌子”
2.1 旧版为什么到了必须改的时候
AccessAI 早期版本的功能并不少,但界面的底层思维是“配置管理”。主窗口有一个巨大的设置区,模型参数、Prompt 模板、历史列表全都挤在一起。功能确实能用,问题也很显眼:每次想发起一次对话,得先经过一堆配置项的“审视”,而多数情况下我只是想快速开口问一句。
界面设计上有一个我一直认同的评价标准:一个工具如果让用户频繁进行无意识的状态整理,那它就不是在工作,而是在制造工作。旧版的会话列表、消息正文、模型参数之间缺少清晰主次,尤其当会话变长以后,用户很难一眼看出当前对话处在什么状态、用的是哪个模型、上下文还剩多少。
这次改版本质上不是“换皮肤”,而是把内容层级重新划了一遍。
2.2 新主界面怎么布局
新界面采用的是一个非常克制的三栏结构:
- 左侧是会话历史栏,宽度默认可折叠,用来做会话列表、搜索和新建会话入口。
- 中间是主对话流,所有的消息渲染、流式输出、代码块交互都集中在这里。
- 右侧是当前对话的上下文检查器,展示当前使用的模型、上下文占用估算、临时总结状态等实时信息。
这套结构和很多代码编辑器的布局逻辑是一致的:左侧管“文件”,中间管“编辑”,右侧管“状态”。会话历史对应“文件树”,对话流对应“编辑器”,右侧则像一个集成终端和问题面板。好处是,用户找到某一会话就像在 IDE 里打开历史文件,切换成本明显降低,不会在多个窗口里迷路。
中间主对话流设计上只有一个核心原则:消息必须连续、可追溯。同一会话的消息按时间顺序单向滚动,每条消息带上模型标签和相对时间,不用刻意强调“这是 A 模型回答的”,而是把它当成对话流中的一个自然组成部分。如果某条回答你用了另一个模型重新生成,旧消息仍然保留,不覆盖,只把新的结果追加进去,方便后续对照。
2.3 快速切换模型与上下文占用提示
多模型界面最大的交互难点是“切换模型的成本”。旧版里切换模型需要进入设置面板,改完以后再回到会话,来回耗掉不少注意力。新版把模型切换器直接做到输入框上方
