当前位置: 首页 > news >正文

Python 上位机 + Claude Code 实现试剂研发全自动迭代闭环系统

在试剂研发场景中,传统实验依赖人工记录数据、手动调整配方,效率低且易出错。本文将基于Python 上位机 + 串口通信 + Claude Code,搭建一套带永久记忆、自动迭代优化的智能实验闭环系统,实现:设备数据自动上传 → AI 分析迭代 → 自动下发配方指令 → 循环优化,关闭程序重启后仍可继承历史实验记忆。

一、系统整体流程

整个系统为全自动闭环逻辑,无需人工干预,流程如下:

  1. 实验设备通过串口将实时试剂数据(浓度、温度、反应结果等)上传至 Python 上位机;
  2. 上位机接收数据并格式化,发送给常驻运行的 Claude Code
  3. Claude Code 保留上下文记忆,基于历史实验数据迭代分析,给出试剂用量调整指令;
  4. 上位机接收 AI 调整结果,通过串口下发给实验设备执行;
  5. 每轮迭代数据自动保存至history.md关闭程序重启后可恢复记忆,继续迭代

二、核心原理说明

1. Claude Code 上下文记忆机制

  • 进程常驻:Claude Code 仅启动一次且不关闭,全程保留对话上下文,实现连续迭代优化;
  • 永久记忆方案:Claude Code 进程关闭后记忆会丢失,因此通过history.md文件持久化所有实验记录,重启后自动加载历史,实现无缝续跑。

2. 串口通信逻辑

  • 使用 Pythonpyserial库实现上位机与实验设备的双向通信:
    • 读取设备上传的实验数据;
    • 发送 AI 生成的试剂调整指令至设备。

3. 自动迭代逻辑

  • 上位机通过subprocess启动 Claude Code 子进程,通过标准输入输出(stdin/stdout)持续交互;
  • 每轮实验数据 + 调整结果实时写入历史文件,保证数据不丢失。

三、环境准备

1. 安装依赖库

bash

运行

# 串口通信库 pip install pyserial

2. 环境要求

  • 已安装并配置好Claude Code CLI,命令行可直接调用claude code
  • 实验设备与电脑正常串口连接,知晓串口号(如 COM3)、波特率(如 9600);
  • Python 3.8 及以上版本。

四、完整实现代码

python

运行

