Nº01 · EN / 中文Bilingual LLM booking agent · 2026双语 LLM 预订助手 · 2026

Booking Agent

Books only on an explicit yes. Rules, not the model, fill every booking field.只有客人明确说“是”才下单;每个预订字段都由规则而不是模型填写。

Booking Agent demo: chat on the left, the fields the rules found on the right
33/39 held-out · 31 tests

01Problem问题

An LLM-only pilot of Nalu got 17 of 30 messages fully right (57%) and invented booking values that guests never gave. A wrong party size or time is a real table problem on a Friday night.Nalu 的纯 LLM 试点只有 17/30 条消息完全正确(57%),还会编造客人没给的预订值。人数或时间错了,周五晚上就是真实的桌位事故。

02Flow流程

  1. Guest message客人消息
  2. Rules read fields规则读字段
  3. Ask if unclear不清楚就问
  4. Explicit yes?明确说“是”?
  5. create_reservation · pendingcreate_reservation · 待确认

03What I built我做了什么

  • Rules, not a model, read date, time, party size and name. Anything ambiguous (“at 7”) becomes a question.日期、时间、人数和姓名由规则读取,不交给模型;任何含糊处(“7 点”)都变成追问。
  • One action, create_reservation, runs only after a bare, explicit yes. “ok” or “好” asks again. The result stays pending until the restaurant confirms.唯一的动作 create_reservation 只在明确的“是”之后执行;“ok”“好”会再问一次。结果在餐厅确认前保持 pending。
  • With Ollama running locally, the page asks your own model to read the same conversation and marks where it guessed.本地运行 Ollama 时,页面会让你自己的模型读同一段对话,并标出它猜测的地方。

04Measured测量结果

17/30 · 33/39
model-only pilot (30 cases) · rules + gate on a separate held-out set (39 cases); not a like-for-like before and after纯模型试点(30 例)· 规则 + 确认闸门在另一份留出集上(39 例);两者不是严格可比的前后对照
0
invented values on the held-out set留出集上编造的值
31
synthetic conversations run as tests in the browser在浏览器中作为测试运行的合成对话
114 / 0
live replay turns / failures on Nalu (23 conversations × 3 runs)Nalu 实时回放轮数 / 失败数(23 段对话 × 3 次)

05Limits, stated plainly局限,直说

  • The 33/39 and replay numbers were measured on Nalu, not on this demo; the demo reproduces the design on synthetic data.33/39 和回放数据测自 Nalu,而不是本演示;演示用合成数据复现同一设计。
  • The model comparison needs a local Ollama, so most visitors see only the rules path.模型对比需要本地 Ollama,大多数访客只能看到规则路径。