Synaplan
开源 AI 软件平台,面向企业:自托管 AI 代理,符合 GDPR 的聊天机器人小部件,RAG 知识库,WhatsApp 与 Outlook AI,MCP,多模型路由。支持 Docker、Kubernetes 或在 Germ 托管。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Order routing for furniture shops that run their own workshops. The shop owner types a customer request the way they would write a job slip. Werkbank sends it to the right workshop (carpentry, upholstery, polish and paint, metalwork), labels it with a job type, urgency and effort, and reports how confident it is. Requests it is not sure about wait in a review queue instead of going to the wrong bench. Every correction the owner makes retrains that shop's model.
Live demo: https://werkbank-gamma.vercel.app. Click Open the demo shop; no sign-up needed. The demo shop is fictional.
English and German UI, a quiet design on a warm wood palette, and a phone-first view for workshop staff.
The project started from a real client brief: a furniture retailer with three in-house workshops wanted orders to reach the right workshop automatically, with each workshop seeing only its own jobs. Werkbank generalises that brief into a multi-tenant product any shop can sign up for.
Existing tools in this space are manufacturing ERPs built for cabinet and joinery shops: cut lists, CNC output and job costing, priced around $50–$200 a month. None of them read a free-text repair request and decide which in-house workshop should take it. That gap is what Werkbank fills.
| Owner | Workshop staff |
|---|---|
| Signs in with Google | Username and password, created and reset by the owner |
| Live preview of the routing while typing an order | Own login that only shows that workshop's orders |
| One board for all workshops, overdue orders highlighted | Urgent jobs first, then sorted by due date |
| Review queue for low-confidence orders, with the model's best guess | Three tabs and big buttons: Start, Mark done, plus an expected finish date |
| Reassigning an order teaches the shop's model | The board refreshes itself every few seconds |
| Splits one order across two workshops that work in parallel | Sees and updates only its own part of a split order |
| Reports: open, overdue, done and turnaround per workshop; monthly volume; CSV export | |
| Router strictness (strict, balanced, relaxed) and plan selection |
The whole interface is available in English and German. It installs as an app on phone and desktop (PWA), and all data is stored server-side in Postgres. Pricing is either a subscription (Starter €29/month, Pro €59/month) or a one-time licence (€790). Payments are not connected in this build: picking a plan only records it on the account.
flowchart LR
A[Order text] --> B[Keyword layer<br/>EN + DE cue lexicon]
A --> C[Naive Bayes<br/>seed model + this shop's corrections]
B --> D{Blend + gate}
C --> D
D -- "conf ≥ 0.85, margin ≥ 0.5" --> E[Auto-route]
D -- "conf ≥ 0.55" --> F[Route + flag 'check']
D -- "low / layers disagree / unfamiliar words" --> G[Review queue]
G -- "optional, ANTHROPIC_API_KEY" --> H[LLM must quote the request<br/>verbatim or its answer is discarded]
G --> I[Owner assigns] --> J[(corrections)] --> C
scripts/train.ts). The UI never shows more than "99%+".There is no public dataset of furniture-shop job tickets, so the seed model trains on synthetic requests
(scripts/generate-data.ts). To keep the numbers honest:
scripts/train.ts).Results (full report: reports/eval.md, re-run with npm run eval):
| Test set | Auto-routed | Auto accuracy | Sent to review | Accuracy of all routed |
|---|---|---|---|---|
| Synthetic, unseen phrasing (n=800) | 18.9% | 95.4% | 36.1% | 84.0% |
| Hand-written (n=60) | 40.0% | 95.8% | 23.3% | 93.5% |
The feedback loop is the point. A shop whose staff phrase things differently corrects its first k orders; the model is then measured on 400 later orders:
| Corrections | Top-1 accuracy | Auto-routed | Auto accuracy | Review queue |
|---|---|---|---|---|
| 0 | 75.5% | 20.8% | 97.6% | 34.8% |
| 50 | 92.0% | 63.7% | 99.2% | 12.5% |
| 100 | 96.8% | 82.5% | 99.7% | 6.3% |
以上为 README 的开头部分。其余内容请阅读原文。 查看完整 README ↗