项目简介
'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进行管理和部署。
- 硬件准备: 建议使用如Intel NUC等小型PC作为宿主机,安装Ubuntu Server操作系统。
- Docker与KVM: 安装Docker和KVM虚拟化环境。
- 服务部署: 根据'README.md'中的“Stacks & Services”部分,配置并部署各项Docker容器服务,包括Nginx反向代理、媒体服务器堆栈、Home Assistant、监控堆栈等。
- '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与计算