import serial import subprocess from subprocess import PIPE import time # ====================== 系统配置项 ====================== # 串口配置 SERIAL_PORT = "COM3" # 实验设备串口号 BAUD_RATE = 9600 # 设备波特率 SERIAL_TIMEOUT = 2 # 串口超时时间 # 历史记忆文件(关闭程序后永久保存) HISTORY_FILE = "history.md" # AI 交互配置 AI_SYSTEM_PROMPT = """ 你是专业试剂研发智能优化助手,负责全程迭代优化试剂配方。 严格遵循以下规则: 1. 记住所有历史实验数据和调整记录,基于历史做精准迭代; 2. 仅返回试剂用量调整指令,格式示例:试剂A=5.2ml,试剂B=3.1ml; 3. 不输出多余文字、解释、标点外的符号,仅保留最简指令; 4. 结合最新实验数据,逐步优化试剂配比,提升实验效果。 """ # ====================================================== # ====================== 历史记忆管理 ====================== def load_experiment_history() -> str: """加载历史实验记录,重启后恢复AI记忆""" try: with open(HISTORY_FILE, "r", encoding="utf-8") as f: return f.read() except FileNotFoundError: # 文件不存在则创建并返回空历史 with open(HISTORY_FILE, "w", encoding="utf-8") as f: f.write("# 试剂研发实验历史记录\n") return "暂无历史实验数据" def append_to_history(experiment_data: str, adjust_command: str) -> None: """追加每轮迭代数据到历史文件,实现永久记忆""" record = f""" --- ### 迭代时间:{time.strftime('%Y-%m-%d %H:%M:%S')} 实验数据:{experiment_data} AI调整指令:{adjust_command} """ with open(HISTORY_FILE, "a", encoding="utf-8") as f: f.write(record) # ====================== Claude Code 启动 ====================== def start_claude_code() -> subprocess.Popen: """启动常驻 Claude Code 进程,保留上下文记忆""" claude_process = subprocess.Popen( ["claude", "code"], stdin=PIPE, stdout=PIPE, stderr=PIPE, text=True, encoding="utf-8", bufsize=1 # 行缓冲,保证实时交互 ) # 加载历史记忆 + 发送系统提示词 history_content = load_experiment_history() init_prompt = f"{AI_SYSTEM_PROMPT}\n历史实验记录:\n{history_content}\n" claude_process.stdin.write(init_prompt) claude_process.stdin.flush() print("✅ Claude Code 启动完成,历史记忆已加载") return claude_process # ====================== 串口通信 ====================== def init_serial_port() -> serial.Serial: """初始化串口,连接实验设备""" try: ser = serial.Serial( port=SERIAL_PORT, baudrate=BAUD_RATE, timeout=SERIAL_TIMEOUT ) if ser.is_open: print(f"✅ 串口 {SERIAL_PORT} 连接成功") return ser except Exception as e: print(f"❌ 串口连接失败:{str(e)}") raise SystemExit(1) def read_device_data(ser: serial.Serial) -> str: """读取设备上传的实验数据""" raw_data = ser.readline().decode("utf-8", errors="ignore").strip() return raw_data def send_adjust_to_device(ser: serial.Serial, command: str) -> None: """向设备发送AI调整后的试剂用量指令""" send_data = command + "\n" ser.write(send_data.encode("utf-8")) # ====================== 全自动迭代主循环 ====================== def auto_iteration_loop(): """启动全自动试剂研发迭代闭环""" print("=" * 60) print("🚀 试剂研发全自动迭代系统启动") print("=" * 60) # 初始化模块 claude = start_claude_code() ser = init_serial_port() try: while True: # 1. 读取设备实验数据 exp_data = read_device_data(ser) if not exp_data: time.sleep(0.5) continue print(f"\n📥 最新实验数据:{exp_data}") # 2. 发送数据给 Claude Code 迭代分析 claude.stdin.write(f"最新实验数据:{exp_data}\n") claude.stdin.flush() # 3. 获取AI调整指令 adjust_cmd = claude.stdout.readline().strip() print(f"🤖 AI 迭代调整:{adjust_cmd}") # 4. 保存本轮数据到历史文件 append_to_history(exp_data, adjust_cmd) # 5. 下发指令给实验设备 send_adjust_to_device(ser, adjust_cmd) print("📤 已下发调整指令至实验设备") # 等待设备执行完成,进入下一轮迭代 time.sleep(3) except KeyboardInterrupt: print("\n🛑 系统手动停止,所有实验数据已保存至 history.md") finally: ser.close() claude.terminate() print("🔌 串口与 Claude Code 已安全关闭") # ====================== 启动系统 ====================== if __name__ == "__main__": auto_iteration_loop()

五、代码详细说明

1. 配置模块

  • SERIAL_PORT/BAUD_RATE:根据实际实验设备修改串口号和波特率;
  • HISTORY_FILE:历史记录文件,重启后自动读取,实现永久记忆;
  • AI_SYSTEM_PROMPT:定义 Claude Code 角色规则,约束输出格式,保证指令可直接被设备识别。

2. 历史记忆管理

  • load_experiment_history():程序启动时读取历史记录,恢复 AI 记忆;
  • append_to_history():每轮迭代后写入时间、实验数据、AI 指令,防止数据丢失。

3. Claude Code 常驻进程

  • 通过subprocess.Popen启动 Claude Code,不主动关闭进程,保证上下文记忆;
  • 启动时自动加载历史记录,让 AI 继承之前所有实验数据。

