我又用AI做了一个智能表单平台,跟AI对话就能生成表单,也开源了
本文已收录专栏「一个人用AI做工具矩阵」,更多AI+开发实战持续更新中。
上周我开源了智播坊——一个AI口播视频生成平台。有朋友问我:你一个人做这么多项目,到底是先有鸡还是先有蛋?
答案是:先有的蛋。
智枢矩阵其实最早做的是智能表单生成平台,口播视频反而后做的。当时我想做问卷调查,发现市面上的表单工具要么功能死板,要么得手动拖拽半天,灵机一动——能不能跟AI对话,让它帮我建表单?
于是就做了这个:https://www.zhishujuzhen.com
现在它也开源了:https://gitee.com/zhang-dongtao/zhishu-matrix-open
演示视频:
智枢矩阵表单生成
一.六个AI能力,不是一开始就规划好的
最开始我只想做"AI对话生成表单"这一个点。但做着做着发现,表单的完整生命周期有三个环节都缺AI,最后一步步做成了6个能力:
|
环节 |
AI能力 |
做出来的契机 |
|
创建 |
AI多轮对话生成 |
最初就想做这个 |
|
创建 |
智能改写(3种风格) |
用户反馈标题和选项文案写不好 |
|
创建 |
OCR识别 |
有人想从身份证/营业执照直接提取信息建表单 |
|
发布 |
智能评分 |
我自己的表单发布后才发现逻辑设置错了,200份数据全废 |
|
回收 |
智能洞察 |
不想每次都导出Excel自己看 |
|
回收 |
预测分析 |
回收数据够多后,想看看趋势走向 |
三个环节、六个能力,不是规划出来的,是踩坑踩出来的。 下面挑几个关键的讲讲。
1.AI多轮对话生成:Session管理 + 文件解析
这是整个项目的起点。核心是 /form/chat 接口,用 sessionStore 维护对话历史,支持文件上传解析。
// 核心逻辑:会话管理 + 文件内容合并
router.post('/chat', authMiddleware, checkAIQuota, upload.array('files', 3), async (req, res) => {
const { sessionId, userInput, form: clientForm } = req.body;
// 获取或创建会话
const session = getOrCreateSession(sessionId, userId);
const currentForm = clientForm || session.form || { title: '未命名表单', fields: [] };
// 只取最近10条历史,节省 token
const recentHistory = session.history.slice(-10);
// 处理上传的文件(PDF/Word/Excel)
let combinedInput = userInput;
if (files.length > 0) {
const parseResult = await parseFiles(files);
if (parseResult.totalText) {
combinedInput = `${userInput}\n\n[附件内容]\n${parseResult.totalText}`;
}
}
// 调用火山方舟 API
const response = await fetch('https://ark.cn-beijing.volces.com/api/v3/chat/completions', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${process.env.ARK_API_KEY}`
},
body: JSON.stringify({
model: 'doubao-seed-1-6-251015',
messages: [
{ role: 'system', content: systemPrompt },
...recentHistory,
{ role: 'user', content: combinedInput }
],
temperature: 0.7,
max_tokens: 1200
})
});
systemPrompt 里我把当前表单状态、对话历史、支持的字段类型、分页/条件显示/计算字段的规则全塞进去了。AI返回JSON,解析后更新session。
踩坑提醒: AI返回的JSON经常不干净——有时被包在 json 里,有时还带注释,有时直接截断。我的解析做了三层兜底:
// 第一层:清理 markdown 包裹和注释
let cleanContent = aiContent.trim();
if (cleanContent.startsWith('```json')) cleanContent = cleanContent.slice(7);
if (cleanContent.endsWith('```')) cleanContent = cleanContent.slice(0, -3);
cleanContent = cleanContent.replace(/\/\*[\s\S]*?\*\//g, '').replace(/\/\/.*$/gm, '');
// 第二层:直接 JSON.parse
formData = JSON.parse(cleanContent.trim());
// 第三层:解析失败时用正则提取所有完整字段对象
const fieldRegex = /\{"type"\s*:\s*"([^"]*)"[^}]*"label"\s*:\s*"([^"]*)"[^}]*\}/g;
// 逐个解析字段,补全缺失属性
第三层正则兜底很关键——AI有时候返回的JSON在中间截断了,直接parse会崩,但正则能把完整的字段一个一个捞出来,不至于整份作废。
2.智能评分:规则引擎,不是AI
这个功能是被坑出来的。我最早做的一个表单,发布后回收了200多份数据,才发现有个必填题的逻辑设置错了,导致大部分回答无效。问题发现太晚 = 数据全废。
一开始我想用AI来评分,但发现这事儿不需要AI——规则更准更稳定。我写了个纯规则引擎,从4个维度打分:
const scores = {
completeness: 0, // 完整性 (30分)
rationality: 0, // 合理性 (25分)
userExperience: 0, // 用户体验 (25分)
professionalism: 0 // 专业性 (20分)
};
// 完整性:标题(10) + 至少1个字段(10) + 至少1个必填(10)
if (schema.title && schema.title.trim()) scores.completeness += 10;
if (fields.length >= 1) scores.completeness += 10;
if (requiredFields.length >= 1) scores.completeness += 10;
// 合理性:字段3-15个最佳(15) + 无重复(10)
if (fields.length >= 3 && fields.length <= 15) scores.rationality += 15;
else if (fields.length > 15) {
scores.rationality += 10;
suggestions.push('字段数量较多,建议精简或分组');
}
// 用户体验:有占位提示(10) + 有说明文字(10) + 有分组(5)
// 专业性:字段类型语义匹配(10) + 有格式校验(10)
if (f.type === 'email' && f.label?.includes('邮箱')) return true; // 类型匹配
A级(90-100)才算优秀,我自己的第一个表单只拿了C级 😅 规则引擎的好处是零延迟、零成本、结果可解释。不是什么都要用AI,该用规则的时候用规则。
3.智能改写
这个是从用户反馈来的。有人跟我说:"AI生成的表单标题太正式了,填的人觉得冷冰冰的。"
于是做了三种风格切换:
|
风格 |
效果 |
适用场景 |
|
简洁 |
去冗余、精炼文案 |
信息采集、内部调查 |
|
正式 |
商务规范 |
企业场景、对外表单 |
|
友好 |
温馨提示、拉近距离 |
客户满意度、社区活动 |
接口是 POST /form/rewrite-fields,改动不大但效果很明显——改写后表单的填写完成率确实有提升。
4.智能洞察 + 预测分析
表单回收后,传统做法是导出Excel慢慢看。我做了两个AI分析能力:
• 洞察(POST /form/:id/insight):自动分析最近7天的提交数据,生成每日趋势和关键发现
• 预测(GET /form/:id/predict):基于历史提交数据,预测未来走势
二.还有个容易被忽略的功能:表单嵌入
做完AI能力后,我又发现一个问题:表单分享出去靠链接,但很多场景需要把表单嵌到自己的网站里。比如公司官网的"联系我们"页面、活动的报名页。
于是我写了个 embed.js,零依赖,纯原生JavaScript,600多行:
<div data-share-id="你的shareId"></div>
<script src="https://zhishujuzhen.com/embed.js"></script>
两行代码,表单就嵌进去了。核心逻辑是:检测页面上所有 [data-share-id] 容器 → 拉取表单JSON → 用原生DOM渲染表单 → 处理提交。
// 渲染不同类型的字段
function createFieldElement(field, styles) {
switch (field.type) {
case 'select': // 下拉框
case 'radio': // 单选按钮组
case 'checkbox': // 复选框组
case 'rating': // 星级评分(可点击交互)
case 'range': // 滑块(实时数值显示)
case 'file': // 文件上传
// ... 支持14种字段类型
}
}
// 提交处理:收集数据 + 设备信息
form.addEventListener('submit', function(e) {
e.preventDefault();
fetch(CONFIG.apiBase + '/api/public/form/' + formData.shareId + '/submit', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
data: data,
deviceType: /Mobile|Android|iPhone/i.test(navigator.userAgent) ? 'Mobile' : 'Desktop'
})
});
});
还有个细节我很满意——自动检测宿主页面的亮色/暗色主题:
function detectTheme() {
// 优先检测 prefers-color-scheme
if (window.matchMedia?.('(prefers-color-scheme: dark)').matches) return 'dark';
// 退而检测页面背景色亮度
var rgb = window.getComputedStyle(document.body).backgroundColor.match(/\d+/g);
var brightness = (rgb[0]*299 + rgb[1]*587 + rgb[2]*114) / 1000;
return brightness < 128 ? 'dark' : 'light';
}
这个功能技术上不复杂,但实用性很高——对我来说是个教训:有时候用户需要的不是更强的AI,而是更方便的部署方式。
三.技术栈
|
层 |
技术 |
|
前端 |
Vue 3 + Vite + Element Plus + Tailwind CSS + Pinia |
|
后端 |
Express + Prisma ORM + JWT + bcrypt |
|
数据库 |
SQLite(开发)/ MySQL(生产) |
|
AI服务 |
火山方舟 doubao-seed 模型 |
|
存储 |
腾讯云 COS |
|
定时任务 |
node-schedule |
前端13个页面视图、20个表单编辑器组件、20种字段类型(9基础+11高级)。后端10个路由模块,API接口约30个。整个项目一个人完全能hold住。
之前专栏里的4篇技术文章都是从这个项目里拆出来的:
• 《Vue3表单预览区拖拽排序的实现原理》
• 《表单编辑器中的条件逻辑:不止是"且/或",还能无限嵌套》
• 《多页表单的实现:从分页到进度条,一套优雅的解决方案》
• 《AI生成表单:从自然语言到JSON Schema,我是怎么做到的》
四.为什么要开源?
跟智播坊一样的逻辑——个人开发者卖源码,获客成本比开发成本还高。
不如开源出来:
• 让需要表单工具的人可以直接部署使用
• 收集真实用户反馈,把AI能力打磨得更准
• 通过内容和技术实力,吸引需要商业授权的团队
开源版包含所有AI功能,MIT协议。商业版多了私有化部署、自定义品牌、API接口等企业级能力。
五.怎么跑起来?
// bash
# 克隆
git clone https://gitee.com/zhang-dongtao/zhishu-matrix-open.git
cd zhishu-matrix-open
# 后端
cd server
npm install
cp .env.example .env # 填入火山方舟API Key等配置
npx prisma generate
npx prisma db push
npm run dev
# 前端(新终端)
cd client
npm install
npm run dev
前端 http://localhost:5173,后端API http://localhost:3001/api。生产构建用 npm run build,部署脚本和Nginx配置都在仓库里。
六.写在最后
做了这两个项目之后,我越来越确信一件事:AI不是替代开发者,而是放大开发者的能力边界。
一个人做两个产品,以前觉得不可能。现在我用DeepSeek梳理需求和设计逻辑,CodeBuddy帮我写代码,我主要做架构决策和踩坑调试。表单平台从v1.0到v2.0,核心开发时间也就一周多。
当然AI也不是万能的。比如评分系统,我试过用AI打分,结果不稳定还慢,最后发现规则引擎更靠谱。再比如AI返回的JSON解析,各种截断和格式问题,不写兜底逻辑前端直接崩。这些还是得自己硬啃。
智枢矩阵 Gitee 仓库:https://gitee.com/zhang-dongtao/zhishu-matrix-open
觉得有用的话给个 Star ⭐,这对独立开发者来说真的意义重大。
你们平时做问卷调查/信息收集用什么工具? 金数据、问卷星、腾讯问卷、还是自建?有没有觉得现有工具哪个环节特别卡、特别想用AI解决的?评论区说说你的痛点,我看看能不能加到下个版本里 👇
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)