文档导航

智能家居助手演示

智能家居助手演示

演示代码:一个用 TypeSafe 评估用户请求的智能家居助手。

看看它的实际效果

工作原理

推测性扇出

这里演示的主要模式是推测性扇出。每个用户请求都会对照一长串问题来评估,其中很多问题对大多数请求来说最终都用不上。

来看下面这个用户请求:

“把家里所有的灯都关掉”

这是一个非常简单的请求,我们的代码只需要考虑下面这几个问题的答案:

  • “这是哪一类请求?”(智能家居指令)
  • “这个请求针对哪个范围?”(整栋房子)
  • “这个请求针对哪种设备?”(灯)
  • “应该对灯执行什么操作?”(关闭)

注意,最后一个问题是基于“用户正在对灯下达指令”这个假设写的,而我们在还不知道用户到底想干什么之前就问了它。这就是我们所说的“推测性问题”:在还不知道它是否相关之前就提问,这样就能并行评估所有问题,再由代码在事后过滤掉无关的结果。这是构建系统的一个关键模式,能让一套问题应对各种各样的用户请求。

错误做法:串行 API 调用

错误做法是把这些问题拆到多次 API 调用里,等确定需要某个答案时再去问:

  • “这是哪一类请求?”(智能家居指令)

然后,只有在确定它是智能家居指令之后:

  • “这个请求针对哪个范围?”(整栋房子)
  • “这个请求针对哪种设备?”(灯)

然后,只有在确定它针对的是灯之后:

  • “应该对灯执行什么操作?”(关闭)

这种做法追求的是问题数量最少,但最终会比把所有问题一次性放进一次 API 调用慢得多,也贵得多。

TypeSafe 与 LLM 搭配

这个演示还展示了 TypeSafe 如何与 LLM 搭配,来应对有时需要生成字符串的系统:

拆分复合用户请求: 这个演示里有一个 Noul 问题,用来判断用户请求是否要求执行多个不同的操作。如果为真,系统就用 LLM 把请求拆成一个原子指令列表。拆分后的请求再由 TypeSafe 逐个评估。

回退到对话式 LLM: 当 TypeSafe 判定用户查询是在索要一般信息或进行闲聊时,系统就调用 LLM 生成一段自由形式的回复。这样,交互式系统就能以又快又省的方式处理那些行为已知且确定的请求,同时在需要时仍能保有生成式 LLM 的灵活性。TypeSafe 的首次响应相比 LLM 响应快得多,因此给整个系统增加的延迟可以忽略不计。

自己运行

这个演示是一个简单的 Vite/React 单页应用,用 TypeSafe API 评估用户请求。完整源码将在发布时提供于 GitHub。它的 README 包含在本地运行演示的说明,以及源码各部分分别对应演示哪部分的概览。