HA Hotel AI Browser

官方使用文档 · v1.3.0

简介

Hotel AI Browser 是面向酒店运营场景的 AI 浏览器桌面应用。它将网页浏览、AI 对话、OTA 数据采集、房价房态分析、竞品查询、智能回复和一键调价放在同一个工作台中。

对酒店运营人员来说,它可以作为一个带 AI 助手的业务浏览器使用:先在左侧登录携程、美团、Booking.com、Trip.com 等平台,再在右侧用自然语言提出需求,例如查询实时房价、分析竞品趋势、生成调价建议或撰写客诉回复。

对开发和交付人员来说,它是一套可扩展的 Agent 工具平台。系统通过 skills/ 描述能力,通过 scripts/ 执行真实工具,通过主进程统一管理 Cookie、数据库、任务调度、浏览器自动化和模型调用。

统一工作台

浏览器、AI 对话、数据看板和自动化任务集中在一个桌面应用内完成。

面向酒店业务

围绕房价、房态、竞品、点评回复、OTA 后台操作等高频运营场景设计。

API 优先

优先通过平台真实接口获取数据,页面爬虫主要用于发现和修复 API。

可自维护

当接口失效或返回空数据时,可触发自动恢复流程重新拦截并修复脚本。

工作方式

系统运行时会把用户指令交给 Agent。Agent 判断任务意图后,选择合适的 Skill,脚本执行层再读取浏览器 Cookie、调用 OTA API、解析数据并写入数据库。对于定时采集任务,HeartbeatManager 会按计划自动执行,并在异常时进入恢复流程。

Hotel AI Browser · Agent Workflow
# Booking 后台房价采集
用户:查看 Booking 后台今天的房价和房量

Agent:
  1. 读取当前浏览器 Cookie
  2. 调用 api-booking-backend-price
  3. 使用 data-store 解析标准结构
  4. 写入数据库并返回分析摘要

Result:
  房型、日期、价格、库存、采集时间已完成同步。

环境要求

项目以 Windows 桌面应用为主要交付目标,开发环境需要 Node.js、npm 和可访问外部 OTA 平台及云端数据库的网络环境。

项目 要求
Node.js 22 或以上版本
桌面框架 Electron 28
语言 TypeScript + JavaScript
数据库 MySQL

安装

在项目根目录安装主应用依赖:

npm install

如果需要单独开发爬虫或数据库子项目,再分别安装对应依赖:

cd scripts/ai-web-crawler
npm install

cd ../../database
npm install

配置

大模型配置位于根目录 llm-config.json。正式发布时请使用模板值或环境注入,不要提交真实密钥。

{
  "provider": "openai",
  "apiKey": "YOUR_API_KEY",
  "baseURL": "https://example.com/v1",
  "model": "model-name",
  "temperature": 0.7,
  "maxTokens": 4096
}

应用启动后,ConfigManager 会读取该文件并同步到 Electron 用户数据目录。窗口尺寸、日志路径、语言、Skill 路径和数据库连接也由配置管理器统一维护。

配置项 说明
piAgent 模型提供商、模型名、API Key、温度、最大输出长度
window 默认窗口尺寸、最小尺寸、左右分屏比例
webView 默认首页、JavaScript、插件和弹窗设置
skills Skill 目录、脚本目录、默认超时、禁用列表
database MySQL 主机、端口、用户名和密码

提供商

系统支持多个模型提供商。不同提供商通过统一的 Agent 接口接入,业务层不需要关心具体模型来源。

Provider 适用场景
openai 默认推荐,适用于普通对话、工具调用和结构化分析
anthropic 适合长上下文分析和复杂策略推理
google 适合视觉导航、页面理解和轻量任务
azure 适合企业内网、合规和私有部署需求
ollama 适合本地模型验证和离线开发

网络

应用需要同时访问模型服务、云端 MySQL、OTA 公网和 OTA 商家后台。若部署在酒店内网或受限网络中,应提前放通相关域名和端口。

