AccessAI 开源项目更新:新界面、多模型、对话上下文、历史管理

AccessAI 开源项目更新:新界面、多模型、对话上下文、历史管理 hi大家好上次跟大家分享了 AccessAI 这个开源项目——用 VBA 给 Access 接上 AI 大模型。当时只支持 DeepSeek 一个模型做的是单次对话界面也比较朴素。这次直接做了一轮大更新从功能到界面全部升级。今天这篇文章就来聊聊更新了什么、怎么做的、以及为什么这么做。一、这次更新了什么先用一张表说清楚能力上一版新版本AI 模型仅 DeepSeekDeepSeek 通义千问 文心一言 Kimi下拉框一键切换自定义端点不支持支持任意 OpenAI 兼容 API填写 URL、Key、模型名称即可对话上下文单次问答无记忆自动维护对话历史AI 能记住之前的对话历史持久化无对话自动保存到 Access 数据表关掉数据库也不丢历史管理无独立窗体浏览、加载、删除历史会话界面风格标准 Access 控件参考 DeepSeek / Gemini 重新设计现代简洁流式输出✅ 支持✅ 支持无变化打字机降级✅ 支持✅ 支持无变化Markdown 渲染✅ 支持✅ 支持无变化简单来说这次更新让 AccessAI 从能用的技术验证变成了真正可以用起来的工具。二、多模型支持不只是换个 URL 那么简单为什么要做多模型上一版只支持 DeepSeek后来有人问能不能接通义千问有人问能不能接文心一言。每个人都有自己偏好的模型或者公司已经采购了某个平台的 API。如果每次都要改代码里的常量那门槛就太高了。怎么做的新版本内置了四家主流国产 AI 模型的配置 DeepSeek Private Const DS_KEY As String 你的-DeepSeek-Key Private Const DS_URL As String https://api.deepseek.com/chat/completions Private Const DS_MODEL As String deepseek-chat 通义千问 (阿里云百炼) Private Const QW_KEY As String 你的-通义千问-Key Private Const QW_URL As String https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions Private Const QW_MODEL As String qwen-plus 文心一言 (百度千帆) Private Const WX_KEY As String 你的-文心一言-Key Private Const WX_URL As String https://qianfan.baidubce.com/v2/chat/completions Private Const WX_MODEL As String ernie-4.0-8k Kimi (月之暗面) Private Const KM_KEY As String 你的-Kimi-Key Private Const KM_URL As String https://api.moonshot.cn/v1/chat/completions Private Const KM_MODEL As String moonshot-v1-8k窗体顶栏增加了一个模型下拉框选择后自动切换对应的 API 配置。核心切换逻辑在GetProviderConfig中统一管理Private Sub GetProviderConfig(ByVal sProvider As String, _ ByRef sUrl As String, _ ByRef sKey As String, _ ByRef sModel As String) Select Case sProvider Case 通义千问 sUrl QW_URL: sKey QW_KEY: sModel QW_MODEL Case 文心一言 sUrl WX_URL: sKey WX_KEY: sModel WX_MODEL Case Kimi sUrl KM_URL: sKey KM_KEY: sModel KM_MODEL Case 自定义 从窗体读取用户填写的自定义配置 ... Case Else DeepSeek (默认) sUrl DS_URL: sKey DS_KEY: sModel DS_MODEL End Select End Sub这种设计意味着你只需要配置一次 Key之后在窗体里切换模型完全没有代码改动成本。自定义端点接入任何 OpenAI 兼容 API除了内置的四家新版还支持自定义模式。在模型下拉框中选择「自定义」后窗体会显示三个额外输入框URL、Key、模型名称。这解决了几个实际场景公司内部部署的私有化模型。其他 OpenAI 兼容平台比如 OpenRouter、硅基流动等。自建的模型服务。只要 API 格式兼容 OpenAI Chat Completions 标准就能直接接入。三、对话历史AI 终于能记住你说过什么了上一版的问题上一版是单轮对话——你问一句AI 答一句互相之间没有关联。如果你说帮我写一段 VBA 代码然后接着说把它改成支持错误处理AI 并不知道它是什么。内存级对话上下文新版引入了模块级变量m_colHistory来维护对话历史。每次提问时所有历史消息都会一起发给 AIPrivate m_colHistory As Collection Private m_sLastAnswer As String Private m_sSessionId As String每次你问一个问题将用户消息追加到m_colHistory。把完整历史传入请求体AI 就能理解上下文。AI 回复后将助手消息也追加到历史。点击「新对话」按钮会重置整个历史集合开始全新的会话。数据库持久化关掉 Access 也不丢光有内存里的历史还不够。一旦关掉数据库对话就全没了。新版自动创建了tblChatHistory表结构如下字段类型作用ID自增长主键SessionID文本会话标识区分不同对话Provider文本使用的 AI 模型Role文本user 或 assistantContent备注消息内容CreatedAt日期创建时间每次对话结束后用户问题和 AI 回复都会自动写入这张表。不需要手动操作也不需要额外配置。表的创建也是全自动的——在首次运行CreateAIForm时系统会检查表是否存在不存在就自动建。历史会话管理窗体有了持久化数据自然需要查看和管理的入口。新版增加了frmChatHistory窗体通过主窗体顶栏的「历史记录」按钮打开。功能包括浏览会话— 下拉框列出所有历史会话按时间倒序排列显示首条消息预览。查看详情— 选择某个会话后在右侧区域以富文本格式展示完整对话内容。加载对话— 将历史会话加载回主窗体继续之前的对话。删除记录— 删除不需要的历史会话。这个窗体同样是程序自动生成的运行CreateHistoryForm即可创建。四、界面全面翻新从Access 味到AI 味为什么要改界面上一版的界面是标准的 Access 窗体风格——灰色背景、默认按钮、传统控件布局。功能上没问题但打开的第一眼就能感觉到这是一个传统 Access 窗体。既然是 AI 问答工具界面体验也应该跟上。这次直接参考 DeepSeek 和 Gemini 的 Web 端设计在 Access 窗体的能力范围内做了最大程度的还原。具体改了什么配色体系抛弃 Access 默认的灰色调换成白色主背景 浅灰卡片 蓝紫色强调色RGB(78, 108, 254)。整体观感干净清爽。顶栏设计白色背景 极细分隔线左侧放标题图标 ✦ AccessAI中间放模型下拉框右侧放「新对话」和「历史记录」按钮。布局参考了主流 AI 工具的顶栏。回答区域大面积白色区域用于展示 AI 回复极简边框最大化阅读空间。底部输入栏借鉴聊天界面的输入区设计浅灰卡片包裹输入框右侧是蓝紫色「发送」按钮。自定义端点区选择「自定义」时在顶栏下方展开一条浅色卡片包含 URL、Key、模型三个输入框。不需要时完全隐藏不影响正常使用。整套配色常量在代码中统一定义cBg RGB(255, 255, 255) 主背景 (纯白) cSurface RGB(247, 248, 250) 卡片/输入区 cBorder RGB(228, 231, 236) 柔和边框 cText RGB(29, 30, 32) 主要文字 cSubText RGB(134, 142, 153) 次要文字 cAccent RGB(78, 108, 254) 强调色 (紫蓝) cAccentText RGB(255, 255, 255) 强调色文字虽然 Access 窗体的 UI 能力有限没有圆角、没有阴影、没有动画但通过合理的配色、间距和布局依然可以做出不错的视觉效果。五、技术要点回顾这一轮更新涉及不少技术改动归纳几个值得讲的点。1. 请求体如何携带完整历史上一版的请求体只包含当前问题。新版需要把所有历史消息拼进去。实现方式是在BuildRequestBody中将m_colHistory集合遍历后写入 messages 数组Private Function BuildRequestBody(ByVal sQuestion As String, _ ByVal sModel As String, _ Optional ByVal bStream As Boolean False, _ Optional colHist As Collection Nothing) As String如果传入了colHist就使用完整历史否则回退单条消息。这样既支持多轮对话也兼容单轮场景。2. 会话 ID 的生成策略每次开始新对话时系统会生成一个唯一标识Private Function NewSessionId() As String Randomize NewSessionId Format$(Now, yyyymmdd_hhnnss) _ CStr(Int(Rnd() * 10000)) End Function用时间戳 随机数组合确保在单机环境下不会重复。这个 SessionID 贯穿整个对话周期也是数据库表中查询和删除的依据。3. 历史记录表的自动创建我没有要求用户手动建表而是在CreateAIForm中自动检测和创建。用 DAO 动态创建表定义、添加字段、建主键和索引。这样用户导入模块后直接运行CreateAIForm就完成了所有初始化工作不需要碰数据库结构。4. 窗体控件的动态显隐自定义端点的三个输入框URL、Key、模型名称默认隐藏。当用户在下拉框选择「自定义」时通过cboProvider_AfterUpdate事件动态控制可见性。这是 Access 窗体中常用的交互模式但放在这里能显著提升用户体验——不选自定义时完全看不到多余的东西。六、使用步骤更新版第一步导入模块和上次一样把两个.bas文件导入 Access 数据库JsonConverter.bas— JSON 解析库Module_Markdown.bas— 核心模块第二步添加引用VBA 编辑器 → 工具 → 引用 → 勾选Microsoft Scripting Runtime第三步配置 API Key打开Module_Markdown模块根据你要使用的模型修改对应的常量。只需改你实际用的模型其他保持默认 DeepSeek Private Const DS_KEY As String 你的-DeepSeek-Key 通义千问 Private Const QW_KEY As String 你的-通义千问-Key 文心一言 Private Const WX_KEY As String 你的-文心一言-Key Kimi Private Const KM_KEY As String 你的-Kimi-Key第四步创建窗体在 VBA 立即窗口运行CreateAIForm这条命令会自动创建 AI 问答窗体和历史记录数据表。完成后打开frmAI从顶栏下拉框选择模型输入问题点击「发送」即可。七、项目文件说明AccessAI/ ├── AI.accdb # 示例 Access 数据库含已导入的模块和窗体 ├── JsonConverter.bas # JSON 解析模块 (VBA-JSON v2.3.1) ├── Module_Markdown.bas # 核心模块AI 调用 Markdown 渲染 窗体生成 历史管理 └── README.md # 项目说明运行后自动生成的对象对象类型说明frmAI窗体AI 问答主窗体frmChatHistory窗体历史会话管理窗体tblChatHistory数据表对话记录持久化存储八、后续计划这次更新基本解决了多模型和对话记忆的核心需求。后续还有几个方向在做系统提示词配置— 让用户自定义 System Prompt控制 AI 的角色和行为。国外的大模型支持— 内置国外系列模型的配置。如果你有其他需求或建议欢迎在 GitHub 上提 Issue。九、总结这次更新的核心变化可以总结为四句话四大模型随意切— 不再绑定单一模型内置 DeepSeek、通义千问、文心一言、Kimi还能自定义接入。对话有了记忆— 支持多轮对话AI 能理解上下文对话记录还能持久保存。历史可以管理— 浏览、加载、删除历史会话全部自动化。界面焕然一新— 从传统 Access 样式升级为 DeepSeek / Gemini 风格的现代 UI。AccessAI 想做的事情始终没变让 Access 开发者能用最低的成本把 AI 能力接入现有系统。两个模块、一行命令、几分钟搞定。不需要重写系统不需要学新框架在你熟悉的 Access 环境里就能完成。完整源码项目已开源欢迎 StarGitHub 地址https://github.com/miaowei2/accessAI包含Module_Markdown.bas— 核心模块AI 调用 Markdown 渲染 窗体生成 历史管理JsonConverter.bas— JSON 解析模块AI.accdb— 示例数据库导入即可体验下载后直接导入即可使用无需任何额外配置。参考资料DeepSeek 平台https://platform.deepseek.com/通义千问阿里云百炼https://dashscope.console.aliyun.com/文心一言百度千帆https://console.bce.baidu.com/qianfan/Kimi月之暗面https://platform.moonshot.cn/VBA-JSONhttps://github.com/VBA-tools/VBA-JSON写在最后上一篇文章发出后有不少朋友留言表示 Access 能接 AI 这件事本身就让人意外。确实Access 在很多人眼里已经是上一代工具了。但现实是大量企业的核心业务系统至今仍跑在 Access 上。与其争论它是不是过时了不如想办法让它跟上节奏。这次更新把多模型、对话记忆、持久化存储、现代 UI 全部打包带上了。下一步还会继续迭代。觉得有用请帮忙点个「赞」和「在看」转发给身边做 Access 开发的朋友让更多人看到。