Files
Uni-Lab-OS/docs/advanced_usage/configuration.md
Xuwznln ccbf5378dd update workbench example
update aksk desc

print res query logs

Fix skills exec error with action type

Update Skills

Update Skills addr

Change uni-lab. to leap-lab.
Support unit in pylabrobot

Support async func.

change to leap-lab backend. Support feedback interval. Reduce cocurrent lags.

fix create_resource_with_slot

update unilabos_formulation & batch-submit-exp

scale multi exec thread up to 48

update handle creation api

fit cocurrent gap

add running status debounce

allow non @topic_config support

update skill

add placeholder keys

always free

提交实验技能

disable samples

correct sample demo ret value

新增试剂reagent

update registry

新增manual_confirm

add workstation creation skill

add virtual_sample_demo 样品追踪测试设备

add external devices param
fix registry upload missing type

fast registry load

minor fix on skill & registry

stripe ros2 schema desc
add create-device-skill

new registry system backwards to yaml

remove not exist resource

new registry sys
exp. support with add device

correct raise create resource error

ret info fix revert

ret info fix

fix prcxi check

add create_resource schema

re signal host ready event

add websocket connection timeout and improve reconnection logic

add open_timeout parameter to websocket connection
add TimeoutError and InvalidStatus exception handling
implement exponential backoff for reconnection attempts
simplify reconnection logic flow
2026-04-16 01:33:36 +08:00

22 KiB
Raw Blame History

Uni-Lab 配置指南

本文档详细介绍 Uni-Lab 配置文件的结构、配置项、命令行覆盖和环境变量的使用方法。

配置文件概述

Uni-Lab 使用 Python 格式的配置文件(.py),默认为 unilabos_data/local_config.py。配置文件采用类属性的方式定义各种配置项,比 YAML 或 JSON 提供更多的灵活性,包括支持注释、条件逻辑和复杂数据结构。

获取实验室密钥

在配置文件或启动命令中您需要提供实验室的访问密钥ak和私钥sk

获取方式:

进入 Uni-Lab 实验室,点击左下角的头像,在实验室详情中获取所在实验室的 ak 和 sk

copy_aksk.gif

配置文件格式

默认配置示例

首次使用时,系统会自动创建一个基础配置文件 local_config.py

# unilabos的配置文件

class BasicConfig:
    ak = ""  # 实验室网页给您提供的ak代码
    sk = ""  # 实验室网页给您提供的sk代码


# WebSocket配置一般无需调整
class WSConfig:
    reconnect_interval = 5  # 重连间隔(秒)
    max_reconnect_attempts = 999  # 最大重连次数
    ping_interval = 30  # ping间隔

完整配置示例

您可以根据需要添加更多配置选项:

#!/usr/bin/env python
# coding=utf-8
"""Uni-Lab 配置文件"""

# 基础配置
class BasicConfig:
    ak = ""  # 实验室访问密钥
    sk = ""  # 实验室私钥
    working_dir = ""  # 工作目录(通常自动设置)
    config_path = ""  # 配置文件路径(自动设置)
    is_host_mode = True  # 是否为主站模式
    slave_no_host = False  # 从站模式下是否跳过等待主机服务
    upload_registry = False  # 是否上传注册表
    machine_name = "undefined"  # 机器名称(自动获取)
    vis_2d_enable = False  # 是否启用2D可视化
    enable_resource_load = True  # 是否启用资源加载
    communication_protocol = "websocket"  # 通信协议
    log_level = "DEBUG"  # 日志级别TRACE, DEBUG, INFO, WARNING, ERROR, CRITICAL

# WebSocket配置
class WSConfig:
    reconnect_interval = 5  # 重连间隔(秒)
    max_reconnect_attempts = 999  # 最大重连次数
    ping_interval = 30  # ping间隔

# HTTP配置
class HTTPConfig:
    remote_addr = "https://leap-lab.bohrium.com/api/v1"  # 远程服务器地址

# ROS配置
class ROSConfig:
    modules = [
        "std_msgs.msg",
        "geometry_msgs.msg",
        "control_msgs.msg",
        "control_msgs.action",
        "nav2_msgs.action",
        "unilabos_msgs.msg",
        "unilabos_msgs.action",
    ]  # 需要加载的ROS模块

配置优先级

配置项的生效优先级从高到低为:

  1. 命令行参数:最高优先级
  2. 环境变量:中等优先级
  3. 配置文件:基础优先级

这意味着命令行参数会覆盖环境变量和配置文件,环境变量会覆盖配置文件。

