LCEDA AI Bridge:让 AI 操作嘉立创 EDA 的本地桥接 Demo
LCEDA AI Bridge:让 AI 操作嘉立创 EDA 的本地桥接 Demo
项目地址:https://github.com/steven-ld/DeepSort.git
Demo 目录:lceda-ai-bridge
当前状态:演示版本。需要更高级 SDK、完整自动化方案、商业集成支持或定制开发,可以咨询小红书DeepSort。
一、为什么需要这个 Demo
AI Agent 已经可以写代码、读文档、调用工具,但在很多专业软件里,AI 仍然隔着一层墙。
以嘉立创 EDA / EasyEDA Pro 为例,真实的原理图、PCB、DRC、元件、网络标号、导入导出等能力都在编辑器内部的 eda SDK 运行时里。普通 AI 助手即使知道 SDK 文档,也不能直接进入编辑器进程调用这些 API。
LCEDA AI Bridge 的思路是:不让 AI 直接“闯进” EDA,而是在本机搭一个受控桥接层。
它把调用链拆成三段:
- AI 生成或选择一段 EDA SDK 脚本。
- 本地 Bridge Server 接收这段脚本。
- 安装在嘉立创 EDA 专业版里的扩展连接 Bridge Server,并在真实
eda运行时中执行脚本。
这样,AI 就可以通过一个本地 demo 完成类似这些动作:
- 检查当前 EDA 运行时支持哪些 API。
- 运行原理图或 PCB DRC。
- 创建 VCC、GND 等网络标号。
- 导出 PCB 的 DSN 文件,交给外部自动布线器处理。
- 导入自动布线器生成的 SES 文件。
- 按 primitive ID 移动 PCB 元件。
- 把“读需求 -> 生成脚本 -> 执行 -> 返回结果 -> 解释结果”的流程串起来。
这不是完整生产级平台,而是一个用于演示 AI 落地路径的基础样板:让 AI 从“写建议”进一步走向“调用真实软件能力”。
二、整体架构
LCEDA AI Bridge 由三部分组成:
| 模块 | 目录 | 作用 |
|---|---|---|
| 本地桥接服务 | src/server.js |
提供 HTTP 和 WebSocket 服务,接收 AI 或 CLI 的执行请求。 |
| 命令行客户端 | src/cli.js、src/client.js |
查找桥接服务、检查状态、发送脚本。 |
| EDA 扩展 | extension/ |
安装到嘉立创 EDA 专业版后,连接本地桥接服务并执行 SDK 代码。 |
整体调用链如下:
sequenceDiagram
participant User as 使用者
participant AI as AI Agent
participant CLI as CLI/HTTP Client
participant Bridge as Bridge Server
participant Ext as EDA Extension
participant EDA as LCEDA eda Runtime
User->>AI: 描述要完成的 EDA 操作
AI->>AI: 生成或选择 SDK 脚本
AI->>CLI: 调用 node src/cli.js send
CLI->>Bridge: POST /execute
Bridge->>Ext: WebSocket execute
Ext->>EDA: 在 eda 运行时执行脚本
EDA-->>Ext: 返回执行结果
Ext-->>Bridge: execute_result
Bridge-->>CLI: JSON 结果
CLI-->>AI: 输出结果
AI-->>User: 总结执行结果和下一步建议
这个架构有几个关键点:
- Bridge Server 只绑定本机回环地址,不面向公网开放。
- EDA 扩展通过 WebSocket 主动连接 Bridge Server。
- AI 不直接接触 EDA 进程,只通过 CLI 或 HTTP 发送脚本。
- 脚本最终在 EDA 扩展运行时中执行,因此可以访问真实的
eda对象。 - 返回结果以 JSON 形式回到 CLI,再由 AI 解释给用户。
三、仓库结构
项目在 DeepSort 合集仓库中:
git clone https://github.com/steven-ld/DeepSort.git
cd DeepSort/lceda-ai-bridge
核心目录如下:
lceda-ai-bridge/
README.md
package.json
src/
server.js
client.js
cli.js
docs/
protocol.md
examples/
00-inspect-runtime.js
10-run-drc.js
20-export-router-dsn.js
30-import-router-ses.js
40-create-schematic-net-flags.js
50-place-pcb-components-template.js
extension/
extension.json
src/index.ts
package.json
test/
其中最重要的是:
src/server.js:本地桥接服务。src/cli.js:命令行入口。extension/src/index.ts:嘉立创 EDA 扩展入口。examples/:可直接发送给 EDA 运行时的示例脚本。docs/protocol.md:HTTP 和 WebSocket 协议说明。
四、安装与构建
4.1 环境要求
建议环境:
- Node.js 20.17 或更高版本。
- 嘉立创 EDA 专业版 / EasyEDA Pro V3。
- 已打开需要操作的原理图或 PCB 文档。
- 如果要做文件导入导出,需要在 EDA 扩展权限中允许外部交互。
4.2 安装依赖
进入 demo 目录:
cd DeepSort/lceda-ai-bridge
安装根项目依赖:
npm install
安装 EDA 扩展依赖:
npm --prefix extension install
4.3 构建 EDA 扩展包
执行:
npm run extension:build
构建完成后会生成 .eext 扩展包:
extension/build/dist/lceda-ai-gateway_v0.1.0.eext
这个文件就是要导入嘉立创 EDA 专业版的扩展包。
五、在嘉立创 EDA 专业版中安装扩展
打开嘉立创 EDA 专业版 V3,然后按下面步骤操作:
- 进入
高级 -> 扩展管理器... -> 导入。 - 选择
extension/build/dist/lceda-ai-gateway_v0.1.0.eext。 - 导入后启用
LCEDA AI Gateway。 - 如果需要 DSN/SES 文件导入导出,开启扩展的外部交互权限。
- 打开一个原理图或 PCB 工程。
安装成功后,顶部菜单会出现:
AI Gateway -> Start Bridge
AI Gateway -> Stop Bridge
这里的 Start Bridge 不是启动 Node 服务,而是让 EDA 扩展开始连接本地 Bridge Server。
六、启动和检查连接
6.1 启动本地桥接服务
在 demo 目录执行:
npm start
服务会在默认端口范围内自动寻找可用端口。
也可以指定端口:
node src/cli.js start --port 49620
6.2 启动 EDA 扩展连接
回到嘉立创 EDA 专业版,点击:
AI Gateway -> Start Bridge
扩展会扫描默认端口范围并连接本地桥接服务。
6.3 检查状态
执行:
node src/cli.js health
正常返回大致如下:
{
"ok": true,
"data": {
"host": "<bridge-host>",
"port": 49620,
"identity": "easyeda-bridge",
"extensionConnected": true
}
}
关键字段是 extensionConnected:
true:EDA 扩展已连接,可以发送 SDK 脚本。false:Bridge Server 已启动,但 EDA 扩展还没有连上。
如果是 false,通常需要回到 EDA 中重新点击 AI Gateway -> Start Bridge。
七、基本使用:从示例脚本开始
7.1 检查 EDA 运行时
第一次使用时,建议先运行只读检查:
node src/cli.js send --file examples/00-inspect-runtime.js
这个脚本会返回当前 eda 对象下有哪些能力,以及是否具备原理图、PCB、文件系统相关 API。
示例脚本内容很简单:
return {
edaKeys: Object.keys(eda).sort(),
hasSchematicApi: Boolean(eda.sch_Document && eda.sch_PrimitiveComponent),
hasPcbApi: Boolean(eda.pcb_Document && eda.pcb_PrimitiveComponent),
hasFileSystemApi: Boolean(eda.sys_FileSystem)
};
这一步适合作为所有 AI 自动化操作的前置检查:先确认当前环境支持什么,再让 AI 生成后续脚本。
7.2 运行 DRC
执行:
node src/cli.js send --file examples/10-run-drc.js
脚本会在 API 存在时分别运行原理图和 PCB DRC:
const result = {};
if (eda.sch_Drc) {
result.schematic = await eda.sch_Drc.check(true, false, true);
}
if (eda.pcb_Drc) {
result.pcb = await eda.pcb_Drc.check(true, false, true);
}
return result;
AI 可以拿到返回 JSON 后解释检查结果,并提示下一步需要修复哪些问题。
7.3 创建网络标号
执行:
node src/cli.js send --file examples/40-create-schematic-net-flags.js
示例脚本会在当前原理图页面创建 VCC 和 GND:
await eda.sch_PrimitiveComponent.createNetFlag('Power', 'VCC', 0, 0);
await eda.sch_PrimitiveComponent.createNetFlag('Ground', 'GND', 0, -100);
await eda.sch_Document.save();
return {
ok: true,
message: 'Created VCC and GND net flags on the current schematic page.'
};
这个例子展示了 AI 不只是“分析”,也可以把明确的 EDA SDK 调用落到当前工程里。
7.4 导出 DSN,导入 SES
外部自动布线场景通常是:
- 从 PCB 导出 DSN。
- 使用 Freerouting、ELECTRA、TopoR 等工具自动布线。
- 生成 SES。
- 导入 SES 到当前 PCB。
- 运行 PCB DRC。
导出 DSN:
node src/cli.js send --file examples/20-export-router-dsn.js
导入 SES 前,需要先修改 examples/30-import-router-ses.js 里的文件路径:
const sesPath = '/absolute/path/to/routed.ses';
然后执行:
node src/cli.js send --file examples/30-import-router-ses.js
文件读写类操作依赖 EDA 扩展外部交互权限。AI 执行这类脚本前,最好先让它说明将读取哪个文件、写入哪个文件、会影响当前哪个 PCB。
八、让 AI 调用 LCEDA AI Bridge
LCEDA AI Bridge 的重点不是手动敲命令,而是让 AI 参与执行流程。
推荐把 AI 调用分成四步:
- 先让 AI 做只读检查。
- 让 AI 生成独立脚本文件。
- 让 AI 说明脚本会调用哪些
edaAPI。 - 确认后再执行,并让 AI 解释结果。
8.1 推荐给 AI 的第一条指令
可以这样对 AI 说:
请在 DeepSort/lceda-ai-bridge 项目中,通过 LCEDA AI Bridge 检查当前 EDA 运行时。
要求:
1. 先执行 examples/00-inspect-runtime.js。
2. 总结返回结果里有哪些 eda API 能力。
3. 不要修改当前 EDA 工程。
4. 如果 extensionConnected 不是 true,先停止并告诉我需要在 EDA 中启动 AI Gateway。
AI 应该执行:
node src/cli.js health
node src/cli.js send --file examples/00-inspect-runtime.js
8.2 让 AI 生成脚本
当你要 AI 修改 EDA 工程时,不建议直接让它把代码塞进 --code 参数里执行。更稳妥的方式是让它先写一个独立脚本文件。
示例提示词:
请帮我写一个通过 LCEDA AI Bridge 执行的 EDA SDK 脚本。
目标:
在当前原理图页面创建 VCC 和 GND 网络标号,然后保存文档。
要求:
1. 先把脚本写到 examples/ai-create-power-flags.js。
2. 执行前先说明会调用哪些 eda API。
3. 脚本执行后返回 { ok: true, message: string }。
4. 不要做 PCB 操作。
5. 不要读取或写入本地文件。
确认脚本后,再让 AI 执行:
node src/cli.js send --file examples/ai-create-power-flags.js
8.3 让 AI 执行并解释结果
示例提示词:
请执行 examples/ai-create-power-flags.js。
执行后:
1. 把 CLI 返回的 JSON 结果解释给我。
2. 如果失败,不要继续修改工程,先分析失败原因。
3. 如果成功,告诉我当前工程被做了什么改动,以及建议下一步运行什么检查。
这个提示词里的关键是:失败时不要盲目重试,成功后要解释影响范围。
8.4 适合 AI 执行的任务类型
适合先做成 demo 的 AI 调用任务:
| 任务 | 风险 | 建议 |
|---|---|---|
运行 00-inspect-runtime.js |
低 | 每次自动化前都可以先执行。 |
| 运行 DRC | 低 | 只读检查,适合让 AI 总结问题。 |
| 创建网络标号 | 中 | 会修改原理图,执行前先确认。 |
| 移动 PCB 元件 | 中高 | 必须确认 primitive ID 和坐标。 |
| 导入 SES | 高 | 会改变布线结果,建议先备份工程。 |
| 文件读写 | 高 | 需要明确路径和权限。 |
九、协议和执行机制
Bridge Server 暴露两个核心 HTTP 接口:
| 接口 | 作用 |
|---|---|
GET /health |
查询 Bridge Server 状态和 EDA 扩展连接状态。 |
POST /execute |
发送 JavaScript 代码到 EDA 扩展运行时执行。 |
POST /execute 的请求体:
{
"code": "return Object.keys(eda);",
"timeoutMs": 30000
}
EDA 扩展侧收到代码后,会用类似下面的方式执行:
const run = new Function('eda', 'code', `return (async () => { ${message.code} })();`);
const result = await run(eda, message.code);
这意味着发送的脚本天然处于 async 环境,可以直接使用 await。
例如:
return await eda.sch_Drc.check(true, false, true);
WebSocket 消息包含一个 id,Bridge Server 会用这个 id 匹配请求和返回结果,并用 timeoutMs 控制超时。
如果 EDA 扩展没有连接,执行请求会失败:
No EDA extension is connected
如果脚本执行超时,会返回类似:
EDA execution timed out after 30000ms
十、二次开发入口
这个 demo 的代码量不大,很适合作为二次开发起点。
10.1 扩展 CLI 命令
当前 CLI 支持:
node src/cli.js start
node src/cli.js health
node src/cli.js send --file examples/00-inspect-runtime.js
node src/cli.js send --code "return Object.keys(eda).sort();"
如果要增加更友好的命令,例如:
node src/cli.js drc
node src/cli.js inspect
node src/cli.js export-dsn
可以从 src/cli.js 入手,把常用脚本路径封装成命令。
设计建议:
inspect固定调用examples/00-inspect-runtime.js。drc固定调用examples/10-run-drc.js。export-dsn支持传入导出名称。import-ses必须要求用户传入 SES 绝对路径。- 高风险命令默认打印将执行的脚本摘要。
10.2 增加脚本模板
可以在 examples/ 下继续沉淀脚本模板:
examples/
60-query-components.js
70-create-basic-schematic.js
80-place-components-from-json.js
90-run-full-checklist.js
建议每个脚本都遵守这个返回格式:
return {
ok: true,
action: 'describe-what-happened',
data: {}
};
这样 AI 更容易解释结果,也方便后续做自动化编排。
10.3 给 AI 加一层任务协议
目前 Bridge Server 接收的是原始 JavaScript 代码。二次开发时,可以在外层增加一个更安全的任务协议:
{
"task": "run-drc",
"params": {
"scope": "all"
}
}
Bridge Server 收到任务后,不直接执行 AI 生成的任意代码,而是从预设模板中选择脚本。
这样可以把“任意代码执行”收敛成“受控任务执行”,更适合团队内部或客户演示。
10.4 增加权限和确认机制
演示版的核心是打通链路。继续做产品化时,可以考虑增加权限层:
| 操作类型 | 建议策略 |
|---|---|
| 只读检查 | 可直接执行。 |
| DRC | 可直接执行。 |
| 保存文档 | 执行前确认。 |
| 修改原理图 | 执行前展示脚本摘要。 |
| 修改 PCB | 执行前要求用户确认。 |
| 文件读写 | 必须显示文件路径。 |
| 导入 SES | 必须要求备份提醒。 |
具体实现上,可以在 CLI 或 Bridge Server 层加入 --confirm 参数,或者让 AI 先生成计划文件,再由人确认执行。
10.5 增加结构化日志
现在 demo 主要返回执行结果。二次开发时建议增加操作日志:
{
"time": "2026-07-03T10:00:00Z",
"task": "run-drc",
"script": "examples/10-run-drc.js",
"durationMs": 1200,
"ok": true
}
日志用途:
- 演示时可追溯 AI 做过什么。
- 出错后可以复盘。
- 后续可接入 Web UI 或审计系统。
10.6 做成 MCP 或 Agent Tool
如果要更贴近 AI Agent 工作流,可以把 sendCode 能力包装成 MCP Tool,例如:
lceda.healthlceda.inspectRuntimelceda.runDrclceda.executeScriptlceda.exportDsnlceda.importSes
这样 AI 不需要通过 shell 命令间接调用,而是直接使用结构化工具。
但即使做成 MCP,也建议保留 CLI,因为 CLI 更容易调试,也方便在 CI、演示脚本和人工排障中使用。
十一、安全边界
LCEDA AI Bridge 的能力本质上是“让外部脚本进入 EDA 扩展运行时执行”。这很强,也需要清楚边界。
使用时建议遵守:
- 只在本机回环地址环境使用,不暴露到公网。
- 重要工程先备份,再让 AI 执行修改操作。
- 让 AI 执行前,先要求它说明将调用哪些
edaAPI。 - 高风险操作先生成脚本文件,再人工审阅。
- 文件读写类脚本必须明确路径。
- 失败后不要让 AI 连续盲目重试。
- 演示版不要直接当作生产级自动化平台使用。
更进一步,可以把 AI 操作分成三级:
| 等级 | 示例 | 策略 |
|---|---|---|
| L1 只读 | inspect、DRC | 允许直接执行。 |
| L2 轻量修改 | 创建网络标号、保存文档 | 执行前展示计划。 |
| L3 高风险修改 | 导入 SES、批量移动 PCB 元件、文件写入 | 必须人工确认并建议备份。 |
十二、常见问题
12.1 extensionConnected 一直是 false
通常说明 Node 服务启动了,但 EDA 扩展没有连上。
检查顺序:
- 嘉立创 EDA 专业版是否已经打开。
LCEDA AI Gateway扩展是否已启用。- 是否点击了
AI Gateway -> Start Bridge。 - Bridge Server 是否还在运行。
- 如果指定了端口,CLI 和扩展扫描范围是否匹配。
12.2 No EDA extension is connected
这表示 CLI 找到了 Bridge Server,但 Bridge Server 没有可用的 EDA WebSocket 连接。
处理方式:
node src/cli.js health
如果 extensionConnected 为 false,回到 EDA 里重新点击 AI Gateway -> Start Bridge。
12.3 执行超时
默认超时是 30 秒。对于 DRC、导入导出或复杂 PCB 操作,可以增加超时:
node src/cli.js send --timeout 120000 --file examples/10-run-drc.js
如果仍然超时,建议让 AI 把脚本拆成多个小步骤。
12.4 AI 生成的脚本报错
优先让 AI 做三件事:
- 重新执行
examples/00-inspect-runtime.js。 - 根据返回结果确认 API 是否存在。
- 把失败脚本拆成最小可复现片段。
不要让 AI 在不了解 API 返回结构的情况下连续修改工程。
十三、一次推荐演示流程
如果要给别人演示这个 demo,可以按下面流程走:
打开嘉立创 EDA 专业版,并打开一个测试工程。
启动 Bridge Server:
npm start在 EDA 中点击
AI Gateway -> Start Bridge。执行健康检查:
node src/cli.js health让 AI 执行只读检查:
node src/cli.js send --file examples/00-inspect-runtime.js让 AI 总结当前 API 能力。
运行 DRC:
node src/cli.js send --file examples/10-run-drc.js让 AI 解释 DRC 结果。
在测试工程中执行一个低风险修改,例如创建网络标号:
node src/cli.js send --file examples/40-create-schematic-net-flags.js让 AI 总结它实际修改了什么。
这个流程能清楚展示 AI 从“理解环境”到“调用专业软件 SDK”再到“解释执行结果”的闭环。
十四、总结
LCEDA AI Bridge 这个 demo 的价值不在于代码复杂,而在于它给了一个清晰的 AI 落地模式:
AI Agent
-> 本地桥接服务
-> 专业软件扩展
-> 真实 SDK 运行时
-> 结构化结果返回
很多行业软件都有类似问题:SDK 在应用内部,AI 在应用外部。通过本地桥接、扩展插件、CLI/MCP 工具化,可以把 AI 从“只能写方案”推进到“能在真实工具里执行受控动作”。
当前项目是演示版本,适合学习、验证和二次开发起步。后续如果要走向更完整的 AI EDA 自动化平台,重点不是让 AI 执行更多任意代码,而是逐步补齐:
- 任务协议。
- 权限模型。
- 操作确认。
- 审计日志。
- MCP Tool 化。
- 脚本模板库。
- 更完整的 SDK 封装。
需要更高级 SDK、完整自动化方案、商业集成支持或定制开发,可以咨询小红书 DeepSort。