AccessAI 开源升级:全新界面、多模型与历史管理

2026-06-14阅读 0热度 0
开源项目

上次分享的 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 兼容平台、自建的模型服务。只要 API 格式兼容 OpenAI Chat Completions 标准,就能直接接入。

三、对话历史:AI 终于能“记住”你说过什么了

上一版的问题是单轮对话——你问一句,AI 答一句,互相之间没有关联。如果你说“帮我写一段 VBA 代码”,然后接着说“把它改成支持错误处理”,AI 并不知道“它”指的是什么。

新版引入了模块级变量 m_colHistory 来维护对话历史。每次提问时,所有历史消息都会一起发给 AI:

Private m_colHistory As Collection
Private m_sLastAnswer As String
Private m_sSessionId As String

每次提问的流程:

  1. 将用户消息追加到 m_colHistory
  2. 把完整历史传入请求体,AI 就能理解上下文。
  3. AI 回复后,将助手消息也追加到历史。

点击「新对话」按钮,会重置整个历史集合,开启全新的会话。

数据库持久化:关掉 Access 也不丢

光有内存里的历史还不够。一旦关掉数据库,对话就全没了。

新版会自动创建 tblChatHistory 表,结构如下:

字段类型作用
ID自增长主键
SessionID文本会话标识,区分不同对话
Provider文本使用的 AI 模型
Role文本user 或 assistant
Content备注消息内容
CreatedAt日期创建时间

每次对话结束后,用户问题和 AI 回复都会自动写入这张表——不需要手动操作,也不需要额外配置。

表的创建也是全自动的。在首次运行 CreateAIForm 时,系统会检查表是否存在,不存在就自动建。用户完全不需要关心数据库结构。

历史会话管理窗体

有了持久化数据,自然需要查看和管理的入口。新增的 frmChatHistory 窗体通过主窗体顶栏的「历史记录」按钮打开,功能包括:

  1. 浏览会话:下拉框列出所有历史会话,按时间倒序排列,显示首条消息预览。
  2. 查看详情:选择某个会话后,在右侧区域以富文本格式展示完整对话内容。
  3. 加载对话:将历史会话加载回主窗体,继续之前的对话。
  4. 删除记录:删除不需要的历史会话。

这个窗体同样是程序自动生成的,运行 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 数据库:

  1. JsonConverter.bas — JSON 解析库
  2. 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。

九、总结

这次更新的核心变化可以总结为四句话:

  1. 四大模型随意切 — 不再绑定单一模型,内置 DeepSeek、通义千问、文心一言、Kimi,还能自定义接入。
  2. 对话有了记忆 — 支持多轮对话,AI 能理解上下文,对话记录还能持久保存。
  3. 历史可以管理 — 浏览、加载、删除历史会话,全部自动化。
  4. 界面焕然一新 — 从传统 Access 样式升级为 DeepSeek / Gemini 风格的现代 UI。

AccessAI 想做的事情始终没变:让 Access 开发者能用最低的成本,把 AI 能力接入现有系统。

两个模块、一行命令、几分钟搞定。不需要重写系统,不需要学新框架,在你熟悉的 Access 环境里就能完成。


完整源码

项目已开源,GitHub 地址:https://github.com/miaowei2/accessAI,包含:

  • Module_Markdown.bas — 核心模块(AI 调用 + Markdown 渲染 + 窗体生成 + 历史管理)
  • JsonConverter.bas — JSON 解析模块
  • AI.accdb — 示例数据库,导入即可体验

下载后直接导入即可使用,无需任何额外配置。


参考资料

  1. DeepSeek 平台:https://platform.deepseek.com/
  2. 通义千问(阿里云百炼):https://dashscope.console.aliyun.com/
  3. 文心一言(百度千帆):https://console.bce.baidu.com/qianfan/
  4. Kimi(月之暗面):https://platform.moonshot.cn/
  5. VBA-JSON:https://github.com/VBA-tools/VBA-JSON

写在最后

上一篇文章发出后,有不少朋友留言表示 Access 能接 AI 这件事本身就让人意外。确实,Access 在很多人眼里已经是“上一代工具”了。但现实是,大量企业的核心业务系统至今仍跑在 Access 上。

与其争论它是不是过时了,不如想办法让它跟上节奏。这次更新把多模型、对话记忆、持久化存储、现代 UI 全部打包带上了。下一步还会继续迭代。

免责声明

本网站新闻资讯均来自公开渠道,力求准确但不保证绝对无误,内容观点仅代表作者本人,与本站无关。若涉及侵权,请联系我们处理。本站保留对声明的修改权,最终解释权归本站所有。

相关阅读

更多
欢迎回来 登录或注册后,可保存提示词和历史记录
登录后可同步收藏、历史记录和常用模板
注册即表示同意服务条款与隐私政策