AI Agent辅助立创EDA设计——从原理图到PCB



AI Agent + 立创EDA Pro 集成全方案

AI Agent 如何操控立创EDA Pro 绘制原理图与PCB?本文梳理全部5种方案,从轻量脚本到生产级 CLI,附完整教程。

核心认知:立创EDA Pro 提供完整的 扩展 API (eda.* 对象),通过 TypeScript 扩展可直接操控原理图/PCB/元件库/DRC。AI Agent 与 EDA 的集成,本质上是搭建"AI 决策 → 动作命令 → EDA 执行"的桥梁。

一、五种集成方案总览

方案 通信方式 复杂度 实时性 生产就绪 适合场景
方案一:easyeda-agent WebSocket ⭐ 低 ✅ ✅ 主力工作流、生产环境
方案二:官方 API Gateway WebSocket ⭐⭐ 低 ✅ ✅ 官方推荐、99%功能覆盖
方案三:自定义扩展+文件桥 JSON 文件 ⭐⭐ 中 ❌ ⚠️ 快速原型、无网络环境
方案四:自定义扩展+HTTP桥 HTTP REST ⭐⭐⭐ 中 ✅ ⚠️ 实时双向交互
方案五:直接脚本执行 无(手动粘贴) ⭐ 低 ❌ ❌ 单次验证、学习测试

二、方案一:easyeda-agent(Daboluo 项目)⭐⭐⭐⭐⭐

概述

由开发者 Daboluo 打造的开源项目,将 20 个审核过的类型化动作封装为 Go CLI,通过 WebSocket 连接 LCEDA 内的 .eext 连接器插件。

架构:

复制代码
Skill 描述工作流 → Go CLI/Daemon (49620-49629) → WebSocket → .eext Connector → eda.* API

完整教程

Step 1:安装

bash 复制代码
curl -fsSL https://raw.githubusercontent.com/zhoushoujianwork/easyeda-agent/main/install.sh | sh

Step 2:导入连接器插件

从 GitHub Release 下载 .eext → LCEDA Pro → 设置 → 扩展 → 安装本地扩展

Step 3:启动守护进程

bash 复制代码
easyeda daemon

Step 4:验证连接

bash 复制代码
easyeda health
# → daemon: online, connector: connected

Step 5:AI 控制(Hermes 集成示例)

bash 复制代码
# 搜索器件
easyeda sch search --keyword "STM32H753"

# 放置芯片
easyeda sch place --lib-uuid xxx --designator U1 --x 3000 --y 3000

# 单步连引脚出网络标
easyeda sch connect-pin --designator U1 --pin PA9 --net "USART1_TX"

# 创建电源/地标
easyeda sch power-flag --net "VDD_3V3"
easyeda sch ground-flag --net "GND"

# DRC 检查
easyeda sch drc

# 导出
easyeda sch export netlist
easyeda sch export bom --format xlsx

三、方案二:官方 eext-run-api-gateway ⭐⭐⭐⭐

概述

立创EDA官方提供的 WebSocket API 网关扩展,在扩展广场直接安装。外部 AI 编程工具通过 WebSocket 协议调用 LCEDA 99% 功能。

架构:

复制代码
AI 编程工具 (Cursor/Claude Code/Hermes) ← WebSocket → eext-run-api-gateway → LCEDA 编辑器

完整教程

Step 1:安装网关扩展

LCEDA Pro → 扩展 → 扩展广场 → 搜索 "eext-run-api-gateway" → 安装

Step 2:获取网关端口(通常为 9527 或类似)

Step 3:Python 客户端示例

python 复制代码
import asyncio, websockets, json

async def lceda(action, params={}):
    async with websockets.connect("ws://localhost:9527") as ws:
        await ws.send(json.dumps({"action": action, "params": params}))
        return json.loads(await ws.recv())

# 放置元件
result = await lceda("place_component", {
    "lcsc": "C17577866", "designator": "U1", "x": 1000, "y": 2000
})

