一个学生考前把整章内容重画成方框,一个开发者要解释系统却不想花半小时跟Mermaid语法较劲,一个自由职业者要把图塞进提案或README。这些人已经在手工做同一件事,Inkline想接的就是这双手。
![]()
它的做法很直接:把讲义笔记粘进去,出来一张思维导图;把“客户又提了一个需求”粘进去,出来一张决策流程图;描述一个短链服务、一张发票、一个上线周,出来的是架构图、时序图或时间线。丢一张白板照片或一页手写笔记进去,Gemma负责读图。
画完之后,图下方有个“Change it…”,一句“在API和DB之间加一个Redis缓存”就能就地改图,带撤销、重做和一段简短历史。Simpler、Balanced、Detailed三档控制笔记有多少内容被搬上页面。
模型只有一个,没有闭源兜底
写Mermaid的是开放权重模型Gemma 4,通过Ollama调用,页面负责渲染。你可以复制源码、复制一段给Notion、Obsidian或GitHub用的Markdown块、导出SVG、PNG或矢量PDF,也可以生成一个短链,打开就是同一张图。
页面顶部有个开关决定模型跑在哪。带锁的Private意味着localhost Ollama,笔记留在本机;Cloud则是Ollama Cloud。服务端根据请求里的provider字段解析出base URL,同一张桌子两种跑法。如果选了Private而Ollama没启动,页面会提示先跑ollama serve并拉取gemma4,而不是静默失败。
私有请求永远不会带上云端密钥,密钥也不在客户端包里,不在健康检查里。同一个客户端走Ollama兼容OpenAI的/v1/chat/completions端点,该路径缺失时回落到Ollama自己的/api/chat。图片走/api/chat的images字段,因为Gemma 4是多模态的;如果这个调用被拒,Inkline会让Gemma先用文字描述图片,再对描述跑正常的修复循环,页面上会说明发生了这件事。
真正难的不是想法,是让模型吐出能解析的Mermaid
小开放模型擅长画出系统的形状,不擅长标点。Inkline的全部花招是一个修复循环:Mermaid解析器拒绝一份草稿,解析错误就回传给Gemma,让它再试,最多三次。草稿都摆在页面上,被拒的也在,你能看到是哪一步坏了。
提示词要求只给一个Mermaid代码围栏和指定的图形类型,但回复很少这么干净,所以提取环节要从散文、通用代码块和Gemma的思考包装里把围栏抠出来,还要把弯引号捋直。然后服务端用Mermaid解析,happy-dom在那儿是因为解析器需要一个DOM。解析抛错时,那段错误字符串——哪一行、它想要什么token、实际拿到什么token——会成为下一条用户消息,紧挨着坏掉的源码。
循环到第三份草稿为止,或者更早就有一份能解析。API每落一份草稿就流式推一次,所以页面能在Gemma已经在写第二份的时候显示“Draft 1 was rejected”。如果浏览器端的Mermaid仍与服务端不一致,那个渲染错误也会回传,用掉剩下的尝试次数。三次全挂,页面上留着上一张图,被拒的草稿留在侧栏里可以打开看。
图片只读一次。Gemma列出方框和箭头,桌面把这份清单显示成“Here's what I saw”:一行一个箭头,带from、to和标签。你可以改一行、加一行、删一行,然后按Draw。图是从这些行画出来的,不是再看一眼照片,所以一个画错的箭头在变成图之前你就能看见并纠正。修复循环随后会拒绝箭头与你确认的行对不上的草稿。
聊天式编辑会把当前Mermaid、原始笔记和指令送进同一个循环。Detail是提示词里的一个从句:Simpler控制在约8个节点以内,Detailed保留次要事实、控制在24个以内,两者都不许编造笔记里没有的事实。从图片出发的第一次绘制固定为Balanced,这样箭头校验不用同时跟细节编辑打架。OLLAMA_REASONING_EFFORT=none用来防止思考模型把整段回复花在思考轨迹上、最后不返回图。
免费的部分和想收费的部分
自己跑是免费的。这正是开放模型的意义:笔记不必离开笔记本,也没有按图计费。主题、图片输入、编辑、历史、导出都在那张免费桌子里。想收费的是托管版,给那些想在浏览器里用、不想装Ollama的人。应用里的定价页展示三档,但不收卡,Pro和Team并未开售。
公开演示对每个IP限每分钟10次绘制、每天50次,整个服务每天200次Cloud绘制(DAILY_CLOUD_LIMIT)。Private绘制不计入这个Cloud上限。没有Upstash时,这些计数器活在服务端内存里,进程一重启就归零。
笔记上限20000字符,一次编辑500字符,图片4MB,支持PNG、JPEG、WebP、GIF,模型回复上限约2500 token。绘制API前面挡着一个隐藏的公司字段和同源检查,它们是减速带,不是登录。
Detailed不能加进你没提过的服务,Simpler会砍掉你可能想要的分支。PDF只有一页,特别宽的地图会被缩放塞进去,而不是分页。图库预览在浏览器里绘制,如果那边Mermaid失败,通往桌面的链接照样能用。一张图对不对,取决于你确认的那份箭头清单——Draw用的是那些行,它不会再去看照片。
托管桌面跑在Render上,render.yaml把服务指向Ollama Cloud,因为Render没有本地GPU。GET /api/health是健康检查。按IP和按天的限流让一个公开URL不至于烧穿Ollama密钥,而密钥从不离开服务端。
把每条笔记都发给闭源API的图表工具,对这批人来说是笔坏买卖。一个学生画一章内容,不想那章存在别人的账号里;一个自由职业者勾画客户的系统,手里拿的是别人的架构。Private是默认,开关上带锁。成本是另一半:托管价格只有在推理近乎免费时才成立,Gemma是开放权重,一个月的图不取决于某个闭源模型的token价格会不会涨。换OLLAMA_MODEL就能把笔记本上的gemma4:e2b换成云端的gemma4:31b,或者换成以后针对Mermaid微调的版本,修复循环两边一样。闭源API连失败的草稿也要收费,而且当它反复犯同一个括号错误时,你没资格去调它。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.