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

基于KiCad的大语言模型插件(Agent) - 支持编辑PCB

前言

这一篇文章介绍我们对KiCad AI Assistant插件的增强,这些优化依然是针对Linux平台KiCad 10.0。相对于上一篇文章时的状态,这段时间我添加了PCB元器件相关的工具。

  1. 支持搜索、查找系统目录中的元器件。
  2. 支持设置原理图符号对应的PCB元器件。
  3. 支持从原理图更新PCB文件。
  4. 支持放置、移动、旋转PCB元器件。

除了添加PCB元器件相关的工具外,还对已有工具进行了增强。

  1. 增强了原理图连线工具。对工具的功能和参数进行了优化调整,原来的连线工具在很多情况下会失败,目前大部分场景能够找到合适的连线路径。
  2. 添加了大语言模型上下文空间管理功能。该功能会剔除过时的工具调用结果,节省上下文空间。当上下文超过压缩阈值时MCP会利用LLM来压缩历史聊天,尽量保留用户意图和设计方案。
  3. 优化了插件界面显示,合并了对话和工具调用窗口。打开KiCad API的情况下支持通过IPC接口更新PCB编辑器显示。但由于接口的限制,暂时无法更新原理图编辑器显示,需要用户手动刷新。
  4. 支持保存、恢复、重置当前会话。
  5. 支持保存快照,方便用户回退修改。LLM有时会搞砸原理图连线,乱到需要重新连线。
  6. 增加了测试用例,修复代码问题。

新的插件界面如下所示

img

相关文章:

  1. 如何使用LLM直接修改KiCad原理图
  2. 基于KiCad的大语言模型插件(Agent)

PCB相关功能介绍

PCB功能设计

KiCad的PCB文件(.kicad_pcb)和原理图文件一样,也是S表达式格式的纯文本文件,可以直接用代码读写。PCB相关功能的实现主要分两个部分。

第一个部分是封装的选型和同步。用户在原理图阶段为每个元件符号指定封装(Footprint属性),指定的封装名来自系统封装库。为了让LLM知道系统里有哪些封装可以用,插件会扫描系统的fp-lib-table,把所有.kicad_mod文件的元数据写入一个SQLite索引库,供LLM搜索查询。封装选好并写入原理图后,再通过KiCad的IPC接口触发”Update PCB from Schematic”操作,把封装同步到PCB文件里。

第二个部分是PCB上的元件摆放。同步完成后,封装坐标、旋转角度等信息都存在.kicad_pcb文件里,插件直接解析这个文件来读取和修改封装位置。修改完成后调用IPC接口通知KiCad重新加载PCB文件,PCB编辑器就会自动刷新显示。

PCB相关工具

插件内嵌的MCP工具添加了下列工具以支持PCB相关的功能。工具列表如下。

# 工具名 作用
1 sync_footprint_index 后台构建/增量更新封装库索引
2 get_footprint_sync_status 查询封装索引构建进度
3 list_footprint_libraries 列出所有可用封装库
4 search_footprints 按名称/描述/标签搜索封装
5 get_footprint_details 获取封装详情(焊盘、边界框等)
6 get_board_info 获取 PCB 板基本信息
7 list_footprints 列出板上已放置封装
8 get_footprint 获取单个封装详情
9 list_nets 列出板上所有网络
10 get_ratsnest 获取未布线飞线(ratsnest)
11 get_board_outline 读取板框(Edge.Cuts)图形元素
12 clear_board_outline 清除板框
13 add_board_outline_segment 向板框添加直线段
14 add_board_outline_arc 向板框添加圆弧
15 set_board_outline_rect 一步设置矩形板框(支持圆角)
16 get_footprint_bbox 获取单个封装的 courtyard 边界框
17 get_board_bounding_box 获取全板封装的联合边界框
18 align_footprints 将一组封装对齐到同一坐标轴
19 distribute_footprints 沿坐标轴等间距分布封装
20 move_footprints_by_delta 将一组封装整体平移 (dx, dy)
21 find_free_pcb_area 搜索板上不与已有封装重叠的空闲位置
22 set_footprint_position 移动/旋转单个封装
23 flip_footprint 将封装在顶层/底层之间翻转
24 set_footprint_property 设置封装属性字段
25 update_pcb_from_schematic 触发”从原理图更新 PCB”操作
26 reload_kicad 在 KiCad 编辑器中重新加载文件

工具调用举例

下面用一个实际的例子介绍如何用这个插件来设计PCB。因为KiCad 10.0与中文输入法不太兼容,为了方便我输入的是英文提示词。也可以在文件编辑器中输入中文再粘贴到插件中,我因为懒就直接用了英文。

  1. 我用KiCad AI Assistant插件画了一个由USB和电池组成的简单电源电路。
    • img
  2. 在KiCad AI Assistant中要求大语言模型帮我们搜索适合的元器件封装。
    • img
  3. 大语言模型搜索封装库,选好封装后把封装信息写入原理图。
    • img
  4. 待确定完所有元器件后让大语言模型触发基于原理图更新PCB的操作,KiCad会弹出”Update PCB from Schematic”对话框,用户点击确认后封装就出现在PCB上了。
    • img
    • img
  5. 继续让大语言模型调整PCB元器件的位置,直到所有元器件都摆放到合适的位置。
    • img
    • img

目前KiCad AI Assistant还不支持PCB布线功,还需要用户自己布线,不久将会支持布线功能。

总结

本文介绍了最近给KiCad AI Assistant插件新增的PCB相关功能,包括封装库搜索、PCB查询和编辑以及元器件放置等工具。同时也对已有的连线工具和上下文管理做了改进,提升了连线稳定性,还添加了其他易用性相关的优化。目前还有一个小限制:原理图编辑器的界面需要用户手动刷新。

在开发这个插件工具的过程中,我发现做出一个MCP很容易,但做出一个好用的MCP还需要很多的打磨。希望KiCad AI Assistant能对大家有帮助,欢迎大家试用,反馈问题,提交PR。

参考索引

  1. kicad-mcp克隆 - https://github.com/paul356/kicad-mcp