浏览器自动化依赖本地 CDP 端口。 主进程启动时会开启 127.0.0.1:9222,爬虫通过 Playwright 连接该端口读取页面和拦截 API。
连接目标 用途
LLM API AI 对话、策略分析、自动恢复诊断
MySQL 用户认证、历史数据、Dashboard 查询
OTA 平台 后台登录、价格采集、房态采集、调价操作
127.0.0.1:9222 本机浏览器调试和页面自动化

初始化

开发模式建议开两个终端:一个负责 Webpack 监听,一个负责启动 Electron。

npm run dev
npm start

首次进入应用后完成登录,系统会初始化数据库、Agent、Skill、心跳任务和浏览器视图。

使用

在左侧浏览器登录 OTA 平台,在右侧 AI 助手输入自然语言需求。AI 会根据意图选择合适的 Skill。

实时房价

查看 Booking 后台今天的房价和房量。

趋势分析

分析最近 7 天竞品价格趋势。

智能调价

根据当前房态给我一个调价建议。

智能回复

帮我回复当前页面的客户差评。

Windows

当前项目以 Windows 为主要交付平台,打包配置使用 NSIS 安装器。启动脚本中包含 chcp 65001,用于保证中文日志和命令行输出使用 UTF-8 编码。

生产环境建议使用打包后的安装包或便携版,不建议直接在用户机器上运行开发模式。

AI 浏览器

应用内置 BrowserView,支持多标签、导航控制、Google 登录状态同步,并开放本地 CDP 端口供 Playwright 自动化连接。

AI 助手

AI 助手由 PiAgentManager 管理,负责模型调用、会话历史、工具上下文、进度事件和 Skill 调用。

数据看板

Dashboard 通过 preload 暴露的安全 IPC 访问主进程,再由主进程读取数据库中的房价、房态、竞品和日历数据。

定时任务

心跳任务配置位于 tasks/schedule.json。修改配置后需要重启应用。

{
  "id": "api-booking-backend",
  "skill": "api-booking-backend-price",
  "platform": "booking",
  "cron": "40 20 * * *",
  "enabled": true,
  "params": {
    "cookieDomain": "admin.booking.com",
    "hotelId": 15994510
  }
}

自动恢复

自动恢复是系统的核心闭环。它用于处理 OTA 接口改版、Cookie 变化、请求参数变化、API 返回空壳等情况。

HeartbeatManager.executeTask()
  -> 执行当前 API 脚本
  -> 检测响应是否为空
  -> 策略 B:读取脚本并尝试修复
  -> 策略 A:调用爬虫重新拦截 API
  -> 写入新脚本
  -> 再次执行并验证
  -> data-store 入库

恢复流程不会只依赖 Agent 的文字判断,而是会通过独立数据验证确认输出文件是否可用。

智能调价

smart-pricing 负责生成调价建议,smart-price-adjust 负责在 OTA 后台执行调价。建议和执行是分离的,生产环境应先确认方案再执行真实修改。

数据输入 本店房态、本店价格、竞品价格、历史趋势
策略输出 目标日期、房型、建议价格、理由和风险提示
执行动作 通过后台页面自动修改价格并提交

智能回复

smart-reply 会从当前浏览器页面提取评价、点评或 IM 消息内容,并生成可直接复制使用的专业回复。

适用场景包括差评安抚、好评感谢、客诉回应、咨询回复和平台消息处理。

整体架构

项目由 Electron 主应用、Skills 定义层、Scripts 执行层、Agent Prompt、数据库模块和定时任务配置组成。

Hotel-Agent/
├── src/          # Electron 主应用源码
├── skills/       # Skill 定义
├── scripts/      # Skill 可执行脚本
├── agent/        # Agent 人设和 Prompt
├── database/     # 数据库访问模块
├── tasks/        # 定时任务配置
├── data/         # 运行时数据
└── docs/         # 项目文档

主进程

src/main/ 是项目的业务中心,负责窗口、浏览器、登录认证、数据库、Agent、Skill、调度和日志。

