内容
lingo
**让表单更易用,LLM 工具更安全。**
人们输入速度快且松散:`180cm`,`5ft 11`,`1.5 杯`,`90 分钟`,`下周五`,`1,5 公斤`,包括输入错误。模型输出流畅、过度格式化的字符串:`"5'11\""`, `"1½ 杯"`, `"二十五公斤"`, `"下午3点(EST)"`, `"1,234 公斤"`。您的数据库需要规范的值:一个单位中的一个数字,一个 ISO 日期。该库是中间层:将自然语言数量、单位、日期和范围解析为验证的值,然后再转换回人类可读的格式。零依赖;英语优先解析,带有区域感知格式化(区域包在路线图中,计划 013)。
**适用于网络。** 使用一个文本字段代替一个值框和一个单位下拉菜单:
- 接受人们实际输入的内容:`180cm`,`5ft 11`,`2 磅 3 盎司`,`一个半小时`,输入错误(`5 米兹`)和模糊词语(`天气很热`),如果字段选择加入。
- 验证 UX 作为数据提供:字段永远不会在输入过程中报错(`2 f` 是不完整的,而不是无效的),每个问题都有一个稳定的代码,一个读的消息,您可以覆盖它,一个指向原始输入的跨度,以及“您是否想到了”的建议。
- 没有静默猜测:模糊输入(`1,234`:1.234 还是 1234?)返回一个确定的最佳读取结果,以及排名靠前的替代方案和警告;`confirm` 严格模式将每个假设转换为单击确认。
- 双向且经过测试:无论 `format()`/`humanize*()` 输出什么,都可以重新解析为相同的值。`1.9999 米` 格式化为 `6′7″`,而非 `5′12″`。
- 无头 DOM 控制器,`<lingo-input>` 元素和 React Hook。没有预设样式,没有框架锁定,解析速度达到微秒级,快到可以在每个按键上运行。
**适用于 LLM。** 模型更擅长输出 `"5'11\""` 而不是 `1.8034`;`/ai` 字段使字符串成为可靠的路径:
- 标准模式字段(`quantityField`,`dateField`,`lingoObject`)可与 AI SDK 工具、OpenAI/Anthropic/Gemini 严格模式Chain 和 MCP(`lingoTool()`)一起使用。一个字段定义涵盖了配方中记录的提供程序连线。
- 工具边界默认值拒绝风险值:模糊数字、忽略时区和时钟漂移的相对日期会大声报错,并带有 `[CODE] ... 您是否想到了 ...?` 消息,模型可以从中自我纠正。
- 在 160 个固定记录的规范化语料库(不是 LLM 基准测试)上测量:天真的 `Number()`/`new Date()` 强制转换接受其中的 17.5%,并且 6.3% 的结果是错误的;lingo 接受 96.9%,没有错误结果。
- 确定且可重放 `now`,结果完全可重现。`/ai` 日期字段需要它来进行相对日期,因此排队或重试的工具调用永远不会跨越午夜。
- `repairToolCallWith`/`canonicalizeValues` 在客户端修复损坏的负载,无需额外的模型调用。
一个解析器支持两端。相同的 `lingoObject` 可以通过标准模式表单解析器(React Hook Form,TanStack Form,...)验证模型工具调用和人类表单。
这是 monorepo。**库 README 包含安装、API 游览和配方,位于软件包中:[`packages/lingo`](packages/lingo/README.md)。**
## 布局
| | 描述 |
|------|------------|
| [`packages/lingo`](packages/lingo) | `@pascal-app/lingo`,已发布的库(源代码、测试、基准测试、大小/语料库/零依赖门控) |
| [`apps/site`](apps/site) | 文档站点,带有实时解析器演示(Next.js,端口 3000 或下一个空闲端口) |
| [`plans/`](plans/README.md) | 前瞻性规格,每个主题一个编号的实时 Markdown 文件 |
| [`wiki/`](wiki/README.md) | 已构建的文档:架构、决策、约定、致谢、研究 |
| [`AGENTS.md`](AGENTS.md) | 规范代理指南(硬规则、工作流程、模块映射) |
| [`CONTEXT.md`](CONTEXT.md) | 词汇表,包含规范名称和同义词以避免混淆 |
## 快速开始
```sh
bun install
bun run check # 类型检查 + 测试 + 构建 + 大小语料库门控 + 零依赖门控
```
开发(库和站点一起):
```sh
bun dev # tsup --watch 监听库 + 站点开发(端口 3000,自动递增)
bun kill # 停止所有 lingo 开发进程(端口 3000-3003 + 此)
bun restart # 杀死 + 清除 .next*/.turbo 缓存 + bun dev
```
站点作为一个实时工作区链接使用库,因此监视重建会在运行的站点中显示。(`cd apps/site && bun dev` 仍然适用于仅站点工作;`bun run site:sync` 刷新诸如 llms.txt 之类的已提供数据文件## 贡献
参见 [`CONTRIBUTING.md`](CONTRIBUTING.md)。简而言之:`bun run check` 必须通过,零运行时依赖是不可商量的,`plans/` 中的规格是实时文档,值得注意的更改记录在 CHANGELOG 下的 `[Unreleased]`。
## 许可证
MIT