Access 接入 AI 大模型:VBA 流式交互与 Markdown 渲染开源方案
作者:本站 来源:本站
2026-04-09 11:06 1476阅读
欢迎了解!
项目背景
尽管 AI 大模型已广泛应用于各类开发环境,但 Access 领域进展缓慢。主要原因在于 VBA 缺乏原生的 HTTP 流式支持、Markdown 渲染能力及中文编码处理较为繁琐。若要在 Access 窗体内集成 AI,开发者需自行攻克 HTTP 请求、JSON 组装、SSE 解析及 UTF-8 编码等诸多技术难点。
为此我开发了 accessAI 工具库,打包解决了上述问题。仅需导入两个 .bas 模块即可启用,具备流式输出、Markdown 富文本渲染及一键生成问答窗体的功能,开箱即用。现将其源码开源,链接位于文末。
一、核心功能亮点
功能项 | 详细描述 |
AI 智能问答 | 支持在 Access 界面直接调用 DeepSeek 进行提问 |
流式输出 | 借助 curl 配合 SSE 协议实现逐字实时显示 |
兼容性处理 | 若无 curl 环境,自动切换至同步请求加打字机模式 |
Markdown 解析 | 将模型返回的 Markdown 转换为 Access 支持的富文本 HTML |
自动生成界面 | 通过代码调用自动创建问答窗体与 Markdown 查看器 |
UTF-8 适配 | 确保中文请求与响应无乱码现象 |
这些功能的组合,意味着无需推翻现有系统,便可为 Access 项目快速增添 AI 问答、文本生成及内容格式化展示的能力。
二、架构设计与文件组成
目录中包含的核心组件并不多:
文件名 | 用途说明 |
AI.accdb | 演示数据库,含已导入模块与窗体 |
Module_Markdown.bas | 核心逻辑,负责 AI 调用、渲染及窗体生成 |
JsonConverter.bas | JSON 解析组件,基于 VBA-JSON 封装 |
README.md | 项目文档与快速上手指南 |
从结构来看,这遵循了适合 Access 开发者的务实路线:
- 不依赖复杂的外部框架。
- 充分利用 VBA 原生能力与系统组件。
- 将复杂逻辑封装于独立模块内。
- 优先保证可运行性而非过度追求架构。
这种设计理念非常实际。对于多数 Access 场景而言,关键在于能否快速导入、配置与验证,而非抽象设计的优雅程度。
三、技术原理分析:如何在 Access 中实现 AI 体验
这个开源项目的核心价值不在于界面,而在于对关键技术难题的处理。
1. 请求构建:避免手动拼接 JSON
项目中未直接使用字符串拼接 JSON,而是利用字典和集合构造请求体,再通过 JsonConverter 统一序列化。
此举带来两大优势:
- 规避引号转义、换行符及特殊字符处理不当的问题。
- 后续扩展模型参数时更易维护。
请求体构建的核心逻辑如下:
Private Function BuildDeepSeekRequestBody(ByVal sQuestion As String, _
Optional ByVal bStream As Boolean = False) As String
Dim oRoot As Object
Dim oMsg As Object
Dim colMessages As Collection
Set oRoot = CreateObject("Scripting.Dictionary")
Set oMsg = CreateObject("Scripting.Dictionary")
Set colMessages = New Collection
oMsg.Add "role", "user"
oMsg.Add "content", sQuestion
colMessages.Add oMsg
oRoot.Add "model", API_MODEL
oRoot.Add "messages", colMessages
oRoot.Add "temperature", 0.7
oRoot.Add "max_tokens", 8192
If bStream Then oRoot.Add "stream", True
BuildDeepSeekRequestBody = JsonConverter.ConvertToJson(oRoot)
End Function这段实现虽不复杂却至关重要。许多 Access 调用 Web API 的失败案例,往往源于网络之外的 JSON 拼装细节错误。
2. 流式输出:借助 curl+SSE 突破限制
Access 和 VBA 本身对现代 AI 接口的流式返回支持有限。accessAI 采用的策略是:
- 先将请求体保存为临时 JSON 文件。
- 调用系统内置 curl 发起请求。
- 利用 SSE 方式接收模型分段输出。
- 将响应写入临时文件。
- VBA 定时轮询该临时文件。
- 解析 data 行中的 delta.content 并实时刷新至窗体。
此方案优势显著:
关键点 | 价值体现 |
利用 curl | 绕过 VBA 对流式 HTTP 支持的不足 |
使用临时文件 | 简化进程间数据交换流程 |
轮询解析 SSE | 在 Access 环境下达成近实时输出 |
分段刷新 UI | 改善交互体验,消除长时间等待感 |
这是典型的“老平台兼容新接口”的工程思路:不硬碰硬,而是借用系统现有工具拆解难题。
3. 回退机制:非流式环境亦可用
项目并未绑定单一方案。
若系统中缺失 curl,会自动切换至同步请求模式,并叠加“打字机效果”,使结果逐段呈现而非一次性弹出。
这一步十分关键,因为企业环境各异:
- 部分机器系统版本较旧。
- 部分环境权限受限。
- 部分客户端组件不完整。
若无此回退方案,项目仅在少数机器上表现良好。现在的双通道设计显然更贴合真实业务需求。
4. Markdown 渲染:提升输出可读性
大模型返回的内容常包含结构化 Markdown。若直接塞入文本框,体验较差。
accessAI 在模块中实现了 Markdown 到 Access 富文本 HTML 的转换,支持:
- 标题层级。
- 粗体、斜体及粗斜体。
- 删除线样式。
- 行内代码与代码块。
- 有序与无序列表。
- 引用块格式。
- 水平分割线。
- 链接和图片占位提示。
其思路并非追求完整的 Markdown 标准,而是围绕 Access 富文本控件支持的 HTML 子集做适配。即追求“在 Access 里显示效果最好”,而非“实现全功能 Markdown 引擎”。
这是一种非常合理的取舍。
5. UTF-8 处理:避开常见编码坑
项目专门处理了 UTF-8 读写问题,包括:
- 使用 ADODB.Stream 读写 UTF-8 内容。
- 写入时去除 BOM 头。
- 读取响应时将 UTF-8 转换为 VBA 字符串。
这对中文用户尤为关键。
若无此处理,常见问题包括:
- 中文提问导致请求异常。
- AI 返回中文出现乱码。
- 流式响应中断后解析失败。
许多人对接 API 失败,往往不是接口文档问题,而是编码细节。accessAI 提前解决了这一隐患。
四、接入步骤:如何集成到自己的项目
第一步:导入基础模块
将以下两个模块导入 Access 数据库:
- JsonConverter.bas
- Module_Markdown.bas
其中,JsonConverter.bas 负责 JSON 解析,Module_Markdown.bas 为核心模块。
第二步:添加 VBA 引用
打开 VBA 编辑器:
工具 → 引用
勾选此项:
Microsoft Scripting Runtime
这是字典对象等功能的基础依赖。
第三步:配置接口参数
修改模块中的常量配置,填入自己的 API Key。目前仅支持 deepseek,后续计划接入更多大模型!
Private Const API_KEY As String = "你的 API Key"
Private Const API_URL As String = "https://api.deepseek.com/chat/completions"
Private Const API_MODEL As String = "deepseek-chat"若后续扩展更多模型,此处将是自然的配置入口。
第四步:一键生成 AI 问答窗体
在 VBA 立即窗口执行:
CreateAIForm 执行后,项目将自动创建名为 frmAI 的窗体,并生成核心控件:
控件名 | 功能说明 |
txtQ | 输入问题区域 |
btnAsk | 提交查询按钮 |
lblMsg | 状态显示标签 |
txtAnswer | AI 返回结果显示区 |
运行效果预览
动图为 GIF 截图示例

