本文已收录专栏「一个人用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解决的?评论区说说你的痛点,我看看能不能加到下个版本里 👇

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