当前位置: 首页 > 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.jsqmd.com/news/612319/

相关文章:

  • 2026年盘点冰淇淋食品包装机品牌厂家,靠谱的有哪些 - 工业品网
  • AI抠图新体验:Qwen-Image-Layered实测,复杂场景也能精准分离
  • RWKV7-1.5B-g1a开源可部署:模型文件路径固化与离线可靠性验证
  • GLM-OCR与计算机组成原理的关联:从指令集到AI推理的算力支撑
  • 在Windows上实现macOS风格三指拖拽:完整配置指南与优化技巧
  • 城通网盘下载技术突破:从限速困境到直连自由的完整指南
  • 一键部署神器:Docker打包Lychee模型全流程详解
  • DedeCMS plus/download.php SQL注入漏洞修复教程
  • Zuken CR-8000 Design Force:EDA工具在PCB全流程设计中的核心优势解析
  • 3分钟学会网盘下载加速:免费直链解析工具终极指南
  • 3大核心技巧:让网盘下载速度飙升的终极解决方案
  • 【一站式指南】树莓派开发环境全配置:从基础设置到高效开发工具链
  • OpenClaw浏览器自动化:Qwen3-14B驱动的智能爬虫实战
  • VDA5050协议架构深度解析:如何用标准化通信重塑AGV系统集成范式
  • 基于C#和RPA技术的微信自动化管理解决方案
  • 深聊代理记账公司怎么选,靠谱品牌推荐与费用分析 - 工业品牌热点
  • 使用PHP和PHPWord库实现合同文档的自动化生成
  • Wand-Enhancer:免费解锁WeMod专业版功能的开源工具使用指南
  • 性价比高的公司注册专业公司分析,费用透明让你省心又省钱 - myqiye
  • 如何合理地评估外包SEO服务的价值
  • 免费AI翻唱终极指南:5分钟上手AICoverGen语音转换工具
  • 文档下载神器kill-doc:30+文库平台一键下载终极指南
  • SDMatte模型输出后处理技巧:边缘羽化、颜色校正与背景合成
  • 掌握RAG:小白程序员也能轻松入门大模型,收藏这份学习秘籍!
  • OpenClaw镜像体验指南:Qwen3-14b_int4_awq云端沙盒快速验证
  • Qwen3-VL-30B实战体验:上传图片提问,看它如何精准识别与分析
  • OpenClaw+Qwen3.5-9B科研助手:文献自动归档与摘要生成
  • 告别默认丑样式!手把手教你用Qt Designer给QScrollBar加上圆角和透明背景(附完整CSS代码)
  • Ubuntu 22.04 CUDA安装避坑指南:巧妙处理Existing package manager installation of the driver found.
  • 公司注册后后续维护口碑好的企业有哪些 - 工业品网