五、实际业务应用场景
列举几个贴近业务的用法。
场景一:单据录入辅助
在采购单、入库单、售后记录、客户拜访记录等表单中,用户录入基础信息后,可让 AI 自动补充:
- 备注说明。
- 风险提示。
- 标准化描述。
- 后续处理建议。
此类需求本质无需复杂对话,只需将当前表单字段拼成提示词即可。
场景二:内部知识问答
若 Access 系统是部门工作平台,可将 AI 问答作为“业务帮助入口”,例如:
- 某字段填写规范。
- 特定异常状态含义。
- 单据流程下一步骤。
- 查询条件组合方法。
相比翻阅帮助文档,用户体验更为直接。
场景三:报表解读与总结
Access 系统常有现成查询和统计报表。将结果转为结构化文本后,交由 AI 处理:
- 本月数据摘要。
- 异常点说明。
- 趋势概括。
- 管理层汇报草稿。
此类场景不要求完全自动化,但作为“初稿生成器”极合适。
场景四:文本规范化处理
针对售后记录、巡检记录、客服备注、生产异常说明等自由文本字段,AI 可承担:
- 语句润色。
- 内容归纳。
- 标准术语替换。
- 风险标签提取。
Access 在企业常承担轻量信息系统角色,而此类文本处理需求频率极高。
六、结语与展望
我认为该项目最有价值的地方,是嵌入现有业务系统的可行性。主要特点如下:
- 使用 VBA 构造标准聊天请求,并通过 JSON 序列化降低错误率。
- 使用 curl + SSE 在 Access 中实现流式输出体验。
- 通过同步回退 + 打字机效果,兼顾不同 Windows 环境。
- 将 Markdown 转为 Access 富文本 HTML,提升结果可读性。
- 通过自动建窗体,降低 AI 功能接入和演示成本。
若您从事 Access 开发,很值得深入研究。它展示的不仅是孤立技巧,而是一条完整落地路径:如何在不重写系统前提下,为 Access 补上 AI 能力。
测试环境建议参考:
- Microsoft Access 2010 及以上,推荐 2016、2019、365。
- Windows 7 及以上操作系统。
- 如需更佳流式体验,建议 Windows 10 1803 及以上。
参考资料
- DeepSeek 平台:https://platform.deepseek.com/
- VBA-JSON:https://github.com/VBA-tools/VBA-JSON
完整源码获取
项目已开源,欢迎 Star:
GitHub 地址:
https://github.com/miaowei2/accessAI
包含:
- Module_Markdown.bas — 核心模块(AI 调用 + Markdown 渲染 + 窗体生成)
- JsonConverter.bas — JSON 解析模块
- AI.accdb — 示例数据库,导入即可体验
下载后直接导入即可使用,无需额外配置。
写在最后
Access 虽“老”,但在中小企业、政府机关、制造业中仍有广泛应用。多年运行的 Access 系统承载着核心业务数据,短期内难以迁移。
与其被动淘汰,不如用技术手段赋予新能力。AI 大模型接入看似门槛高,但 accessAI 已跑通核心链路——两个模块、一行命令、几分钟即可在 Access 系统内实现 AI 问答功能。
若您的团队正在使用 Access,或您是一名 Access 开发者,欢迎试用此开源工具。 觉得有用,请帮忙转发给更多需要的人。
上一篇
下一篇
相关阅读