4. 串口通信模块

  • init_serial_port():初始化串口,处理连接异常;
  • read_device_data():读取设备上传的实时数据;
  • send_adjust_to_device():将 AI 指令下发给实验设备执行。

5. 自动迭代循环

  • 无限循环读取设备数据 → 发送 AI 分析 → 下发指令 → 保存记录;
  • 支持Ctrl+C安全退出,自动关闭串口和 Claude Code 进程。

六、系统使用说明

  1. 修改配置:将SERIAL_PORTBAUD_RATE改为实验设备实际参数;
  2. 运行程序:直接执行 Python 脚本,系统自动启动 Claude Code 并连接串口;
  3. 自动迭代:设备上传数据后,AI 自动分析并下发调整指令,全程无需人工操作;
  4. 关闭重启:关闭程序后,所有记录保存在history.md,重启后自动恢复记忆,继续迭代。

七、核心优势

  1. 上下文保留:Claude Code 常驻运行,记住所有历史实验,实现真正迭代优化;
  2. 永久记忆:搭配history.md,关机、重启软件均不丢失实验数据;
  3. 全自动闭环:从数据采集、AI 分析到指令下发,全程无人干预;
  4. 适配试剂研发:AI 严格遵循研发规则,输出标准化指令,直接适配实验设备执行。
http://www.cnnetsun.cn/news/1779602.html

相关文章:

  • GLM-OCR与计算机组成原理的关联:从指令集到AI推理的算力支撑
  • CAJ格式转换高效解决方案:从学术文献处理痛点到全流程指南
  • DamaiHelper抢票神器:从原理到实战的智能抢票全攻略
  • 浏览器渲染层文档提取技术:kill-doc的技术架构与实现原理深度解析
  • Career-Ops:求职专用智能体
  • 【DLT实战】从零推导PnP:手撕线性方程组与SVD分解求解相机位姿
  • 轴承座夹具设计CAD图纸
  • 解决显示器色彩过饱和:novideo_srgb实现NVIDIA显卡精准色彩校准
  • 从源码拆解Agent Skills与Function Calling,底层实现、核心差异与实操指南
  • 旧设备变砖?这个开源工具让iPhone 4S流畅再战3年
  • 龙芯k - 走马观碑组ST驱动移植傩
  • Qwen-Image-2512-Pixel-Art-LoRA 为React前端项目动态生成像素风插图
  • Git-RSCLIP新手必看:如何用英文标签提升遥感图像分类准确率
  • 3个高效办公秘诀让你成为Office界面定制大师
  • React 19新特性深度体验:用useOptimistic实现秒级交互的实战Demo
  • 基于二阶自抗扰ADRC技术的车辆轨迹跟踪控制:双移线仿真效果优秀,具备抗干扰性,附复现资料快速...
  • mTLS 双向核查,为什么我觉得它更可靠?
  • Python 执行式AI:必备基础与语法速查
  • 【实战教程】Chrome 启用 Remote Debugging 端口 9222(解决 RPA/WorkBuddy 自动化登录卡住、501 错误)
  • 春秋云境CVE-2017-12611
  • Fast-GitHub终极指南:3分钟解决国内访问GitHub龟速问题
  • 终极图像矢量化指南:5分钟实现PNG/JPG到高清SVG转换
  • 逆向工程:为无原理图的RK3399模块定制Armbian系统(1)
  • 合宙ESP32-C3经典款VSCode环境搭建保姆级教程:从网络选择到串口占用的完整避坑指南
  • 告别重复劳动:用STM32CubeIDE为STM32F103C8T6创建可复用的工程模板(含GPIO/RCC配置)
  • OpenClaw+Phi-3-vision-128k-instruct:学术海报自动排版系统
  • Lmcache+vllm——KVcache卸载策略在边缘计算场景下的性能优化实践
  • 解放双手的第七史诗助手:E7Helper全功能指南
  • 抖音视频批量下载终极指南:3分钟搞定无水印批量采集
  • Prometheus+SNMP监控网络设备实战:从配置到避坑全流程指南