惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

G
Google Developers Blog
阮一峰的网络日志
阮一峰的网络日志
博客园 - 聂微东
F
Fortinet All Blogs
H
Help Net Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
D
DataBreaches.Net
MyScale Blog
MyScale Blog
B
Blog
I
InfoQ
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
GbyAI
GbyAI
Google DeepMind News
Google DeepMind News
IT之家
IT之家
The GitHub Blog
The GitHub Blog
有赞技术团队
有赞技术团队
博客园_首页
L
LangChain Blog
V
V2EX
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
The Blog of Author Tim Ferriss
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - Franky

V2EX - 技术

Local-first 软件收录站 从 X 上搬运来的白嫖 GPT Plus 教程 阿里云百炼 Coding Plan Pro 套餐 新增当日 token 限制 大家的 Claude 弹了 kyc 嘛 现在 Google 的 Gemini 和 AI 模式降智的厉害啊 用的 TAG 家的 T, ip 跳变是否影响使用 claude 同一 apple 账户能给不同 claude 账号充值么 做了个 Go 的 MCP Server 框架,一行代码把 Gin API 接入 AI 请教各位,想回归技术,如何系统学习 Agent? OpenAI GPT-IMAGE-2 提示词合集 你是说, claude opus4.6 写代码的能力不如 gpt5.4? 关于智谱 Max 套餐要不要升级续费呢? App → CLI → App ? Github 账号被 404 了,现在没法恢复,求各位大佬指点 cursor 的次数套餐以后应该都用不了新模型了 openrouter 使用国外模型 买了咸鱼低价 Gemini pro,账号差点被盗。突然发现国内诈骗成本为零 Gemini 手机版客户端登陆总是在此国家/地区无法使用 gemini 感觉 gpt 这些低价渠道要爆了 claude code 和 codex 在 vibe coding 还有质的区别吗? 阿里 Coding Plan 一天三变, Lite 版本到期不能续费了 RAG 难以让人满意啊 2026 年了,这个世界还存在互联网精神🥹 两个账号阵亡,尼区 Claude Pro 订阅 分享下最近低价 GPT Codex 的来源(源头) OpenAI 发布 Codex 重大更新:支持自动操作电脑与长期任务自动化 使用 claude 从 0 开始开发一个校友会系统可行吗 同一个 appleid 可以给不同 chatGPT 账号订阅 plus 吗? 自动驾驶项目开发建议 终于, 降智几天之后, opus4.7 出来了
我做了一个飞书多维表格/钉钉 AI 表格的简单替代品
penzi · 2026-06-22 · via V2EX - 技术

Github: https://github.com/autable/autable

主页以及文档: https://autable.github.io/

最近我在尝试把一些公司内部的流程迁移到钉钉 AI 表格, 然而发现并不顺利

  1. 钉钉审批流程同步到 AI 表格之后, 会产生多条相同编号的记录, 钉钉的表单和自动化没有任何办法处理这个问题, 因为钉钉并没有把 unique 的 record id 暴露出来
  2. 钉钉 AI 表格的 AI 非常傻, 经常做不到一些简单的表单定义和自动化流程定义
  3. nocode 的自动化对于会写代码的人完全是负生产力
  4. 最大的问题, 即使付费, 默认最高也只有单表 5 万条记录

我也调研了一下开源方案, 一个问题就是 OIDC 登录基本都是付费功能, 商业版 self-host 普遍定价比钉钉/飞书的最高级别的订阅还贵

最终, 我搓了一个符合我需求的 AI 表格

  1. 支持表格, 自动化, 表单和字段级别的权限配置
  2. 自动化, 表格都使用简单的 js 定义, AI 友好的方式
  3. 支持公式字段, 公式同样使用 js 表达
  4. 存储使用 sqlite, 运维成本低, 最初的容灾方案每天备份一次就行了
  5. 支持 OIDC, GPL 3.0 license, 永远不用担心开原版缺失关键功能

目前刚跑通一个使用案例, 可以使用自动化同步钉钉 AI 表格的数据, 已经可以渐进式迁移, 并且可以借助这个打通钉钉内部所有数据的同步

下面是一个周期性同步钉钉 AI 表格的 workflow.js 例子

function instances(info) {
  return {
    timer: "time.schedule",
    dingTable: "dingtalk.notable.records.list",
    fields: "table.field.create",
    rows: "table.row.upsert"
  };
}

function trigger(info) {
  return {
    instance: "timer",
    params: {
      interval_ms: 5 * 60 * 1000
    }
  };
}

function run(info) {
  const table = "同步表";
  let nextToken = "";

  while (true) {
    const page = info.instance("dingTable").exec({
      max_results: 100,
      ...(nextToken ? { next_token: nextToken } : {})
    });

    const records = page.records || [];

    info.instance("fields").exec({
      table,
      fields: fieldsOf(records)
    });

    for (const record of records) {
      info.instance("rows").exec({
        table,
        match_field: "dingtalk_record_id",
        values: valuesOf(record)
      });
    }

    nextToken = page.next_token || "";
    if (!page.has_more || !nextToken) break;
  }

  return { ok: true, table };
}

function fieldsOf(records) {
  const fields = {
    dingtalk_record_id: "string"
  };

  for (const record of records) {
    for (const name of Object.keys(record.fields || {})) {
      fields[name] = "string";
    }
  }

  return fields;
}

function valuesOf(record) {
  return {
    dingtalk_record_id: String(record.id || ""),
    ...Object.fromEntries(
      Object.entries(record.fields || {}).map(([name, value]) => [
        name,
        stableStringify(value)
      ])
    )
  };
}