# DRC 检查
result = await lceda("run_drc", {"type": "sch"})

# 导出 BOM
bom = await lceda("export_bom", {"format": "csv"})

四、方案三:自定义扩展 + 文件桥接 ⭐⭐⭐

概述

最传统的集成方式。Hermes Agent 将网表写入 JSON 文件,LCEDA 扩展轮询读取后执行。

架构:

复制代码
Hermes → 写入 /home/ros2/lceda-bridge/netlist-input.json
       ← 读取 /home/ros2/lceda-bridge/draw-result.json ← LCEDA 扩展写入

完整教程

① 搭建 SDK

bash 复制代码
git clone --depth=1 https://gitee.com/jlceda/pro-api-sdk.git
cd pro-api-sdk && npm install

② LCEDA 扩展代码 src/index.ts

typescript 复制代码
import { eda } from '@jlceda/pro-api-types';
import * as fs from 'fs';
import * as path from 'path';

const BRIDGE = '/home/ros2/lceda-bridge';

export async function drawFromAI() {
  const f = path.join(BRIDGE, 'netlist-input.json');
  if (!fs.existsSync(f)) return;
  
  const { components, nets, netFlags } = JSON.parse(fs.readFileSync(f, 'utf-8'));
  const uuids: string[] = [];
  
  // ⚠️ 必须串行 await,不能 Promise.all
  for (const comp of components) {
    const c = eda.sch_PrimitiveComponent.create();
    c.setSupplierId(comp.lcsc);
    c.setDesignator(comp.designator);
    c.setX(comp.x || 1000);
    c.setY(comp.y || 2000);
    c.setDeviceType(comp.deviceType);
    await c.done();
    uuids.push(c.getUuid());
  }
  
  // 自动布局
  const typeMap = Object.fromEntries(components.map(c => [c.designator, c.deviceType]));
  await eda.sch_Document.autoLayout({ uuids, netlist: { components, nets }, designatorDeviceTypeMap: typeMap });
  
  // 保存
  await eda.sch_Document.save();
  
  // 写回结果
  fs.writeFileSync(path.join(BRIDGE, 'draw-result.json'), 
    JSON.stringify({ status: 'ok', count: uuids.length }));
}

③ Hermes 端生成网表

python 复制代码
import json

netlist = {
    "components": [
        {"lcsc": "C17577866", "designator": "U1", "deviceType": "chip", "x": 3000, "y": 3000},
        {"lcsc": "C15849", "designator": "C1", "deviceType": "capacitor", "x": 5000, "y": 3000},
    ],
    "nets": [],
    "netFlags": [{"type": "ground", "netName": "GND"}]
}

with open('/home/ros2/lceda-bridge/netlist-input.json', 'w') as f:
    json.dump(netlist, f, indent=2)

五、方案四:自定义扩展 + HTTP 桥接 ⭐⭐⭐

概述

LCEDA 扩展内启动 HTTP 服务或从扩展 fetch 到外部 HTTP 服务。适合实时双向场景。

架构:

复制代码
Hermes HTTP Server (8765) ← HTTP → LCEDA 扩展 (fetch API)

完整教程

LCEDA 扩展端:

typescript 复制代码
export async function drawViaHTTP() {
  const resp = await fetch('http://localhost:8765/api/netlist');
  const { components } = await resp.json();
  
  for (const comp of components) {
    const c = eda.sch_PrimitiveComponent.create();
    c.setSupplierId(comp.lcsc);
    c.setDesignator(comp.designator);
    c.setX(comp.x); c.setY(comp.y);
    c.setDeviceType(comp.deviceType);
    await c.done();
  }
  
  await eda.sch_Document.save();
  
  await fetch('http://localhost:8765/api/callback', {
    method: 'POST',
    headers: {'Content-Type': 'application/json'},
    body: JSON.stringify({status: 'ok'})
  });
}