推荐配置方式

根据参数特性,不同配置项有不同的推荐配置方式:

建议通过命令行指定的参数(不需要写入配置文件)

以下参数推荐通过命令行或环境变量指定,一般不需要在配置文件中配置

参数 命令行参数 原因
ak / sk --ak / --sk 安全考虑:避免敏感信息泄露
working_dir --working_dir 灵活性:不同环境可能使用不同目录
is_host_mode --is_slave 运行模式:由启动场景决定,不固定
slave_no_host --slave_no_host 运行模式:从站特殊配置,按需使用
upload_registry --upload_registry 临时操作:仅首次启动或更新时需要
vis_2d_enable --2d_vis 调试功能:按需临时启用
remote_addr --addr 环境切换:测试/生产环境快速切换

推荐用法示例:

# 标准启动命令(所有必要参数通过命令行指定)
unilab --ak your_ak --sk your_sk -g graph.json

# 测试环境
unilab --addr test --ak your_ak --sk your_sk -g graph.json

# 从站模式
unilab --is_slave --ak your_ak --sk your_sk

# 首次启动上传注册表
unilab --ak your_ak --sk your_sk -g graph.json --upload_registry

适合在配置文件中配置的参数

以下参数适合在配置文件中配置,通常不会频繁更改:

参数 配置类 说明
log_level BasicConfig 日志级别配置
reconnect_interval WSConfig WebSocket 重连间隔
max_reconnect_attempts WSConfig WebSocket 最大重连次数
ping_interval WSConfig WebSocket 心跳间隔
modules ROSConfig ROS 模块列表

配置文件示例(推荐最小配置):

# unilabos的配置文件

class BasicConfig:
    log_level = "INFO"  # 生产环境建议 INFO调试时用 DEBUG

# WebSocket配置一般保持默认即可
class WSConfig:
    reconnect_interval = 5
    max_reconnect_attempts = 999
    ping_interval = 30

注意: aksk 不建议写在配置文件中,始终通过命令行参数或环境变量传递。

命令行参数覆盖配置

Uni-Lab 允许通过命令行参数覆盖配置文件中的设置,提供更灵活的配置方式。

支持命令行覆盖的配置项

配置类 配置字段 命令行参数 说明
BasicConfig ak --ak 实验室访问密钥
BasicConfig sk --sk 实验室私钥
BasicConfig working_dir --working_dir 工作目录路径
BasicConfig is_host_mode --is_slave 主站模式(参数为从站模式,取反)
BasicConfig slave_no_host --slave_no_host 从站模式下跳过等待主机服务
BasicConfig upload_registry --upload_registry 启动时上传注册表信息
BasicConfig vis_2d_enable --2d_vis 启用 2D 可视化
HTTPConfig remote_addr --addr 远程服务地址

特殊命令行参数

除了直接覆盖配置项的参数外,还有一些特殊的命令行参数:

参数 说明
--config 指定配置文件路径
--port Web 服务端口(不影响配置文件)
--disable_browser 禁用自动打开浏览器(不影响配置文件)
--visual 可视化工具选择(不影响配置文件)
--skip_env_check 跳过环境检查(不影响配置文件)

命令行覆盖使用示例

# 通过命令行覆盖认证信息
unilab --ak "new_access_key" --sk "new_secret_key" -g graph.json

# 覆盖服务器地址
unilab --ak ak --sk sk --addr "https://custom.server.com/api/v1" -g graph.json

# 启用从站模式并跳过等待主机
unilab --is_slave --slave_no_host --ak ak --sk sk

# 启用上传注册表和2D可视化
unilab --upload_registry --2d_vis --ak ak --sk sk -g graph.json

# 组合使用多个覆盖参数
unilab --ak "key" --sk "secret" --addr "test" --upload_registry --2d_vis -g graph.json

预设环境地址

--addr 参数支持以下预设值,会自动转换为对应的完整 URL

  • testhttps://leap-lab.test.bohrium.com/api/v1
  • uathttps://leap-lab.uat.bohrium.com/api/v1
  • localhttp://127.0.0.1:48197/api/v1
  • 其他值 → 直接使用作为完整 URL

配置选项详解

1. BasicConfig - 基础配置

基础配置包含了系统运行的核心参数:

