Skip to main content Link Menu Expand (external link) Document Search Copy Copied

如何使用LLM直接修改KiCad原理图

前言

KiCad是一款流行的开源电路设计软件,很受电子爱好者的欢迎。我最近发现一个针对KiCad的MCP项目kicad-mcp,这个MCP工具可以让大语言模型来查看和分析KiCad项目的电路原理图。既然可以查看和分析,为什么不直接让大语言模型来修改电路原理图呢。所以我给这个项目提交了几个使得这个MCP工具可以修改原理图的PR。不过最近这个项目所有者很久没有打理这个项目了,所以我把修改先提交到了我克隆的仓库里。本文介绍一下这个工具,也欢迎大家一起添加新功能。KiCad的原理图和PCB都是基于Lisp语言的S表达式,所以理论上我们也可以采用同样的技术修改KiCad PCB。

KiCad MCP工具介绍

KiCad项目一般包含三个文件,后缀分别是kicad_pro,kicad_sch,kicad_pcb,分别是项目文件、原理图、PCB文件。原来KiCad MCP工具通过正则表达式解析原理图和PCB文件来分析用户的KiCad项目。我利用了另一个可以解析和修改S表达式的开源项目skip来解析和修改原理图,目前我添加了下列功能:

  1. 建立KiCad元器件的索引库,支持全文查找KiCad符号库中的元器件
  2. 支持向原理图中添加元器件。支持修改或添加元器件的属性,移动旋转元器件
  3. 支持使用连线将元器件连接起来,支持添加连线交叉点
  4. 优化了网表查询工具,支持获取原理图中元器件以及连线信息
  5. 添加删除label

增加了这些功能后,用户可以使用支持MCP工具的LLM桌面软件,就可以让大语言操作kicad-mcp来修改原理图。不过我发现大模型不是太擅长空间信息的处理,不知道其他工具能力更强的大语言模型效果怎么样。下面我们看一下如何使用这个工具。

使用KiCad MCP工具修改原理图

第一步我们需要先从 https://github.com/paul356/kicad-mcp.git 的develop分支获取增强后的kicad-mcp代码,然后按照README.md文件中的步骤安装和运行MCP服务器。运行MCP服务器前需要先设置服务器使用的环境变量,我的.env文件设置如下,大家可以按照自己的情况进行修改。我测试时使用了KiCad 10.0,KiCad 9.0应该也可以,但是我没有测试过。另外我使用了streamable-http协议,MCP服务通过http协议提供服务,指定的协议需要和大模型软件中的设置保持一致。

# Example environment file for KiCad MCP Server
# Copy this file to .env and customize the values

# Additional directories to search for KiCad projects (comma-separated)
KICAD_SEARCH_PATHS=/home/<user>/pcb/

# Override the default KiCad application path 
# macOS:
# KICAD_APP_PATH=/Applications/KiCad/KiCad.app
# Windows:
# KICAD_APP_PATH=C:\Program Files\KiCad
# Linux:
KICAD_APP_PATH=/tmp/.mount_kicadremp11199046105559030061/share/kicad

KICAD_VERSION=10.0

KICAD_3RD_PARTY=~/.local/share/kicad/10.0/3rdparty
KICAD_CONFIG_DIR=~/.config/kicad/10.0

MCP_TRANSPORT=streamable-http

服务器运行起来后,需要到大模型软件中配置MCP工具。这里我使用了CherryStudio,CherryStudio是一款在电脑上使用大语言模型的桌面软件,用户也可以使用其他支持MCP工具的桌面大模型软件。下面是在CherryStudio中配置MCP服务器的方法。

img

然后回到对话界面,在话题中选择刚刚配置的MCP工具。

img

我们可以试一下让大语言模型查看KICAD_USER_DIR目录下包含的KiCad项目。

img

第一次使用时,我们需要建立元器件的索引库。我们可以让大模型调用元器件同步工具,MCP工具会在后台开始建立索引库,这个过程需要花费一定的时间,但索引库建好后可以重复使用。

img

下面我们可以尝试让大语言模型帮我们设计原理图。这里需要给出明确和分解的指令,不然大语言模型可能自己不知道怎么操作。这里我尝试了一个较模糊的指令,差点就没有把我气死。

img

经过许多次提醒和修改后,在克制了好几次“要砸坏大模型服务器的冲动”之后,大模型才帮我完成了一个RC滤波电路。

img

img

未来计划

目前我只增加了对原理图的修改工具,该工具可以代替那些费力但比较简单的修改任务。目前的大模型还不是很擅长处理平面空间信息,如果要让大模型来独立完成电路,需要用户在空间布局上给予指导才行。下一步我会考虑添加针对PCB的修改工具,其中添加和修改footprint可能比较简单,但是要支持布局PCB导线可能是最有挑战的事情。欢迎对该项目有兴趣的朋友一起交流。

参考索引

  1. kicad-mcp - https://github.com/lamaalrajih/kicad-mcp
  2. kicad-mcp - https://github.com/paul356/kicad-mcp
  3. skip - https://github.com/psychogenic/kicad-skip