index.ts 应用入口和生命周期管理
ipc-handler.ts 主进程 IPC 注册
skill-manager.ts Skill 生命周期和上下文管理
heartbeat/ 定时任务和自动恢复闭环

渲染进程

src/renderer/ 负责前端 UI,包括分屏布局、地址栏、聊天面板、登录页、酒店控制台和质检页面。

Skills

skills/ 中每个目录都包含一个 SKILL.md。系统启动时扫描并注册 Skill。

Skill 用途
api-ctrip-public-price 携程公网实时房价
api-booking-backend-price Booking 后台房价房态
data-store API 响应解析和入库
smart-pricing 智能调价建议

Scripts

scripts/ 是工具执行层,包含 API 采集脚本、数据入库、数据库查询、文件操作、Playwright 爬虫和 OTA 自动调价。

数据库

database/ 是独立 TypeScript 子项目,主应用通过构建产物访问 MySQL。

数据流

系统的数据流分为实时采集、解析入库和历史查询三层。

实时采集:
用户/定时任务 -> SkillExecutor -> api-* script -> OTA API -> 原始 JSON

解析入库:
原始 JSON -> data-store adapter -> 标准结构 -> MySQL

历史查询:
Dashboard/AI 助手 -> IPC -> databaseManager -> MySQL -> UI/对话结果

API 请求统一经过 scripts/api-runtime,该运行时负责 Cookie 注入、限速、重试、重定向和标准输出。

IPC

渲染进程不直接访问 Node.js、Electron 或数据库。所有能力由 src/preload/index.ts 通过 contextBridge 暴露。

API 命名空间 用途
piAgent 发送消息、切换会话、监听进度
tabs 创建、关闭、切换和列出标签页
skills 列出、执行、启用、禁用和重载 Skill
dashboard 查询房价、房态、日历和映射数据
auth 注册、登录、登出、保存凭证和 Google 登录

本地开发

推荐以主项目为入口开发。涉及爬虫或数据库模块时,再进入对应子项目单独编译。

# 主应用开发
npm run dev
npm start

# 爬虫子项目
cd scripts/ai-web-crawler
npm run build

# 数据库子项目
cd database
npm install

主应用的 Webpack 配置包含 main、preload、renderer 和 google-auth-subprocess 四个入口。

添加 Skill

新增 Skill 通常需要同时添加定义文件和执行脚本。

skills/my-new-skill/SKILL.md
scripts/my-new-skill/index.js

SKILL.md 需要包含名称、描述、脚本路径、类型、参数定义和使用说明。脚本应通过标准输入或参数读取上下文,并将 JSON 结果输出到标准输出。

步骤 说明
1. 定义 Skill skills/ 创建目录并编写 SKILL.md
2. 编写脚本 scripts/ 创建可执行脚本
3. 本地验证 启动应用后检查 Skill 是否被加载
4. 更新打包配置 确认 extraResources 包含新脚本目录

测试

项目使用 Jest 和 ts-jest。当前测试覆盖心跳任务、记忆系统、国际化和部分主进程模块。

npm test
npm run test:watch

涉及真实 OTA 平台、Cookie、远程数据库和调价提交的能力,建议使用测试账号进行手工链路验证。

安全

应用遵循 Electron 安全实践:渲染进程不直接启用 Node.js 能力,所有操作通过 preload 暴露的白名单 API 完成。

生产发布前必须清理敏感信息。 包括模型 API Key、数据库密码、Cookie、诊断数据、截图和日志。

命令

命令 说明
npm run dev Webpack 开发监听
npm start 启动应用
npm run build 生产构建
npm run package 构建并打包
npm test 运行测试

日志

应用日志默认写入 Electron 用户数据目录,文件名为 hotel-ai-browser.log。开发阶段还可以查看 data/api-results/ 和诊断 JSON 文件。

打包发布

应用使用 electron-builder 打包,产物输出到 release/

npm run build
npm run package

新增 Skill 或 Script 后,需要确认 package.jsonextraResources 已包含对应资源。