面向大型语言模型的 Home Assistant API
Home Assistant 可以与大型语言模型(LLM)交互。通过向 LLM 暴露 Home Assistant API,LLM 可以获取数据或控制 Home Assistant,从而更好地协助用户。Home Assistant 自带一个内置 LLM API,而自定义集成也可以注册自己的 API,以提供更高级的能力。
内置 Assist API
Home Assistant 内置了一个 API,会将 Assist API 暴露给 LLM。这个 API 允许 LLM 通过意图与 Home Assistant 交互,并且可以通过注册新的意图进行扩展。
Assist API 提供的能力与内置对话代理可访问的能力和已暴露实体相同,但不允许执行管理类任务。
接入 LLM API
在你的集成中,需要在两个位置集成 LLM API。用户需要能够配置要使用哪些 API,并且在与 LLM 交互时,应把这些 API 提供的工具传递给 LLM。
选项流程
所选 API 应存储在配置条目的 options 中。这里应保存一个字符串或所选 API ID 的列表(若有多个)。如果未选择 API,则必须省略该 key。
在你的 options flow 中,应向用户提供一个 selector,让其选择要使用的 API。
获取工具
与 LLM 交互时,提供的 ChatLog 会让所选 API 中的所有工具可用;而对话实体应将这些工具连同 API 提供的额外提示词(prompt)一起传递给 LLM。
创建你自己的 API
要创建自己的 API,你需要创建一个继承自 API 的类,并实现 async_get_tools 方法。async_get_tools 方法应返回一个 Tool 对象列表,用来表示你希望暴露给 LLM 的功能。
工具
llm.Tool 类表示一个可由 LLM 调用的工具。
llm.Tool 类具有以下属性:
llm.Tool 类具有以下方法:
async_call
当 LLM 调用该工具时,此方法会执行工具的实际操作。它必须是异步方法。参数为 hass 和一个 llm.ToolInput 实例。
响应数据必须是 dict,并且可序列化为 JSON homeassistant.util.json.JsonObjectType。
错误必须通过抛出 HomeAssistantError 异常(或其子类)来表示。响应数据中不应包含专门用于错误处理的错误码。
ToolInput 具有以下属性:
API
API 对象用于创建 API 实例。API 实例表示一组会提供给 LLM 的工具集合。
llm.API 类具有以下属性:

