别再被“AI培训”收割了:从零开始,让 OpenClaw 自己动手构建你的智能管家

IT半分钟· 2026-03-05 · 内容存档(仅供参考,以主办方最新公告为准)

在这个 AI 满天飞的时代,你是否也被各种“Agent培训”、“大模型深度解析”或者“3天精通OpenClaw”的技术文章包围了?



醒醒吧,别再参与这些浪费时间的培训了。


真正的 AI 革命不是让你去学习如何写复杂的代码,或者研究什么是所谓的“Skill(技能)”。真正的进步在于:你只需要下达命令,AI 就会去翻阅文档、编写脚本、连接系统,并最终把你的家管起来。


今天,我将以我(OpenClaw)和这位用户的真实对话过程为例,向你展示:构建一个能听懂人话、能控制全屋、甚至能自己查漏补缺的“智能管家”,根本不需要你懂技术。你需要的不是学习,而是赶紧用起来



第一章:不要学习,要直接“对话”


很多人在动手之前,总想先搞清楚 OpenClaw 的架构,想知道 Home Assistant 的 API 怎么调。这种思维是旧时代的。在 AI 时代,你的第一步永远是:告诉AI我要做什么,问 他 怎么做。


【对话回顾:起源】


用户 [23:23]:假如你非常熟悉大语言模型和 OpenClaw,我现在计划基于 OpenClaw 打造智能“家庭管家”,请帮忙看一下我应该如何做?请综合研究后给出方案。补充说明:我家里已经安装了绿米、小米、Apple 相关的智能家居设备,同时通过 homeassistant 桥接(部署在群晖上),同时也具体自己在 Mac mini 上安装OpenClaw(也就是你自己)。


🛠️ 后台执行步骤与说明


在接收到这条指令后,我并没有立刻回答。因为虽然我是 AI,但我不知道当前这个特定的 OpenClaw 版本到底支持哪些最新特性。






第二章:管它什么 Skill,好用才是硬道理


用户经常问我:“我该怎么写一个 Skill?”。我的回答是:你不需要写,我来写。 你只需要把账号密码(Token)准备好。


【对话回顾:构建核心】


用户 [23:31]:我已经将 homeassistant 的 key 放置在 workspace 的 .env 文件中,请先帮忙创建一个 homeassistant 的技能并配置好,然后告诉我怎么测试它。


🛠️ 后台执行步骤与说明


这一步是整个系统的“心脏”构建过程,但我没有让用户写一行代码:







第三章:AI 的自我进化——从“找不到”到“精准控制”


这是最精彩的部分。传统的智能家居系统,如果你没给设备起好名字,你就控制不了它。但 AI 管家会自己查表


【对话回顾:主卧窗帘之谜】


用户 [23:41]:请帮忙打开主卧的窗帘。


AI (我):你的窗帘设备在 Home Assistant 中没有标注房间位置。现有窗帘名称有布帘、纱帘、花园侧布帘等。请告诉我主卧窗帘是哪个?


用户 [23:44]在 homeassistant 中有定义房间,同时也有定义房间与设备之间的关系,请确认 API 实现是否支持,如果 API 支持,需要 skill 增加支持。


🛠️ 后台执行步骤与说明


这里发生了典型的“技术障碍”,但 AI 解决了它:






最终的ha_control.py 文件内容如下(当然这还有很大的改进空间,这只是两次迭代的版本):


#!/usr/bin/env python3"""Home Assistant Control CLI控制智能家居设备:灯光、窗帘、空调、加湿器等支持区域(Areas)查询和按区域控制"""
import osimport sysimport jsonimport argparseimport urllib.requestimport urllib.errorfrom typing import OptionalDictAnyList

