已保存的真实日志证明了客厅灯从初始 off 变为 on 并成功回读、查询卧室温湿度,以及卧室空调开启请求获得 Agent 反馈并回读 ac.power:on。该次日志中的卧室空调初始状态已经是 on/sleep,因此它证明“请求与回读成功”,但不能单独证明空调发生了 off -> on 跃迁。API Key 已从仓库和证据日志中删除。
This competition deliverable adds three simulated smart-home tools to the openvela AI Agent and verifies them on the goldfish-arm64 emulator. It supports a real DeepSeek-backed ReAct loop and a deterministic offline fallback. The host bridge only adapts and forwards OpenAI-compatible HTTP traffic; model reasoning and tool selection are produced by DeepSeek, while tool dispatch and execution remain inside openvela.
日志没有输出内部 tool-call telemetry,且卧室空调编译初始值已经为 on/sleep,因此不把这一次 AC 结果夸大为已观察到 off -> on 状态变化。当前 run_deepseek_demo.sh 已在真实 AC 请求前用确定性工具把空调设为 off 并回读;使用有效 Key 重新运行可生成更强的 off -> on 证据。
已提交日志的短原文摘录:
LLM backend: 10.0.2.2:18081/v1/chat/completions (model: deepseek-chat) [router slot 0]
Sent to agent: Turn on living room light
[Agent]: Living room light is **on** at **80% brightness**
{"ok":true,"tool":"smart_env_query","state":{"room":"living_room","light":{"power":"on","brightness":80,"color_temp_k":4000},...}}
Sent to agent: Query bedroom temperature
- Temperature: **25.8°C**
- Humidity: **61%**
Sent to agent: Turn on bedroom AC
[Agent]: Bedroom AC is now **on**
Already was configured nicely for sleeping.
{"ok":true,"tool":"smart_env_query","state":{"room":"bedroom",...,"ac":{"power":"on","mode":"sleep","target_temp_c":25,"fan_speed":"low"}}}
smarthome_nl turn on living room light
{"stage":"intent_understanding","text":"turn on living room light"}
{"stage":"tool_selection","tool":"smart_light_control","input":{"room":"living_room","power":"on","brightness":78,"color_temp_k":4200}}
{"ok":true,"tool":"smart_light_control","room":"living_room","power":"on","brightness":78,"color_temp_k":4200}
{"stage":"result_feedback","message":"light command applied"}
openvela 智能家居 AI Agent
本仓库是 CCF/GitLink openvela AI Agent 智能家居赛题的初赛技术提交物。方案为 openvela AI Agent 增加三个智能家居工具和内存态设备模拟器,并在 goldfish-arm64 模拟器上完成了两条闭环验证:
smarthome_nl用受限词表映射意图,但复用同一个工具注册表和状态模型,便于评审在无外网环境复现。已保存的真实日志证明了客厅灯从初始
off变为on并成功回读、查询卧室温湿度,以及卧室空调开启请求获得 Agent 反馈并回读ac.power:on。该次日志中的卧室空调初始状态已经是on/sleep,因此它证明“请求与回读成功”,但不能单独证明空调发生了off -> on跃迁。API Key 已从仓库和证据日志中删除。公开 GitLink 仓库:https://www.gitlink.org.cn/whuuuuuuu/openvela-smarthome-agent
English Summary
This competition deliverable adds three simulated smart-home tools to the openvela AI Agent and verifies them on the goldfish-arm64 emulator. It supports a real DeepSeek-backed ReAct loop and a deterministic offline fallback. The host bridge only adapts and forwards OpenAI-compatible HTTP traffic; model reasoning and tool selection are produced by DeepSeek, while tool dispatch and execution remain inside openvela.
功能
smart_light_control:控制living_room、bedroom、kitchen的模拟灯光;smart_env_query:查询温度、湿度、照度、灯光和空调状态;smart_ac_control:控制模拟空调的电源、模式、目标温度和风速;tools:打印 openvela Agent 中注册的工具 schema;tool_call <name> [json]:不经 LLM 直接执行注册工具,用于异常与确定性验证;smarthome_nl <text>:无 Key 的离线自然语言回退;ask <text>:上游 AI Agent 的真实 LLM/ReAct 入口。所有设备状态都保存在 openvela 进程内存中。本项目不依赖真实灯具、空调、MQTT、MCP、飞书或微信;模拟器重启后状态恢复为初始值。
架构
远端 goldfish 环境直连 DeepSeek 曾出现网络/TLS 超时,因此真实演示使用
scripts/deepseek_openai_bridge.py:http://10.0.2.2:18081/v1/chat/completions发送 OpenAI-compatible 请求;https://api.deepseek.com/v1/chat/completions,并回传状态码、Content-Type和响应体;10.0.2.2是本演示 goldfish/QEMU 网络中从 guest 访问宿主机的地址。端口和地址可通过环境变量覆盖。固定上游版本
trunk)58c85bf035a5c2ea88db646bb6b405694f2f9af7packages/ai_agent964117fb5f441d67d35c461178b918ea7dd7c834vendor/openvela83592f988037cfcbbe308139add12079fb103791应用补丁前必须分别核对这两个路径。完整命令见
docs/reproducibility.md。快速复现
以下命令在 Linux 宿主机执行。
/path/to/openvela是包含packages/ai_agent、vendor/openvela、build.sh和emulator.sh的完整 openvela 工作区。1. 应用补丁并构建
目标配置:
2A. 真实 DeepSeek Agent 模式
先在当前 shell 中安全设置环境变量,不要把真实 Key 写进命令示例、脚本或配置文件:
唯一必需环境变量是
DEEPSEEK_API_KEY。可选项:OPENVELA_ROOT/root/autodl-tmp/ccf-openvela/openvelaDEEPSEEK_MODELdeepseek-chatBRIDGE_BIND_HOST0.0.0.0BRIDGE_PORT18081EMULATOR_BRIDGE_HOST10.0.2.2LOG_DIRdemo/logs脚本启动桥和无头模拟器,执行三组自然语言任务,流式脱敏输出,并在退出前执行
config_reset。结果写入demo/logs/emulator_deepseek_agent.log。真实闭环关键结果(从完整日志中抽取,省略调试行):
日志没有输出内部 tool-call telemetry,且卧室空调编译初始值已经为
on/sleep,因此不把这一次 AC 结果夸大为已观察到off -> on状态变化。当前run_deepseek_demo.sh已在真实 AC 请求前用确定性工具把空调设为off并回读;使用有效 Key 重新运行可生成更强的off -> on证据。已提交日志的短原文摘录:
省略号仅用于 README 压缩展示;可审计的完整原始行保存在
demo/logs/emulator_deepseek_agent.log。2B. 无 Key 的确定性离线模式
最短复现命令:
它生成
demo/logs/emulator_smarthome_demo.log。单轮输出示例:中文关键词同样受支持;自动采集日志默认用英文,减少无头串口编码差异。
3. 运行异常处理证据
脚本重启无头模拟器并验证非法 JSON、未知房间、目标温度/亮度越界、未知工具和不支持意图,输出
demo/logs/emulator_error_cases.log。4. 校验证据
校验脚本检查必要文件、完整许可证、上游 commit 记录、日志脱敏和成功/异常证据。它不需要 API Key,也不会替代实际构建或真实 LLM 重跑。
已验证环境与资源
cpu.max对应约 20 CPU,memory.max约 90 GiB;这是该实例实测配额,不是最低要求-j192,但 CPU cgroup 配额约 20;复现时可按实际配额降低并发17 seconds;首次同步和全量构建时间依网络、缓存与并发而异/root/autodl-tmp容量 80G、实测可用 44G;openvela 工作区约 37G,其中 goldfish 构建输出约 3.0G;根 overlay 30G、可用 22Gapi.deepseek.com:443,模拟器可访问宿主机桥端口完整 openvela 工作区远大于本补丁仓库。评审应预留高于工作区实际占用的磁盘空间;资源不足时降低构建并发,而不是照搬
-j192。证据文件
demo/logs/build_goldfish_ai_agent.log:goldfish 目标构建成功;demo/logs/emulator_ai_agent_cli.log:NSH、AI Agent CLI 和工具 schema;demo/logs/emulator_smarthome_demo.log:离线自然语言和直接工具调用;demo/logs/emulator_deepseek_agent.log:真实 DeepSeek ReAct 闭环;demo/logs/emulator_error_cases.log:非法 JSON、未知房间、越界值、未知工具和不支持意图。仓库结构
patches/:对两个固定上游组件的补丁;scripts/apply_patches.sh:幂等应用补丁;scripts/build_goldfish.sh:构建 goldfish 目标;scripts/run_smarthome_demo.sh:运行无 Key 离线演示;scripts/run_error_cases.sh:运行异常和数值边界演示;scripts/deepseek_openai_bridge.py:宿主机 OpenAI-compatible 转发桥;scripts/run_deepseek_demo.sh:运行真实 DeepSeek 演示并脱敏;scripts/verify_demo.sh:提交前静态和证据检查;docs/:设计、复现和提交说明;demo/logs/:构建、正常闭环、真实 LLM 和异常证据。安全要求
DEEPSEEK_API_KEY环境变量提供,严禁硬编码或提交;set_llm命令复制到终端记录、截图或视频;Authorization头;运行脚本必须在日志落盘前脱敏;0.0.0.0以供 QEMU guest 访问,只应在受信宿主/防火墙环境短时运行,完成后由脚本关闭;config_reset,并从宿主机 shell 中unset DEEPSEEK_API_KEY;SUBMISSION_CHECKLIST.md检查 API Key、SSH 密码、主机地址、Cookie 和令牌。常见问题
直连 DeepSeek 超时
远端 goldfish 的 guest 网络/TLS 路径可能无法稳定直连公网。使用
run_deepseek_demo.sh启动宿主机桥,让 guest 访问10.0.2.2:18081,由宿主机完成 HTTPS。先确认宿主机能访问api.deepseek.com:443。模拟器无法连接桥
确认 bridge 仍在运行、
BRIDGE_PORT未被占用、宿主机防火墙允许模拟器 NAT 网络访问,并核对EMULATOR_BRIDGE_HOST。若改变端口,guest 配置和桥监听端口必须一致。串口命令被截断或参数异常
NSH CLI 的行缓冲和参数数量有限。使用单行紧凑 JSON,不粘贴多行或超长提示;自动演示脚本已经控制命令长度。中文出现乱码时优先使用等价英文命令采证。
补丁无法干净应用
先核对两个固定 commit 和本地未提交修改。
apply_patches.sh会识别已应用补丁;既不满足git apply --check、也找不到已应用标志时会退出,不应强行忽略。没有 API Key
运行
run_smarthome_demo.sh。离线模式能复核意图、工具选择、执行和反馈,但报告结果时应明确它不是 LLM 推理。开源合规
本仓库根目录包含完整 Apache License 2.0 正文。第三方来源、准确 commit、MimiClaw MIT 归属、补丁上下文与原创边界、闭源代码声明及 AI 辅助开发说明见
THIRD_PARTY_NOTICES.md;简要归属见NOTICE。