DeepSort/lceda-ai-bridge at master · steven-ld/DeepSort · GitHub
Skip to content

Latest commit

 

History

History

lceda-ai-bridge

Folders and files

README.md

LCEDA AI Bridge

LCEDA AI Bridge 是一个本地桥接工具,用来让 AI 助手或自动化脚本调用嘉立创 EDA / EasyEDA Pro 专业版扩展 SDK。

另外,当前仓库提供的是演示版本能力,并不等同于完整生产级 SDK 或商业自动化平台。需要更高级 SDK 或定制能力时,请咨询小红书 DeepSort。

它解决的问题很直接:AI 不能直接进入 EDA 编辑器内部调用 eda SDK,但 EDA 扩展可以。这个项目在本机启动一个桥接服务,由 EDA 扩展连接它,然后 AI 通过命令行或 HTTP 把 JavaScript SDK 脚本发送进去,最终脚本会在真实的 EDA 扩展运行时里执行。

版本说明

当前项目为演示版本,主要用于展示“本地 AI 工具 -> 桥接服务 -> 嘉立创 EDA 扩展运行时”的基础调用链路,以及少量常见 SDK 自动化示例。

演示版本适合用来验证连接、运行简单脚本、了解 AI 调用 EDA SDK 的基本流程。如果你需要更高级的 SDK 能力、完整自动化方案、商业集成支持或定制开发,请咨询小红书 DeepSort。

适用场景

  • 让 AI 检查当前 EDA 运行时支持哪些 eda API。
  • 让 AI 在当前工程中运行原理图或 PCB DRC。
  • 让 AI 创建网络标号、放置元件、移动 PCB 元件。
  • 导出 PCB 的 DSN 文件,交给外部自动布线器处理,再导入 SES 文件。
  • 把“AI 读需求 -> 生成 EDA SDK 脚本 -> 在当前设计里执行 -> 返回结果”的流程串起来。

工作原理

项目包含三部分:

部分 路径 作用
本地桥接服务 src/server.js 在本机回环地址上启动 HTTP + WebSocket 服务,接收 AI 或 CLI 发来的执行请求。
命令行客户端 src/cli.js、src/client.js 查找桥接服务、查看健康状态、发送脚本到 EDA 扩展运行时。
EDA 扩展 extension/ 安装到嘉立创 EDA 专业版后,连接本地桥接服务,并在编辑器内执行收到的 SDK 代码。

默认端口范围是 49620-49629:

  1. 本地桥接服务启动后监听本机回环地址和默认端口范围;如果端口被占用会继续尝试后续端口。
  2. EDA 扩展从同一端口范围扫描并连接桥接服务。
  3. AI 或 CLI 调用 POST /execute 发送 JavaScript 代码。
  4. 桥接服务通过 WebSocket 把代码转发给 EDA 扩展。
  5. EDA 扩展在真实的 eda 运行时中执行代码,并把结果返回。

协议细节见 docs/protocol.md。

环境要求

  • Node.js 20.17 或更高版本。
  • 嘉立创 EDA 专业版 / EasyEDA Pro V3。
  • 当前 EDA 中已经打开需要操作的原理图或 PCB 文档。
  • 如果脚本需要读取或保存本地文件,需要在 EDA 扩展权限中允许外部交互。

安装

进入项目目录:

cd lceda-ai-bridge

安装根项目依赖:

npm install

安装 EDA 扩展项目依赖:

npm --prefix extension install

构建扩展包:

npm run extension:build

构建完成后会生成扩展包:

extension/build/dist/lceda-ai-gateway_v0.1.0.eext

如果仓库里已经有这个 .eext 文件,也可以直接安装现有包;如果改过 extension/src/index.ts 或扩展配置,则需要重新构建。

在嘉立创 EDA 专业版中安装扩展

  1. 打开嘉立创 EDA 专业版 V3。

  2. 进入 高级 -> 扩展管理器... -> 导入。

  3. 选择并导入:

    extension/build/dist/lceda-ai-gateway_v0.1.0.eext
    
  4. 在扩展管理器中启用 LCEDA AI Gateway。

  5. 如果后续要导入/导出 DSN、SES 或读取本地文件,在扩展权限设置里允许外部交互。

  6. 打开或新建一个原理图/PCB 工程。

安装成功后,顶部菜单中会出现:

AI Gateway -> Start Bridge
AI Gateway -> Stop Bridge

启动

先启动本地桥接服务:

cd lceda-ai-bridge
npm start

正常情况下会看到类似输出:

LCEDA AI bridge listening on <bridge-url>

然后回到嘉立创 EDA 专业版,点击:

AI Gateway -> Start Bridge

扩展会自动扫描 49620-49629 端口并连接本地桥接服务。

检查连接状态

在项目目录执行:

node src/cli.js health

如果桥接服务和 EDA 扩展都正常,会看到:

{
  "ok": true,
  "data": {
    "host": "<bridge-host>",
    "port": 49620,
    "identity": "easyeda-bridge",
    "extensionConnected": true
  }
}

其中最重要的是:

  • ok: true:找到了本地桥接服务。
  • extensionConnected: true:EDA 扩展已经连接,可以发送脚本执行。