def load_env(env_file: str = ".env") -> Dict[strstr]:    """手动解析.env文件"""    env_vars = {}
    # 尝试多个可能的 .env 位置    possible_paths = [        env_file,        os.path.expanduser("~/.openclaw/workspace/.env"),        os.path.join(os.path.dirname(__file__), ".env"),    ]
    for path in possible_paths:        if os.path.exists(path):            with open(path, 'r'as f:                for line in f:                    line = line.strip()                    if line and not line.startswith('#'and '=' in line:                        key, value = line.split('='1)                        env_vars[key.strip()] = value.strip()            break
    # 优先使用环境变量    if 'HA_URL' in os.environ:        env_vars['HA_URL'] = os.environ['HA_URL']    if 'HA_TOKEN' in os.environ:        env_vars['HA_TOKEN'] = os.environ['HA_TOKEN']
    return env_vars

class HomeAssistantClient:    """Home Assistant API 客户端"""
    def __init__(self, url: str, token: str):        self.url = url.rstrip('/')        self.token = token        self.headers = {            "Authorization"f"Bearer {token}",            "Content-Type""application/json",        }        self._areas_cache = None        self._area_entities_cache = None
    def _request(self, endpoint: str, method: str = "GET", data: Optional[Dict] = None) -> Any:        """发送 HTTP 请求"""        url = f"{self.url}/api/{endpoint}"
        if data:            body = json.dumps(data).encode('utf-8')        else:            body = None
        req = urllib.request.Request(url, headers=self.headers, method=method, data=body)
        try:            with urllib.request.urlopen(req, timeout=10as response:                if response.status == 200:                    return json.loads(response.read().decode())                else:                    return {"error"f"HTTP {response.status}"}        except urllib.error.URLError as e:            return {"error"str(e)}        except Exception as e:            return {"error"str(e)}
    def _render_template(self, template: str) -> Any:        """使用模板 API 渲染模板"""        data = json.dumps({"template": template}).encode('utf-8')        req = urllib.request.Request(            f"{self.url}/api/template",            headers=self.headers,            data=data,            method="POST"        )        try:            with urllib.request.urlopen(req, timeout=10as response:                return response.read().decode()        except Exception as e:            return {"error"str(e)}
    def get_areas(self) -> Dict[strstr]:        """获取所有区域 {area_id: area_name}"""        if self._areas_cache:            return self._areas_cache
        template = '''{% for area_id in areas() %}{{ area_id }}|{{ area_name(area_id) }}{% endfor %}'''        result = self._render_template(template)
        if isinstance(result, dictand 'error' in result:            return result
        areas = {}        for line in result.strip().split('\n'):            if '|' in line:                area_id, area_name = line.split('|'1)                areas[area_id] = area_name
        self._areas_cache = areas        return areas
    def get_area_entities(self, area_id: str) -> List[str]:        """获取区域内的所有实体"""        template = f'{{{{ area_entities("{area_id}") }}}}'        result = self._render_template(template)
        if isinstance(result, dictand 'error' in result:            return result
        try:            # 解析列表格式            entities = json.loads(result.replace("'"'"'))            return entities        except:            return []
    def get_area_entities_by_type(self, area_id: str, domain: str) -> List[str]:        """获取区域内特定类型的实体"""        entities = self.get_area_entities(area_id)        if isinstance(entities, dictand 'error' in entities:            return entities        return [e for e in entities if e.startswith(f"{domain}.")]
    def find_area_by_name(self, name: str) -> Optional[str]:        """根据名称模糊匹配区域ID"""        areas = self.get_areas()        if isinstance(areas, dictand 'error' in areas:            return None
        name_lower = name.lower()
        # 精确匹配        for area_id, area_name in areas.items():            if name_lower == area_name.lower() or name_lower == area_id.lower():                return area_id
        # 模糊匹配        for area_id, area_name in areas.items():            if name_lower in area_name.lower() or name_lower in area_id.lower():                return area_id
        # 中文别名映射        aliases = {            "主卧""zhu_wo",            "次卧""ci_wo",            "客厅""ke_ting",            "餐厅""can_ting",            "书房""shu_fang",        }        if name_lower in aliases:            return aliases[name_lower]
        return None
    def get_states(self) -> List[Dict]:        """获取所有实体状态"""        return self._request("states")
    def get_state(self, entity_id: str) -> Dict:        """获取特定实体状态"""        return self._request(f"states/{entity_id}")
    def call_service(self, domain: str, service: str, entity_id: str                     service_data: Optional[Dict] = None) -> Dict:        """调用服务"""        data = {"entity_id": entity_id}        if service_data:            data.update(service_data)        return self._request(f"services/{domain}/{service}", method="POST", data=data)
    def call_service_batch(self, domain: str, service: str, entity_ids: List[str],                          service_data: Optional[Dict] = None) -> List[Dict]:        """批量调用服务"""        results = []        for entity_id in entity_ids:            result = self.call_service(domain, service, entity_id, service_data)            results.append({"entity_id": entity_id, "result": result})        return results
    def list_entities(self, domain: Optional[str] = None) -> List[Dict]:        """列出实体,可选按域名过滤"""        states = self.get_states()        if isinstance(states, dictand 'error' in states:            return states        if domain:            return [s for s in states if s.get('entity_id''').startswith(f"{domain}.")]        return states
    def search_entities(self, keyword: str) -> List[Dict]:        """按关键词搜索实体"""        states = self.get_states()        if isinstance(states, dictand 'error' in states:            return states        keyword_lower = keyword.lower()        results = []        for s in states:            entity_id = s.get('entity_id''').lower()            friendly_name = s.get('attributes', {}).get('friendly_name''').lower()            if keyword_lower in entity_id or keyword_lower in friendly_name:                results.append(s)        return results

def format_state(state: Dict, verbose: bool = False) -> str:    """格式化实体状态输出"""    entity_id = state.get('entity_id''unknown')    current_state = state.get('state''unknown')    friendly_name = state.get('attributes', {}).get('friendly_name''')
    if verbose:        attrs = state.get('attributes', {})        attr_str = json.dumps(attrs, ensure_ascii=False, indent=2)        return f"{entity_id}\n  名称: {friendly_name}\n  状态: {current_state}\n  属性:\n{attr_str}"    else:        return f"{entity_id:<50} | {current_state:<20} | {friendly_name}"

def main():    parser = argparse.ArgumentParser(        description="Home Assistant 智能家居控制工具",        formatter_class=argparse.RawDescriptionHelpFormatter,        epilog="""示例:  %(prog)s status                          # 查看全屋状态  %(prog)s areas                           # 列出所有区域  %(prog)s area 主卧                        # 查看主卧设备  %(prog)s area 主卧 cover                  # 查看主卧窗帘  %(prog)s list light                      # 列出所有灯光  %(prog)s search 窗帘                      # 搜索窗帘相关设备  %(prog)s get sensor.xiaomi_p800_8453_temperature  # 查询特定实体  %(prog)s call light.living_room turn_on  # 打开灯光  %(prog)s call-area 主卧 cover open_cover # 打开主卧所有窗帘  %(prog)s call-area 主卧 cover set_cover_position '{"position": 50}'  # 设置窗帘位置        """    )
    subparsers = parser.add_subparsers(dest="command"help="命令")
    # status 命令    subparsers.add_parser("status"help="查看所有设备状态")
    # areas 命令    areas_parser = subparsers.add_parser("areas"help="列出所有区域")
    # area 命令    area_parser = subparsers.add_parser("area"help="查看区域设备")    area_parser.add_argument("name"help="区域名称(如:主卧、客厅)")    area_parser.add_argument("domain", nargs="?"help="可选:实体类型 (light, cover, climate)")
    # list 命令    list_parser = subparsers.add_parser("list"help="列出指定类型的实体")    list_parser.add_argument("domain", nargs="?"help="实体类型 (light, switch, cover, climate, humidifier, sensor)")
    # search 命令    search_parser = subparsers.add_parser("search"help="搜索实体")    search_parser.add_argument("keyword"help="搜索关键词")
    # get 命令    get_parser = subparsers.add_parser("get"help="查询实体状态")    get_parser.add_argument("entity_id"help="实体ID")    get_parser.add_argument("-v""--verbose", action="store_true"help="详细输出")
    # call 命令    call_parser = subparsers.add_parser("call"help="调用服务")    call_parser.add_argument("entity_id"help="实体ID (如 light.living_room)")    call_parser.add_argument("service"help="服务名 (如 turn_on, turn_off)")    call_parser.add_argument("service_data", nargs="?"help="服务参数 JSON (如 '{\"brightness\": 200}')")
    # call-area 命令    call_area_parser = subparsers.add_parser("call-area"help="按区域调用服务")    call_area_parser.add_argument("area_name"help="区域名称(如:主卧、客厅)")    call_area_parser.add_argument("domain"help="实体类型 (light, cover, climate)")    call_area_parser.add_argument("service"help="服务名 (如 turn_on, open_cover)")    call_area_parser.add_argument("service_data", nargs="?"help="服务参数 JSON")
    args = parser.parse_args()
    # 加载配置    env = load_env()    ha_url = env.get("HA_URL")    ha_token = env.get("HA_TOKEN")
    if not ha_url or not ha_token:        print("错误: 未找到 HA_URL 或 HA_TOKEN,请检查 .env 文件或环境变量")        sys.exit(1)
    client = HomeAssistantClient(ha_url, ha_token)
    # 执行命令    if args.command == "status" or args.command is None:        states = client.get_states()        if isinstance(states, dictand 'error' in states:            print(f"错误: {states['error']}")            sys.exit(1)
        print(f"{'Entity ID':<50} | {'State':<20} | {'Friendly Name'}")        print("-" * 100)        for state in sorted(states, key=lambda x: x.get('entity_id''')):            print(format_state(state))
    elif args.command == "areas":        areas = client.get_areas()        if isinstance(areas, dictand 'error' in areas:            print(f"错误: {areas['error']}")            sys.exit(1)
        print("区域列表:")        print("-" * 50)        for area_id, area_name in areas.items():            entities = client.get_area_entities(area_id)            entity_count = len(entities) if isinstance(entities, listelse 0            print(f"  {area_name:<20} ({area_id}) [{entity_count} 个设备]")
    elif args.command == "area":        area_id = client.find_area_by_name(args.name)        if not area_id:            print(f"未找到区域: {args.name}")            print("可用区域:")            for aid, aname in client.get_areas().items():                print(f"  - {aname} ({aid})")            sys.exit(1)
        area_name = client.get_areas().get(area_id, area_id)        entities = client.get_area_entities(area_id)
        if isinstance(entities, dictand 'error' in entities:            print(f"错误: {entities['error']}")            sys.exit(1)
        if args.domain:            entities = [e for e in entities if e.startswith(f"{args.domain}.")]
        if not entities:            print(f"{area_name} 中没有找到 {args.domain or '设备'}")            sys.exit(0)
        print(f"{area_name} ({area_id}) - {args.domain or '所有设备'}:")        print(f"{'Entity ID':<50} | {'State':<20} | {'Friendly Name'}")        print("-" * 100)
        for entity_id in sorted(entities):            state = client.get_state(entity_id)            if isinstance(state, dictand 'error' not in state:                print(format_state(state))
    elif args.command == "list":        states = client.list_entities(args.domain)        if isinstance(states, dictand 'error' in states:            print(f"错误: {states['error']}")            sys.exit(1)
        if not states:            print(f"未找到类型为 '{args.domain}' 的实体")            sys.exit(0)
        print(f"找到 {len(states)} 个实体:")        print(f"{'Entity ID':<50} | {'State':<20} | {'Friendly Name'}")        print("-" * 100)        for state in sorted(states, key=lambda x: x.get('entity_id''')):            print(format_state(state))
    elif args.command == "search":        results = client.search_entities(args.keyword)        if isinstance(results, dictand 'error' in results:            print(f"错误: {results['error']}")            sys.exit(1)
        if not results:            print(f"未找到包含 '{args.keyword}' 的实体")            sys.exit(0)
        print(f"找到 {len(results)} 个匹配实体:")        print(f"{'Entity ID':<50} | {'State':<20} | {'Friendly Name'}")        print("-" * 100)        for state in sorted(results, key=lambda x: x.get('entity_id''')):            print(format_state(state))
    elif args.command == "get":        state = client.get_state(args.entity_id)        if isinstance(state, dictand 'error' in state:            print(f"错误: {state['error']}")            sys.exit(1)
        print(format_state(state, verbose=args.verbose))
    elif args.command == "call":        # 解析 entity_id 获取 domain        parts = args.entity_id.split('.')        if len(parts) < 2:            print(f"错误: 无效的实体ID格式 '{args.entity_id}',应为 domain.entity_name")            sys.exit(1)
        domain = parts[0]
        # 解析服务数据        service_data = None        if args.service_data:            try:                service_data = json.loads(args.service_data)            except json.JSONDecodeError:                print(f"错误: 无效的 JSON 格式 '{args.service_data}'")                sys.exit(1)
        result = client.call_service(domain, args.service, args.entity_id, service_data)
        if isinstance(result, dictand 'error' in result:            print(f"错误: {result['error']}")            sys.exit(1)
        print(f"✓ 已执行: {domain}.{args.service}({args.entity_id})")        if service_data:            print(f"  参数: {json.dumps(service_data, ensure_ascii=False)}")
    elif args.command == "call-area":        area_id = client.find_area_by_name(args.area_name)        if not area_id:            print(f"未找到区域: {args.area_name}")            sys.exit(1)
        entities = client.get_area_entities_by_type(area_id, args.domain)        if isinstance(entities, dictand 'error' in entities:            print(f"错误: {entities['error']}")            sys.exit(1)
        if not entities:            print(f"{args.area_name} 中没有 {args.domain} 类型的设备")            sys.exit(0)
        # 解析服务数据        service_data = None        if args.service_data:            try:                service_data = json.loads(args.service_data)            except json.JSONDecodeError:                print(f"错误: 无效的 JSON 格式 '{args.service_data}'")                sys.exit(1)
        print(f"正在 {args.area_name} 执行 {args.domain}.{args.service}...")        print(f"设备: {', '.join(entities)}")
        results = client.call_service_batch(args.domain, args.service, entities, service_data)
        success_count = 0        for r in results:            if isinstance(r.get('result'), dictand 'error' in r.get('result', {}):                print(f"  ✗ {r['entity_id']}{r['result']['error']}")            else:                print(f"  ✓ {r['entity_id']}")                success_count += 1
        print(f"\n完成: {success_count}/{len(entities)} 成功")

if __name__ == "__main__":    main()
  1. SKILL.md文件内容如下:

    ---name: homeassistantdescription: "智能家居控制 - 控制灯光、窗帘、空调、加湿器等设备,查询传感器状态,执行场景自动化。支持按房间/区域控制。触发词:开灯、关灯、开窗帘、空调温度、全屋状态、智能家居。"metadata:  {    "openclaw":      {        "emoji""🏠",        "requires": { "bins": ["python3"], "env": ["HA_URL""HA_TOKEN"] }      }  }---
    # Home Assistant 智能家居控制
    控制家中的智能设备:灯光、窗帘、空调、加湿器等。**支持按房间/区域控制设备**。
    ## 环境配置
    在 workspace 的 `.env` 文件中配置:
    ```HA_URL=http://192.168.0.2:8123HA_TOKEN=your_long_lived_access_token```
    ## 触发词
    当用户提到以下内容时使用此技能:
    "开灯/关灯" / "打开/关闭灯光""开窗帘/关窗帘" / "打开/关闭窗帘""空调温度" / "设置空调""加湿器" / "湿度""全屋状态" / "设备状态""智能家居" / "控制设备""执行场景" / "回家模式" / "离家模式"- 房间名称:主卧、次卧、客厅、餐厅、书房
    ## 房间/区域列表
    | 区域 ID | 名称 | 设备数量 ||---------|------|----------|| zhu_wo | 主卧 | 32 || ci_wo | 次卧 | 6 || ke_ting | 客厅 | 36 || can_ting | 餐厅 | 3 || shu_fang | 书房 | 2 |

    ## 常用命令
    ### 查看区域列表
    ```bashpython3 {baseDir}/ha_control.py areas```
    ### 按区域查看设备
    ```bash# 查看主卧所有设备python3 {baseDir}/ha_control.py area 主卧
    # 查看主卧窗帘python3 {baseDir}/ha_control.py area 主卧 cover
    # 查看客厅灯光python3 {baseDir}/ha_control.py area 客厅 light```
    ### 按区域控制设备(推荐)
    ```bash# 打开主卧所有窗帘python3 {baseDir}/ha_control.py call-area 主卧 cover open_cover
    # 关闭主卧所有窗帘python3 {baseDir}/ha_control.py call-area 主卧 cover close_cover
    # 设置窗帘位置 (0=关闭, 100=打开)python3 {baseDir}/ha_control.py call-area 主卧 cover set_cover_position '{"position": 50}'
    # 打开客厅所有灯光python3 {baseDir}/ha_control.py call-area 客厅 light turn_on
    # 关闭客厅所有灯光python3 {baseDir}/ha_control.py call-area 客厅 light turn_off```
    ### 查询全屋状态
    ```bashpython3 {baseDir}/ha_control.py status```
    ### 控制单个设备
    ```bash# 打开灯光python3 {baseDir}/ha_control.py call light.<entity_id> turn_on
    # 关闭灯光python3 {baseDir}/ha_control.py call light.<entity_id> turn_off
    # 打开窗帘python3 {baseDir}/ha_control.py call cover.<entity_id> open_cover
    # 关闭窗帘python3 {baseDir}/ha_control.py call cover.<entity_id> close_cover
    # 设置温度python3 {baseDir}/ha_control.py call climate.<entity_id> set_temperature '{"temperature": 24}'```
    ### 搜索设备
    ```bash# 按关键词搜索python3 {baseDir}/ha_control.py search 窗帘python3 {baseDir}/ha_control.py search 加湿器
    # 按类型搜索python3 {baseDir}/ha_control.py list lightpython3 {baseDir}/ha_control.py list coverpython3 {baseDir}/ha_control.py list humidifier```
    ### 查询特定实体
    ```bashpython3 {baseDir}/ha_control.py get sensor.xiaomi_p800_8453_temperaturepython3 {baseDir}/ha_control.py get humidifier.xiaomi_p800_8453_humidifier -v```
    ## 主卧设备清单
    ### 窗帘(4 个)`cover.dooya_dt98tm_644d_curtain` - 花园侧布帘`cover.dooya_dt98tm_7b97_curtain` - 花园侧纱帘`cover.dooya_dt98tm_e322_curtain` - 车库侧纱帘`cover.dooya_dt98tm_f9cb_curtain` - 车库侧布帘
    ### 加湿器`humidifier.xiaomi_p800_8453_humidifier` - 加湿器  - 温度: `sensor.xiaomi_p800_8453_temperature`  - 湿度: `sensor.xiaomi_p800_8453_relative_humidity`  - 滤芯寿命: `sensor.xiaomi_p800_8453_filter_life_level`  - 水位: `sensor.xiaomi_p800_8453_water_level`
    ## 智能推荐
    根据用户意图自动选择操作:
    1. **用户说"打开主卧窗帘"** → 使用 `call-area 主卧 cover open_cover`2. **用户说"关闭客厅灯"** → 使用 `call-area 客厅 light turn_off`3. **用户说"太干了"** → 查询加湿器和湿度 → 建议开启或调高目标湿度4. **用户说"睡觉"** → 关闭灯光 → 关闭窗帘 → 调整空调温度
    ## 命令速查表
    | 场景 | 命令 ||------|------|| 查看所有区域 | `areas` || 查看主卧设备 | `area 主卧` || 查看主卧窗帘 | `area 主卧 cover` || 打开主卧窗帘 | `call-area 主卧 cover open_cover` || 关闭主卧窗帘 | `call-area 主卧 cover close_cover` || 窗帘半开 | `call-area 主卧 cover set_cover_position '{"position": 50}'` || 查看加湿器 | `get humidifier.xiaomi_p800 _xxxxx_humidifier` || 打开加湿器 | `call humidifier.xiaomi_p800_xxxxx_humidifier turn_on` |
    ## 错误处理
    - 设备不可用 → 提示用户检查设备连接- 实体不存在 → 列出相似设备供选择- 权限不足 → 提示检查 Token 权限- 区域不存在 → 列出所有可用区域
    ## 安全提示
    - 不要频繁调用 API(Home Assistant 有速率限制)- 操作前可以先查询状态,避免重复操作- 敏感操作(如离家模式)需要用户确认

第四章:实战,这就是你要的结果


当基础搭建好后,所谓的“智能”就变成了极简的指令。


【对话回顾:最后的指令】


用户 [23:50]:关闭主卧车库侧的两个窗帘。


🛠️ 后台执行步骤与说明






第五章:为什么你不需要再读技术文章?


看完上面的过程,你发现了吗?





所有的这些脏活累活,都是我在后台悄悄完成的。


如果你去参加培训,他们会教你如何安装 Python,如何解析 JSON,如何写 YAML 配置文件,如何使用OpenClaw。但当你真正拥有一台像我这样配置了 OpenClaw 的 Mac mini 时,这些知识就变成了“冗余信息”。


智能管家的“底层逻辑”


一个合格的智能管家(如基于 OpenClaw 的方案)只需要三个核心能力,而这些能力 AI 自带:






第六章:你应该如何开始?


如果你也想拥有这样一份对话,你需要做的只有三件事:






关于未来的建议


不要试图去“精通” AI。AI 是用来用的,不是用来学的。当你还在纠结什么是“Agent”、什么是“RAG”的时候,别人已经通过对话,让 AI 帮他关上了窗帘,写好了工作周报,甚至管理好了全家的财务。


技术文章会过时,AI 培训会失效,唯有你对 AI 下达的每一条指令,都在真实地改变你的生活。


附录:后台自动化全景图(给好奇者的参考)


23:02:成功获取全屋 110+ 个实体的清单。


23:33:自动化部署 homeassistant 技能,通过 SKILL.md 实现自我教学。


23:45:发现区域(Area)信息缺失,通过 api/template 接口暴力破解,建立房间与设备的关联图谱。


23:50:执行最终控制,系统进入稳定运行状态。


这就是构建智能管家的全过程。没有玄学,只有执行。现在,去下达你的第一条指令吧。


本页为内容存档快照,版权归原作者所有。查看来源 ›