智能家居助手演示
演示代码:一个智能家居助手,它用 TypeSafe 来评估用户请求。
看看实际效果
工作原理
推测式扇出
这里展示的主要模式是推测式扇出。每个用户请求都会对照一长串问题来评估,其中许多问题对大多数请求来说最终都是无关的。
来看下面这个用户请求:
「把房子里所有的灯都关掉」
这是一个非常简单的请求,我们的代码只需要考虑以下几个问题的答案:
- 「这是什么类别的请求?」(智能家居命令)
- 「这个请求针对的是哪个范围?」(整栋房子)
- 「这个请求针对的是哪类设备?」(灯)
- 「应该对灯执行什么操作?」(关闭)
注意,最后一个问题是带着「用户正在对灯下达命令」这一假设写出来的,而我们是在还不知道用户实际请求什么的时候就提出它。这就是我们所说的「推测式问题」——我们在还不知道它是否相关时就已经提出它,从而可以并行地评估所有问题,并依靠代码在事后过滤掉不相关的结果。这是构建此类系统的关键模式:用同一组问题处理各种各样的用户请求。
错误做法:串行 API 调用
错误的做法是把这些问题拆到多次 API 调用里,只在确定需要答案时才去提问:
- 「这是什么类别的请求?」(智能家居命令)
然后,只有在你确认它是智能家居命令之后:
- 「这个请求针对的是哪个范围?」(整栋房子)
- 「这个请求针对的是哪类设备?」(灯)
再然后,只有在你确认它针对的是灯之后:
- 「应该对灯执行什么操作?」(关闭)
这种做法以「问题数量最少」为优化目标,但最终会比把所有问题一次性放进一次前置 API 调用要慢得多、也贵得多。
TypeSafe 与 LLM 的搭配
这个演示还展示了 TypeSafe 如何与大语言模型(LLM)搭配,来处理有时需要文本生成步骤的系统:
拆分复合用户请求: 这个演示里有一个 Noul 问题,用来判断用户请求是否要求了不止一个不同的动作。如果答案为真,系统就用 LLM 把请求拆成一个原子命令列表。拆分后的请求再分别由 TypeSafe 评估。
回退到对话式 LLM: 当 TypeSafe 判定用户查询是在索取一般信息或进行闲聊时,系统会调用 LLM 生成自由形式的回复。这让交互式系统能以快速、低成本的方式处理那些行为已知且确定的请求,同时在需要时仍保留生成式 LLM 提供的灵活性。与 LLM 的响应相比,TypeSafe 的首次响应快得多,因此给整个系统增加的延迟可以忽略不计。
自己运行
这个演示是一个简单的 Vite/React 单页应用,使用 TypeSafe API 来评估用户请求。完整源代码将在发布时于 GitHub 上提供。它的 README 包含在本地运行该演示的说明,以及源码各部分分别负责演示中哪些功能的概览。