参数 类型 默认值 说明
ak str "" 实验室访问密钥(必需)
sk str "" 实验室私钥(必需)
working_dir str "" 工作目录,通常自动设置
config_path str "" 配置文件路径,自动设置
is_host_mode bool True 是否为主站模式
slave_no_host bool False 从站模式下是否跳过等待主机服务
upload_registry bool False 启动时是否上传注册表信息
machine_name str "undefined" 机器名称,自动从 hostname 获取(不可配置)
vis_2d_enable bool False 是否启用 2D 可视化
enable_resource_load bool True 是否启用资源加载
communication_protocol str "websocket" 通信协议,固定为 websocket
log_level str "DEBUG" 日志级别

日志级别选项

  • TRACE - 追踪级别(最详细)
  • DEBUG - 调试级别(默认)
  • INFO - 信息级别
  • WARNING - 警告级别
  • ERROR - 错误级别
  • CRITICAL - 严重错误级别(最简略)

认证配置ak / sk

aksk 是必需的认证参数:

  1. 获取方式:在 Uni-Lab 官网 注册实验室后获得
  2. 配置方式
    • 命令行参数--ak "your_key" --sk "your_secret"(最高优先级,推荐)
    • 环境变量UNILABOS_BASICCONFIG_AKUNILABOS_BASICCONFIG_SK
    • 配置文件:在 BasicConfig 类中设置(不推荐,安全风险)
  3. 安全注意:请妥善保管您的密钥信息,不要提交到版本控制

推荐做法

  • 开发环境:使用命令行参数或环境变量
  • 生产环境:使用环境变量
  • 临时测试:使用命令行参数

2. WSConfig - WebSocket 配置

WebSocket 是 Uni-Lab 的主要通信方式:

参数 类型 默认值 说明
reconnect_interval int 5 断线重连间隔(秒)
max_reconnect_attempts int 999 最大重连次数
ping_interval int 30 心跳检测间隔(秒)

3. HTTPConfig - HTTP 配置

HTTP 客户端配置用于与云端服务通信:

参数 类型 默认值 说明
remote_addr str "https://leap-lab.bohrium.com/api/v1" 远程服务地址

预设环境地址

  • 生产环境:https://leap-lab.bohrium.com/api/v1(默认)
  • 测试环境:https://leap-lab.test.bohrium.com/api/v1
  • UAT 环境:https://leap-lab.uat.bohrium.com/api/v1
  • 本地环境:http://127.0.0.1:48197/api/v1

4. ROSConfig - ROS 配置

配置 ROS 消息转换器需要加载的模块:

配置项 类型 默认值 说明
modules list 见下方示例 ROS 模块列表

默认模块列表:

class ROSConfig:
    modules = [
        "std_msgs.msg",           # 标准消息类型
        "geometry_msgs.msg",      # 几何消息类型
        "control_msgs.msg",       # 控制消息类型
        "control_msgs.action",    # 控制动作类型
        "nav2_msgs.action",       # 导航动作类型
        "unilabos_msgs.msg",      # UniLab 自定义消息类型
        "unilabos_msgs.action",   # UniLab 自定义动作类型
    ]

您可以根据实际使用的设备和功能添加其他 ROS 模块。

环境变量配置

Uni-Lab 支持通过环境变量覆盖配置文件中的设置。

环境变量命名规则

UNILABOS_<配置类名>_<配置项名>

注意:

  • 环境变量名不区分大小写
  • 配置类名和配置项名都会转换为大写进行匹配

设置环境变量

Linux / macOS

# 临时设置(当前终端)
export UNILABOS_BASICCONFIG_LOG_LEVEL=INFO
export UNILABOS_BASICCONFIG_AK="your_access_key"
export UNILABOS_BASICCONFIG_SK="your_secret_key"

# 永久设置(添加到 ~/.bashrc 或 ~/.zshrc
echo 'export UNILABOS_BASICCONFIG_LOG_LEVEL=INFO' >> ~/.bashrc
source ~/.bashrc

Windows (cmd)

# 临时设置
set UNILABOS_BASICCONFIG_LOG_LEVEL=INFO
set UNILABOS_BASICCONFIG_AK=your_access_key

# 永久设置(系统环境变量)
setx UNILABOS_BASICCONFIG_LOG_LEVEL INFO

Windows (PowerShell)

# 临时设置
$env:UNILABOS_BASICCONFIG_LOG_LEVEL="INFO"
$env:UNILABOS_BASICCONFIG_AK="your_access_key"

# 永久设置
[Environment]::SetEnvironmentVariable("UNILABOS_BASICCONFIG_LOG_LEVEL", "INFO", "User")

环境变量类型转换

系统会根据配置项的原始类型自动转换环境变量值:

原始类型 转换规则
bool "true", "1", "yes" → True其他 → False
int 转换为整数
float 转换为浮点数
str 直接使用字符串值

示例:

# 布尔值
export UNILABOS_BASICCONFIG_IS_HOST_MODE=true  # 将设置为 True
export UNILABOS_BASICCONFIG_IS_HOST_MODE=false  # 将设置为 False

# 整数
export UNILABOS_WSCONFIG_RECONNECT_INTERVAL=10  # 将设置为 10

# 字符串
export UNILABOS_BASICCONFIG_LOG_LEVEL=INFO  # 将设置为 "INFO"

环境变量示例

# 设置基础配置
export UNILABOS_BASICCONFIG_AK="your_access_key"
export UNILABOS_BASICCONFIG_SK="your_secret_key"
export UNILABOS_BASICCONFIG_IS_HOST_MODE="true"

# 设置WebSocket配置
export UNILABOS_WSCONFIG_RECONNECT_INTERVAL="10"
export UNILABOS_WSCONFIG_MAX_RECONNECT_ATTEMPTS="500"

# 设置HTTP配置
export UNILABOS_HTTPCONFIG_REMOTE_ADDR="https://leap-lab.test.bohrium.com/api/v1"

配置文件使用方法

1. 使用默认配置文件(推荐)

系统会自动查找并加载配置文件:

# 直接启动,使用默认的 unilabos_data/local_config.py
unilab --ak your_ak --sk your_sk -g graph.json

查找顺序:

  1. 环境变量 UNILABOS_BASICCONFIG_CONFIG_PATH 指定的路径
  2. 工作目录下的 local_config.py
  3. 首次使用时会引导创建配置文件

2. 指定配置文件启动

# 使用指定配置文件启动
unilab --config /path/to/your/config.py --ak ak --sk sk -g graph.json

3. 配置文件验证

系统启动时会自动验证配置文件:

  • 语法检查:确保 Python 语法正确
  • 类型检查:验证配置项类型是否匹配
  • 加载确认:控制台输出加载成功信息

常用配置场景

场景 1调整日志级别

配置文件方式:

class BasicConfig:
    log_level = "INFO"  # 生产环境建议使用 INFO 或 WARNING

环境变量方式:

export UNILABOS_BASICCONFIG_LOG_LEVEL=INFO
unilab --ak ak --sk sk -g graph.json

命令行方式(需要配置文件已包含):

# 配置文件无直接命令行参数,需通过环境变量
UNILABOS_BASICCONFIG_LOG_LEVEL=INFO unilab --ak ak --sk sk -g graph.json

场景 2配置 WebSocket 重连

配置文件方式:

class WSConfig:
    reconnect_interval = 10  # 增加重连间隔到 10 秒
    max_reconnect_attempts = 100  # 减少最大重连次数到 100 次

环境变量方式:

export UNILABOS_WSCONFIG_RECONNECT_INTERVAL=10
export UNILABOS_WSCONFIG_MAX_RECONNECT_ATTEMPTS=100

场景 3切换服务器环境

配置文件方式:

class HTTPConfig:
    remote_addr = "https://leap-lab.test.bohrium.com/api/v1"

环境变量方式:

export UNILABOS_HTTPCONFIG_REMOTE_ADDR=https://leap-lab.test.bohrium.com/api/v1

命令行方式(推荐):

unilab --addr test --ak your_ak --sk your_sk -g graph.json

场景 4从站模式配置

配置文件方式:

class BasicConfig:
    is_host_mode = False  # 从站模式
    slave_no_host = True  # 不等待主机服务

命令行方式(推荐):

unilab --is_slave --slave_no_host --ak your_ak --sk your_sk

最佳实践

1. 安全配置

不要在配置文件中存储敏感信息

  • 不推荐:在配置文件中明文存储 ak/sk
  • 推荐:使用环境变量或命令行参数
# 生产环境 - 使用环境变量(推荐)
export UNILABOS_BASICCONFIG_AK="your_access_key"
export UNILABOS_BASICCONFIG_SK="your_secret_key"
unilab -g graph.json

# 或使用命令行参数
unilab --ak "your_access_key" --sk "your_secret_key" -g graph.json

其他安全建议:

  • 不要将包含密钥的配置文件提交到版本控制系统
  • 限制配置文件权限:chmod 600 local_config.py
  • 定期更换访问密钥
  • 使用 .gitignore 排除配置文件

2. 多环境配置

为不同环境创建不同的配置文件:

configs/
├── base_config.py       # 基础配置(非敏感)
├── dev_config.py        # 开发环境
├── test_config.py       # 测试环境
├── prod_config.py       # 生产环境
└── example_config.py    # 示例配置

环境切换示例

# 本地开发环境
unilab --config configs/dev_config.py --addr local --ak ak --sk sk -g graph.json

# 测试环境
unilab --config configs/test_config.py --addr test --ak ak --sk sk --upload_registry -g graph.json

# 生产环境
unilab --config configs/prod_config.py --ak "$PROD_AK" --sk "$PROD_SK" -g graph.json

3. 配置管理

配置文件最佳实践:

  • 保持配置文件简洁,只包含需要修改的配置项
  • 为配置项添加注释说明其作用
  • 定期检查和更新配置文件
  • 版本控制仅保存示例配置,不包含实际密钥

命令行参数优先使用场景:

  • 临时测试不同配置
  • CI/CD 流水线中的动态配置
  • 不同环境间快速切换
  • 敏感信息的安全传递

4. 灵活配置策略

基础配置文件 + 命令行覆盖的推荐方式:

# base_config.py - 基础配置(非敏感信息)
class BasicConfig:
    # 非敏感配置写在文件中
    is_host_mode = True
    upload_registry = False
    vis_2d_enable = False
    log_level = "INFO"

class WSConfig:
    reconnect_interval = 5
    max_reconnect_attempts = 999
    ping_interval = 30
# 启动时通过命令行覆盖关键参数
unilab --config base_config.py \
       --ak "$AK" \
       --sk "$SK" \
       --addr "test" \
       --upload_registry \
       --2d_vis \
       -g graph.json

故障排除

1. 配置文件加载失败

错误信息[ENV] 配置文件 xxx 不存在

解决方法

  • 确认配置文件路径正确
  • 检查文件权限是否可读
  • 确保配置文件是 .py 格式
  • 使用绝对路径或相对于当前目录的路径

2. 语法错误

错误信息[ENV] 加载配置文件 xxx 失败

解决方法

  • 检查 Python 语法是否正确
  • 确认类名和字段名拼写正确
  • 验证缩进是否正确(使用空格而非制表符)
  • 确保字符串使用引号包裹

3. 认证失败

错误信息后续运行必须拥有一个实验室

解决方法

  • 确认 aksk 已正确配置
  • 检查密钥是否有效(未过期或撤销)
  • 确认网络连接正常
  • 验证密钥是否来自正确的实验室

4. 环境变量不生效

解决方法

  • 确认环境变量名格式正确(UNILABOS_<类名>_<字段名>
  • 检查环境变量是否已正确设置(echo $VARIABLE_NAME
  • 重启终端或重新加载环境变量
  • 确认环境变量值的类型正确

5. 命令行参数不生效

错误现象:设置了命令行参数但配置没有生效

解决方法

  • 确认参数名拼写正确(如 --ak 而不是 --access_key
  • 检查参数格式是否正确(布尔参数如 --is_slave 不需要值)
  • 确认参数位置正确(所有参数都应在 unilab 之后)
  • 查看启动日志确认参数是否被正确解析
  • 检查是否有配置文件或环境变量与之冲突

6. 配置优先级混淆

错误现象:不确定哪个配置生效

解决方法

  • 记住优先级:命令行参数 > 环境变量 > 配置文件
  • 使用 --ak--sk 参数时会看到提示信息:"传入了 ak 参数,优先采用传入参数!"
  • 检查启动日志中的配置加载信息
  • 临时移除低优先级配置来测试高优先级配置是否生效
  • 使用 printenv | grep UNILABOS 查看所有相关环境变量

配置验证

检查配置是否生效

启动 Uni-Lab 时,控制台会输出配置加载信息:

[ENV] 配置文件 /path/to/config.py 加载成功
[ENV] 设置 BasicConfig.log_level = INFO
传入了ak参数优先采用传入参数
传入了sk参数优先采用传入参数

常见配置错误

  1. 配置文件格式错误

    [ENV] 加载配置文件 /path/to/config.py 失败
    

    解决方案:检查 Python 语法,确保配置类定义正确

  2. 环境变量格式错误

    [ENV] 环境变量格式不正确UNILABOS_INVALID_VAR
    

    解决方案:确保环境变量遵循 UNILABOS_<类名>_<字段名> 格式

  3. 类或字段不存在

    [ENV] 未找到类UNKNOWNCONFIG
    [ENV] 类 BasicConfig 中未找到字段UNKNOWN_FIELD
    

    解决方案:检查配置类名和字段名是否正确

相关文档