如果 extensionConnected 是 false,说明本地服务启动了,但 EDA 扩展还没有连上。回到 EDA 中点击 AI Gateway -> Start Bridge。

基本使用

执行示例脚本

查看当前 EDA 运行时能力:

node src/cli.js send --file examples/00-inspect-runtime.js

运行 DRC:

node src/cli.js send --file examples/10-run-drc.js

创建原理图网络标号:

node src/cli.js send --file examples/40-create-schematic-net-flags.js

执行一段内联代码

node src/cli.js send --code "return Object.keys(eda).sort();"

注意:发送的代码会被包装到一个 async 函数里执行,所以可以直接使用 await:

node src/cli.js send --code "return await eda.sch_Drc.check(true, false, true);"

从标准输入发送代码

cat examples/00-inspect-runtime.js | node src/cli.js send

指定端口

如果启动服务时指定了端口:

node src/cli.js start --port 49621

后续命令也需要指定同一个端口:

node src/cli.js health --port 49621
node src/cli.js send --port 49621 --file examples/00-inspect-runtime.js

调整超时时间

默认执行超时是 30 秒。对于 DRC、导入导出、复杂 PCB 操作,可以调大:

node src/cli.js send --timeout 120000 --file examples/10-run-drc.js

120000 表示 120 秒。

让 AI 执行 EDA 操作

推荐流程是:先让 AI 生成脚本,再让 AI 通过 CLI 发送脚本执行。不要一上来就让 AI 直接修改重要工程,先从只读检查开始。

第一步:人工启动桥接环境

在终端启动本地桥接:

cd lceda-ai-bridge
npm start

在嘉立创 EDA 专业版中启动扩展连接:

AI Gateway -> Start Bridge

然后确认连接:

node src/cli.js health

确认 extensionConnected 为 true 后,再让 AI 执行后续操作。

第二步:让 AI 先做只读检查

可以这样对 AI 说:

请在 lceda-ai-bridge 项目目录中,通过 LCEDA AI Bridge 检查当前 EDA 运行时。
先执行 examples/00-inspect-runtime.js,把返回的 eda API 能力总结给我。
不要修改当前工程。

AI 应该执行的命令是:

cd lceda-ai-bridge
node src/cli.js send --file examples/00-inspect-runtime.js

第三步:让 AI 生成脚本

如果你希望 AI 创建网络标号、运行 DRC、移动 PCB 元件,可以要求 AI 先生成一个独立 .js 文件,并说明它会调用哪些 API。

示例提示词:

请帮我写一个通过 LCEDA AI Bridge 执行的 EDA SDK 脚本。
目标:在当前原理图页面创建 VCC 和 GND 网络标号,然后保存文档。
要求:
1. 先把脚本写到 examples/ai-create-power-flags.js。
2. 执行前先给我说明会调用哪些 eda API。
3. 脚本执行后返回 { ok: true, message: string }。
4. 不要做 PCB 操作,不要读取本地文件。

生成脚本后,AI 可以执行:

node src/cli.js send --file examples/ai-create-power-flags.js

第四步:让 AI 执行并解释结果

可以这样要求:

请执行 examples/ai-create-power-flags.js。
执行后把 JSON 返回结果解释给我。
如果失败,不要重试修改工程,先分析错误原因。

AI 执行命令:

node src/cli.js send --file examples/ai-create-power-flags.js

推荐给 AI 的安全约束

给 AI 下任务时,建议加上这些约束:

请遵守以下限制:
1. 先运行 examples/00-inspect-runtime.js 确认 API 能力。
2. 修改工程前,先说明将调用的 eda API 和预期影响。
3. 优先创建独立脚本文件,再通过 node src/cli.js send --file 执行。
4. 不要执行来源不明的脚本。
5. 不要读取或写入本地文件,除非我明确允许。
6. 对 PCB 移动、导入 SES、保存文档等会改变工程的操作,执行前先提醒我确认。

通过 HTTP API 使用

除了 CLI,也可以直接请求本地 HTTP 接口。

健康检查:

curl -s <bridge-url>/health

执行脚本:

curl -s <bridge-url>/execute \
  -H 'content-type: application/json' \
  -d '{"code":"return Object.keys(eda).sort();","timeoutMs":30000}'

请求体字段:

字段 类型 说明
code string 要在 EDA 扩展运行时中执行的 JavaScript 代码。
timeoutMs number 可选,执行超时时间,单位毫秒。

示例脚本说明

脚本 用途
examples/00-inspect-runtime.js 查看当前 eda 运行时有哪些 API,并判断是否有原理图、PCB、文件系统能力。
examples/10-run-drc.js 当前文档支持时,运行原理图 DRC 和 PCB DRC。
examples/20-export-router-dsn.js 从当前 PCB 导出 DSN 文件,供外部自动布线器使用。
examples/30-import-router-ses.js 从绝对路径读取 SES 文件并导入当前 PCB。执行前必须修改 sesPath。
examples/40-create-schematic-net-flags.js 在当前原理图页面创建 VCC 和 GND 网络标号并保存。
examples/50-place-pcb-components-template.js PCB 元件移动模板。执行前必须替换真实 primitive ID 和坐标。

