项目简介

'home-server' 不仅仅是一个普通的家用服务器配置仓库,其核心是一个名为 'server-manager' 的Spring Boot应用。这个应用充当了智能家居环境的中央管理和自动化大脑,特别是集成了AI语音控制能力。它通过整合多种家庭服务(如Home Assistant、Spotify、虚拟机管理、Minecraft服务器控制)和LLM(大型语言模型)的工具调用能力,实现了一个强大的“语音到动作”管道,让LLM能够理解并执行复杂的智能家居指令。

主要功能点

  • AI语音控制: 接收语音指令,通过Whisper进行语音转文本,然后交由配置了工具的LLM处理,LLM调用相应的工具执行动作,并生成文本响应,最终可用于文本转语音。
  • 工具集成: 集成了多种智能家居工具,如控制Home Assistant脚本和设备状态、管理Spotify音乐播放、调度未来任务、管理购物清单等。LLM可以通过这些工具与家居环境进行深度交互。
  • 设备管理: 提供虚拟机(KVM)和Minecraft服务器的启动、停止、状态查询等管理功能。
  • 服务目录与DNS: 维护一个服务目录,并能动态配置本地DNS记录,方便管理和访问家庭网络中的各种服务。
  • 系统监控: 监控服务器的CPU、RAM使用率和温度等指标。
  • 安全认证: 使用JWT和API Key进行认证授权,确保服务访问安全。

安装步骤

该项目是为私有部署在Linux服务器(如Ubuntu Server)上设计的。核心的 'server-manager' 是一个Spring Boot应用,通常会打包成JAR文件并通过Java环境运行。其他服务则通过Docker Compose进行管理和部署。

  1. 硬件准备: 建议使用如Intel NUC等小型PC作为宿主机,安装Ubuntu Server操作系统。
  2. Docker与KVM: 安装Docker和KVM虚拟化环境。
  3. 服务部署: 根据'README.md'中的“Stacks & Services”部分,配置并部署各项Docker容器服务,包括Nginx反向代理、媒体服务器堆栈、Home Assistant、监控堆栈等。
  4. 'server-manager' 部署:
    • 克隆整个仓库。
    • 进入 'server-manager' 目录,编译Spring Boot应用。通常运行 'mvn clean install' 或 'gradle build'。
    • 运行生成的JAR包,例如 'java -jar target/server-manager-0.0.1-SNAPSHOT.jar'。
    • 配置相关的环境变量,如'homeassistant.api_key'、'jwt.secret'、'spotify.entity_id'、'llm.ollama.base-url'、'llm.openai.base-url'等,具体可参考项目中的配置示例或文档。

服务器配置(针对MCP客户端)

MCP客户端(通常是LLM应用或AI助手框架)需要知道如何连接到此 'server-manager' 应用以利用其提供的上下文和工具。由于 'server-manager' 使用HTTP/JSON作为通信方式,MCP客户端通常需要配置以下信息:

{
  "server_name": "HomeAssistantManager",
  "command": "curl",
  "args": [
    "-X", "POST",
    "http://<服务器IP或域名>/manage/api/v1/llm/prompt",
    "-H", "Content-Type: application/json",
    "-H", "Authorization: Bearer <访问令牌>",
    "-H", "X-LLM: ollama",
    "-d", "@<prompt_file>"
  ],
  "description": "连接到智能家居核心服务,以调用其LLM工具和获取上下文信息。LLM客户端将发送包含用户提示的JSON数据到此端点,并接收JSON格式的响应。",
  "capabilities": {
    "resources": ["home_status", "service_catalog", "task_schedule", "metrics"],
    "tools": [
      "global_cozy_script", "global_warm_white", "all_lights_off", "bedtime",
      "is_vlad_home", "get_tv_status", "lights_get_status", "lights_set_params",
      "spotify_set_playback", "spotify_set_volume", "spotify_list_playlists", "spotify_play_playlist",
      "shopping_list_items", "shopping_list_add_item", "shopping_list_remove_item",
      "schedule_delayed_task", "set_llm_provider",
      "guest_mode", "leaving_home"
    ],
    "prompts": ["general_instruction", "tool_execution"]
  },
  "notes": "
    - '<服务器IP或域名>': 请替换为实际部署 'server-manager' 的服务器IP地址或域名。
    - '<访问令牌>': 请替换为通过 '/manage/api/v1/login' 接口获取的有效JWT访问令牌,或在Home Assistant API Key过滤器中配置的'Manager-Key'。
    - '<prompt_file>': LLM客户端将在请求体中发送一个JSON文件,包含键 'prompt' 和用户输入的文本。
    - 'X-LLM' 头: 可选,用于指定LLM提供商('ollama' 或 'openai'),覆盖全局配置。
    - 安全性: 确保服务器IP或域名可访问,且已配置正确的认证信息。"
}

### 基本使用方法
1.  **认证**: 首先,MCP客户端需要通过 '/manage/api/v1/login' 端点,使用用户名和密码获取JWT访问令牌。或者,如果客户端是Home Assistant,可以使用预设的API Key进行认证。
2.  **发送LLM请求**: 客户端向 '/manage/api/v1/llm/prompt' 端点发送POST请求,请求体是一个JSON对象,包含一个 'prompt' 字段,其值为用户输入的文本(例如:“Jarvis,把所有灯都关掉。”)。
3.  **处理响应**: 服务器将返回一个JSON响应,其中包含LLM生成的输出。如果LLM在处理过程中调用了工具,这些工具将在服务器端执行,并将结果反馈给LLM,最终LLM将生成一个最终的文本回答。
4.  **语音控制入口**: 对于语音输入,客户端可以将WAV格式的音频文件发送到 '/manage/api/v1/voice/command' 端点,服务器将自动完成语音转文本、LLM处理和工具调用,并返回文本结果。

信息

分类

AI与计算