Hermes 端 Flask 服务:

python 复制代码
from flask import Flask, jsonify, request
app = Flask(__name__)

@app.route('/api/netlist')
def netlist():
    return jsonify({"components": [...]})

@app.route('/api/callback', methods=['POST'])
def callback():
    data = request.json
    print(f"LCEDA done: {data}")
    return jsonify({"ok": True})

app.run(port=8765)

六、方案五:直接脚本执行 ⭐⭐

概述

不写扩展,直接在 LCEDA Pro 的高级 → 运行脚本中粘贴 JS 代码执行。

示例

javascript 复制代码
(async function() {
  const u1 = eda.sch_PrimitiveComponent.create();
  u1.setSupplierId("C17577866");  // STM32H753
  u1.setDesignator("U1");
  u1.setX(3000); u1.setY(3000);
  u1.setDeviceType("chip");
  await u1.done();
  
  const c1 = eda.sch_PrimitiveComponent.create();
  c1.setSupplierId("C15849");  // 100nF 电容
  c1.setDesignator("C1");
  c1.setX(5000); u1.setY(3000);
  c1.setDeviceType("capacitor");
  await c1.done();
  
  console.log('✅ Done');
})();

七、AI 语义检查(跨方案通用)

无论哪种方案,都可以通过收集设计上下文发给 AI 做语义检查------这是官方 DRC 做不到的:

检查项 示例规则
VCAP 引脚 每个 VCAP 接 2.2μF 电容到地,容值偏差 ±20%
去耦电容 每个 VDD 附近 ≥1 个 100nF,距离 <500mil
晶振负载 负载电容匹配晶振规格
悬空输入 未连接输入引脚检测
CAN 终端 总线两端各 120Ω
USB 差分 90Ω 差分阻抗,P/N 等长
DDR 等长 数据线 ±25mil

八、方案选择建议

复制代码
依据场景 → 选择方案

• 要最快出结果 → 方案五(直接脚本)
• 要和 Hermes 深度集成 → 方案三(文件桥接)
• 要实时交互调试 → 方案四(HTTP 桥接)
• 要官方推荐方案 → 方案二(API Gateway)
• 要生产级长期使用 → 方案一(easyeda-agent)⭐⭐⭐⭐⭐

相关页面

参考官方文档:

https://easyeda-agent.daboluo.cc/

相关推荐
YOLO数据集集合10 小时前
光伏组件异常检测数据集 | 光伏组件 异常检测 红外检测 热斑识别 光伏巡检9147期
人工智能·yolo·目标检测·语言模型·太阳能板·光伏组件
HIT_Weston11 小时前
242、【AI】【模型部署】基座模型研究:注意力机制深入
人工智能·模型部署
智碳能碳管理平台11 小时前
碳排放核算软件选型:历史台账断层补救与锁账回放实操指南
人工智能·数字孪生·能碳管理系统·智碳能碳管理平台·企业能碳管理系统·碳排放核算软件·绿色工厂申报saas
IT_陈寒11 小时前
SpringBoot自动配置坑了我一把,原来是这样绕过去的
前端·人工智能·后端
hahaha601611 小时前
Shades-of-Gray (SoG) 算法--白平衡算法
人工智能·嵌入式硬件·算法·计算机视觉
海宇大数据11 小时前
零信任架构实战:基于海宇活体识别V步骤1构建自动化远程公证会话初始化网关
运维·人工智能·架构·自动化
老衲不用@飘柔11 小时前
半导体学习之本征半导体与杂质半导体
硬件工程
Latchh11 小时前
前端导出的JPEG红字发糊,质量要拉到100才清楚
前端·图像处理·人工智能·计算机视觉
思考着亮11 小时前
2.skill
人工智能
code_slave(码畜)11 小时前
微服务架构落地:基础服务 —— 报表服务(AI 集成篇:AI 增强报表能力)
人工智能·spring boot·spring cloud·微服务·架构