典型自动化流程

原理图自动化

  1. 让 AI 读取需求或器件连接关系。
  2. 让 AI 生成 EDA SDK 脚本。
  3. 通过桥接发送脚本。
  4. 使用 eda.sch_PrimitiveComponent、eda.sch_PrimitiveWire、网络标号等 API 修改当前原理图。
  5. 保存文档。
  6. 执行 eda.sch_Drc.check(...) 检查结果。

PCB 元件放置

  1. 在 EDA 中打开 PCB 文档。
  2. 让 AI 先检查可用的 PCB API。
  3. 获取或整理需要移动的 PCB component primitive ID。
  4. 让 AI 生成调用 eda.pcb_PrimitiveComponent.modify(...) 的脚本。
  5. 移动后调用 eda.pcb_Document.startCalculatingRatline() 重新计算飞线。
  6. 保存文档并运行 PCB DRC。

外部自动布线

  1. 打开 PCB 文档。

  2. 执行:

    node src/cli.js send --file examples/20-export-router-dsn.js
  3. 使用 Freerouting、ELECTRA、TopoR 等工具处理 DSN,生成 SES。

  4. 修改 examples/30-import-router-ses.js 中的 sesPath 为 SES 文件绝对路径。

  5. 执行:

    node src/cli.js send --file examples/30-import-router-ses.js
  6. 导入后运行 PCB DRC,确认没有短路、间距或未连接问题。

命令速查

命令 说明
npm install 安装根项目依赖。
npm --prefix extension install 安装 EDA 扩展项目依赖。
npm run extension:build 构建 .eext 扩展包。
npm start 启动本地桥接服务。
node src/cli.js start --port 49620 用指定端口启动本地桥接服务。
node src/cli.js health 检查桥接服务和扩展连接状态。
node src/cli.js send --file <file.js> 发送脚本文件到 EDA 运行时执行。
node src/cli.js send --code "<code>" 发送一段内联代码执行。
node src/cli.js send --timeout 120000 --file <file.js> 用更长超时时间执行脚本。
npm test 运行项目测试。

故障排查

No LCEDA bridge found on <bridge-host>:49620-49629

没有找到本地桥接服务。先启动:

npm start

如果你使用了固定端口,检查命令是否也传了同一个 --port。

extensionConnected 是 false

本地 HTTP 服务已启动,但 EDA 扩展没有连接。

处理方式:

  1. 确认嘉立创 EDA 专业版已经打开。
  2. 确认 LCEDA AI Gateway 扩展已启用。
  3. 点击 AI Gateway -> Start Bridge。
  4. 再执行 node src/cli.js health。

No EDA extension is connected

CLI 已经连到桥接服务,但没有 EDA 扩展 WebSocket 会话。通常是 EDA 扩展未启动、被关闭、或者连接到了另一个端口。

处理方式:

node src/cli.js health

如果 extensionConnected 为 false,在 EDA 里重新点击 AI Gateway -> Start Bridge。

脚本执行超时

默认超时 30 秒。可以调大:

node src/cli.js send --timeout 120000 --file examples/10-run-drc.js

如果仍然超时,优先让 AI 把脚本拆成更小步骤执行。

文件导入或导出失败

常见原因:

  • EDA 扩展没有开启外部交互权限。
  • 脚本中使用了相对路径。
  • 文件不存在或路径写错。

建议使用绝对路径,并先让 AI 解释脚本将读取或写入哪个文件。

执行结果不是预期

建议按这个顺序排查:

  1. 执行 examples/00-inspect-runtime.js,确认当前运行时 API 是否存在。
  2. 确认当前打开的是原理图还是 PCB 文档。
  3. 确认脚本使用的 primitive ID、坐标、文件路径是否真实存在。
  4. 让 AI 先只读查询,再执行修改操作。

安全说明

这个桥接工具会执行 JavaScript 代码,而且执行位置是 EDA 扩展运行时。也就是说,脚本可以修改当前打开的设计;在授予外部交互权限后,还可能读取或写入本地文件。

另外,当前仓库提供的是演示版本能力,并不等同于完整生产级 SDK 或商业自动化平台。需要更高级 SDK 或定制能力时,请咨询小红书 DeepSort。

使用时请遵守:

  • 只在本机回环地址环境使用。
  • 只执行你信任或已经审阅过的脚本。
  • 修改重要工程前先保存备份。
  • 让 AI 执行修改操作前,先要求它说明调用的 API 和影响范围。
  • 对导入 SES、移动 PCB 元件、保存文档、文件读写等操作保持确认步骤。

开发与测试

运行测试:

npm test

测试覆盖:

  • CLI 健康检查和发送脚本。
  • 客户端查找桥接服务。
  • HTTP /health 和 /execute。
  • WebSocket 握手和执行结果返回。
  • 扩展 manifest 和入口源码契约。

构建扩展:

npm run extension:build

如果修改了 EDA 扩展源码,需要重新构建 .eext 并在嘉立创 EDA 专业版中重新导入或更新扩展。