KINGSTON-115/llm-pid-tuner

基于 LLM 的极简 PID 自动调参系统 (CLI 版)

这是什么

LLM‑PID‑Tuner 是一个桌面工具,通过让大语言模型(LLM)建议新的 P、I、D 值,帮助您调节物理系统(加热板、电机、烤箱等)的 PID 控制器。它可以在三种模式下工作:

  1. 硬件模式 – 通过串口读取 Arduino/ESP32(或其他 MCU)的实时 CSV 数据,将数据发送给 LLM,接收新的 PID 设定点并写回开发板。
  2. 本地模拟器 – 运行 Python 热系统模型(simulator.py),无需硬件即可查看调参循环。
  3. MATLAB/Simulink 模式 – 通过 MATLAB 引擎驱动 Simulink PID 模块,让 LLM 进行调参。 该程序为初学者提供了现成的 Windows .exe,但源码也可以直接用 Python 运行。

适用人群

  • 已经拥有 PID 控制设备,但难以找到合适增益的爱好者或工程师。
  • 希望在投入硬件之前尝试 LLM 驱动的控制回路优化的任何人。
  • 熟悉简单串行 CSV 协议或 Simulink 模型的用户。

它能做什么(以及不能做什么)

能力 详情
实时 PID 建议 读取传感器/执行器数据,评估性能(误差、超调、稳态),请求 LLM 提供新的 PID 设定点,应用安全限制,如果性能下降可以回滚。
可视化 桌面 UI(或 TUI)显示实时曲线、当前 PID 值,并允许您即时更改设定点(t 键)。
硬件集成 使用一个精简的 Arduino/ESP32 固件(firmware.cpp),通过串口流式传输 timestamp_ms,setpoint,input,pwm,error,p,i,d。
仿真 simulator.py 模拟热系统,无需开发板即可测试整个回路。
Simulink 支持 调用 MATLAB 引擎运行 Simulink 模型,读取输出信号并调整 PID 模块。
离线使用 通过将 LLM_API_BASE_URL 指向本地服务器,可与任何兼容 OpenAI 的本地模型(Ollama、LM Studio 等)配合使用。
不是魔法按钮控制器 它不保证完美控制、不取代安全电路,也不能单独产生基准级性能。

快速入门

  1. 从最新版本下载 Windows 可执行文件(llm‑pid‑tuner.exe)。
  2. 连接运行所提供的 firmware.cpp 的开发板(或任何遵循相同 CSV 串行格式的设备)。在 config.json 中将 SERIAL_PORT 设置为 AUTO 或实际的 COM 端口。
  3. 编辑 config.json – 至少填写 LLM 字段:
    {
      "LLM_API_KEY": "sk‑your‑key",
      "LLM_API_BASE_URL": "https://api.openai.com/v1",
      "LLM_MODEL_NAME": "gpt-4o",
      "LLM_PROVIDER": "openai"
    }
    
    (通过更改 URL 并保持 openai 作为提供者,您也可以使用本地模型。)
  4. 运行 exe – 选择硬件模式,让它扫描串口,并观察 UI 绘制响应。
  5. 观察 – 工具会自动请求新的 PID 值、执行限制,并在新参数使系统恶化时回滚。当误差、超调、稳态标准连续几轮满足时,调参停止。

如果没有硬件,请运行模拟器代替: pip install -r requirements.txt && python simulator.py。


架构一览

+-------------------+        +-------------------+        +-------------------+
| Local simulator   |  API   | LLM / AI tuner    |  API   | Real hardware     |
| (simulator.py)    |<------>| (tuner.py)        |<------>| (firmware.cpp)    |
+-------------------+        +-------------------+        +-------------------+
  • 模拟器:一个热系统 Python 模型,输出与固件相同的 CSV 流。
  • 调参器:核心循环 – 读取数据 → 评估 → 调用 LLM → 应用安全措施 → 写入新 PID。
  • 固件:实现 CSV 协议并运行 PID 控制器的极简 Arduino/ESP32 草图。
  • 桌面启动器(launcher.py)让您选择硬件或仿真,并在 GUI 和 TUI 之间切换。
  • 辅助脚本:doctor.py(环境检查)、system_id.py(阶跃响应辨识)、pid_safety.py(限制执行)、benchmark.py(开发测试)。

配置工具

  • config.json – 主配置文件;首次运行时自动生成。
  • 主要部分:
    • 串口:SERIAL_PORT、BAUD_RATE、HARDWARE_PROFILE(默认 generic_serial_csv)。
    • LLM:API 密钥、基础 URL、模型名称、提供者(openai、anthropic、openai_claude、orcarouter 等)。
    • 调参行为:阈值,如 GOOD_ENOUGH_AVG_ERROR、GOOD_ENOUGH_OVERSHOOT、REQUIRED_STABLE_ROUNDS。
    • Simulink:.slx 文件、PID 模块、输出信号、可选的 MATLAB 根目录路径。
    • 可选:代理设置、CSV 导出路径、自定义提示词覆盖。
  • 环境变量会覆盖 JSON 值,这对于 CI 或机密管理很方便。

扩展/定制

  • 提示词调整 – 在会话开始时(调参前对话框)输入自然语言偏好,或编辑 llm/prompts.py 更改 LLM 收到的系统提示词。
  • 添加新的硬件配置文件 – 实现预期的 CSV 列或自定义解析器,并将配置文件名称列在 config.json 中。
  • 更换 LLM – 任何遵循 OpenAI /v1/chat/completions 模式的服务都可以使用;只需更改 LLM_API_BASE_URL 和 LLM_PROVIDER。
  • 贡献 – 仓库使用 dev 分支存放最新功能,使用稳定的 main 分支发布版本。

安全须知

调参器只建议 PID 增益,不取代硬件安全电路。使用加热设备时,始终保持温度限制、看门狗定时器和物理紧急停止开关。


许可证

MIT – 您可以自由使用、修改和重新分发代码。

相关

  • 项目
  • 项目
  • 项目
  • 项目
  • 项目