AI集成公司私有组件库

4 阅读6分钟

AI集成公司私有组件库:SKILL技术实战指南

引言

随着AI编程助手的发展,开发人员已经能够利用AI生成基于开源组件库(如Element Plus)的业务代码。然而,当涉及到公司内部封装的私有组件库时,AI往往无法直接识别和使用这些定制化组件。传统做法是让AI先生成开源组件的代码,然后手动修改为私有组件,这种方式严重降低了AI辅助开发的效率。

那么,如何让AI真正理解并熟练使用公司内部的私有组件库呢?

SKILL技术:私有组件库的AI集成方案

SKILL技术的出现完美解决了这一难题。与传统的MCP(Model Context Protocol)方案相比,SKILL技术更加简单易用。通过编写标准的markdown格式SKILL文件,开发者可以系统地向AI传授公司私有组件库的知识,包括组件列表、属性、事件、方法以及使用示例。

SKILL技术的核心在于:通过结构化的文档,让AI全面掌握私有组件库的API接口和使用方式,从而实现真正的智能代码生成。

本文将以Trae IDE为例,详细讲解如何使用SKILL技术,让AI深度集成公司内部的组件库,显著提升开发效率。

实战案例:my-ui组件库SKILL生成

组件库背景

我们以一个名为my-ui的组件库为例,该组件库基于Element Plus进行二次封装,提供了更加丰富的功能和定制化的业务组件。其中,MyTree组件是核心组件之一,它在原生el-tree的基础上增强了拖拽功能,并封装了expandAllfoldAll等实用方法,用于实现节点的全展开和全折叠功能。

SKILL文件规范

SKILL文件需要遵循特定的目录结构和命名规范:

  • 存放路径:必须放置在组件库项目的根目录下
  • 文件路径.trae/skills/[技能名称]/SKILL.md
  • 文件格式:标准的markdown格式,包含YAML frontmatter

自动生成SKILL文件

现代AI编程助手(如Gemini-3-flash-preview)已经能够自动生成高质量的SKILL文件。操作步骤如下:

  1. 打开组件库项目
  2. 在AI对话框中输入提示词:"编写my-ui组件库的SKILL"
  3. AI会自动分析组件库结构并生成完整的SKILL文件
  4. 生成的文件会自动保存到.trae/skills目录下

20260222_114408_image.png

生成的SKILL文件示例

---
name: "my-ui"
description: "My组件库技能说明。包含 MyTree 组件的使用说明、Props、Events 和 Methods。当用户询问关于 MyTree 组件的使用或开发时调用此技能。"
---

# My 组件库技能说明

本组件库包含一组基于 Vue 3 的自定义组件。目前主要包含 `MyTree` 组件。

## 组件列表

### MyTree

`MyTree` 是基于 Element Plus 的 `el-tree` 组件的封装,增强了拖拽功能和跨树交互能力。

#### 路径

`src/components/tree/MyTree.vue`

#### 描述

主要用于处理拖拽操作,支持节点在不同树之间拖拽,以及在同一棵树内进行拖拽时提供自定义的占位符逻辑。

#### Props (属性)


| 名称        | 类型       | 描述                                                                                |
| :---------- | :--------- | :---------------------------------------------------------------------------------- |
| `data`      | `Array`    | 树形结构的数据源。                                                                  |
| `allowDrop` | `Function` | 判断节点是否可以被放置的函数。签名: `(draggingNode, dropNode, type) => boolean`。   |
| `targetRef` | `Object`   | 指向另一个 `MyTree` 实例或包含 `tree`引用的组件的引用,用于拖拽事件期间的跨树通信。 |
| `...$attrs` | `Any`      | 所有其他属性都会透传给底层的 `el-tree`。                                            |

#### Events (事件)

| 名称              | 参数                                       | 描述                                                                                             |
| :---------------- | :----------------------------------------- | :----------------------------------------------------------------------------------------------- |
| `node-drag-start` | `(node, event)`                            | 当节点开始拖拽时触发。如果提供了 `targetRef`,也会在 `targetRef` 上触发 `tree-node-drag-start`。 |
| `node-drag-end`   | `(draggingNode, endNode, position, event)` | 当节点拖拽结束时触发。处理占位符节点的插入/移除,并在 `targetRef` 上触发 `tree-node-drag-end`。  |

#### Methods (方法)

这些方法通过组件实例(使用 `ref`)暴露:

- `getNode(data)`: 返回给定数据的节点对象。
- `remove(data)`: 移除给定数据的节点。
- `insertBefore(data, refNode)`: 在参考节点之前插入数据。
- `insertAfter(data, refNode)`: 在参考节点之后插入数据。
- `expandAll()`: 展开所有节点。
- `foldAll()`: 折叠所有节点。

#### 使用示例
```vue
<template>
  <MyTree
    ref="myTree"
    :data="treeData"
    :allow-drop="allowDrop"
    @node-drag-start="handleDragStart"
    @node-drag-end="handleDragEnd"
  />
  <button @click="expandAll">全部展开</button>
  <button @click="foldAll">全部折叠</button>
</template>

<script>
import MyTree from "@/components/tree/MyTree.vue";

export default {
  components: { MyTree },
  data() {
    return {
      treeData: [
        {
          label: "节点 1",
          children: [{ label: "节点 1-1" }],
        },
      ],
    };
  },
  methods: {
    allowDrop(draggingNode, dropNode, type) {
      return true;
    },
    handleDragStart(node, event) {
      console.log("开始拖拽", node);
    },
    handleDragEnd(draggingNode, endNode, position, event) {
      console.log("拖拽结束", draggingNode, endNode, position);
    },
    expandAll() {
      this.$refs.myTree.expandAll();
    },
    foldAll() {
      this.$refs.myTree.foldAll();
    }
  },
};
</script>

SKILL文件导入与配置

导入步骤

在Trae编辑器中导入SKILL文件非常简单:

  1. 点击编辑器右上角的"设置"按钮
  2. 选择"规则和技能"选项
  3. 在"技能"选项卡中点击"创建"按钮
  4. 选择.trae/skills/目录下的SKILL.md文件
  5. 文件中的名称和描述会自动填充到对应的输入框中
  6. 点击"确认"完成导入

20260222_115427_image.png

导入成功后,SKILL技能就会出现在技能列表中,AI助手就可以开始使用这个私有组件库的知识了。

20260222_115515_image.png

AI辅助开发实战

智能代码生成

导入SKILL后,AI助手就具备了使用私有组件库的能力。当需要在业务代码中使用私有组件时,只需通过简单的提示词即可:

提示词示例:"在组件中添加my-tree组件,支持展开折叠功能"

20260222_120055_image.png

生成的代码分析

AI基于SKILL文件中提供的组件知识,能够生成高度准确和符合规范的代码:

<template>
  <div class="my-tree-demo">
    <div class="actions">
      <button @click="expandAll">全部展开</button>
      <button @click="foldAll">全部折叠</button>
    </div>
    <div class="tree-container">
      <MyTree
        ref="myTreeRef"
        :data="treeData"
        :allow-drop="allowDrop"
        @node-drag-start="handleDragStart"
        @node-drag-end="handleDragEnd"
      />
    </div>
  </div>
</template>

<script setup lang="ts">
import { ref } from "vue";
import { MyTree } from "my-ui/my-ui.es";

// Mock 数据
const treeData = ref([
  {
    id: 1,
    label: "节点 1",
    children: [
      {
        id: 2,
        label: "节点 1-1",
        children: [
          { id: 3, label: "节点 1-1-1" },
          { id: 4, label: "节点 1-1-2" },
        ],
      },
      { id: 5, label: "节点 1-2" },
    ],
  },
  {
    id: 6,
    label: "节点 2",
    children: [
      { id: 7, label: "节点 2-1" },
      { id: 8, label: "节点 2-2" },
    ],
  },
  {
    id: 9,
    label: "节点 3",
    children: [],
  },
]);

const myTreeRef = ref();

const allowDrop = (draggingNode: any, dropNode: any, type: any) => {
  return true;
};

const handleDragStart = (node: any, event: any) => {
  console.log("开始拖拽", node);
};

const handleDragEnd = (
  draggingNode: any,
  endNode: any,
  position: any,
  event: any,
) => {
  console.log("拖拽结束", draggingNode, endNode, position);
};

const expandAll = () => {
  myTreeRef.value?.expandAll();
};

const foldAll = () => {
  myTreeRef.value?.foldAll();
};
</script>

<style scoped>
.my-tree-demo {
  padding: 20px;
}
.actions {
  margin-bottom: 15px;
}
.actions button {
  margin-right: 10px;
  padding: 5px 10px;
  cursor: pointer;
}
.tree-container {
  border: 1px solid #ddd;
  padding: 10px;
  border-radius: 4px;
}
</style>

代码亮点分析

  1. 组件引用准确:AI正确识别了MyTree组件的导入路径 my-ui/my-ui.es
  2. 方法调用规范:正确使用了expandAll()foldAll()方法,这是MyTree组件特有的封装方法
  3. 类型安全:使用了TypeScript,保持了类型一致性
  4. 事件处理完整:包含了拖拽相关的事件处理函数
  5. 样式完整:提供了完整的CSS样式,确保UI美观

运行效果

代码运行后,将呈现一个功能完整的树形组件,支持节点拖拽、全部展开和全部折叠功能:

20260222_120246_image.png

总结与展望

通过SKILL技术,我们成功实现了AI对公司私有组件库的深度集成。这种方法具有以下优势:

核心价值

  • 开发效率提升:无需手动修改AI生成的代码,直接使用私有组件
  • 代码质量保证:生成的代码符合公司内部的编码规范和组件使用方式
  • 知识传承:通过SKILL文件系统化地记录组件库的使用方法
  • 快速上手:新团队成员可以快速掌握私有组件库的使用

最佳实践建议

  1. 定期更新SKILL文件:随着组件库的迭代更新,及时更新SKILL文件
  2. 详细文档:在SKILL文件中提供丰富的使用示例和注意事项
  3. 版本管理:对SKILL文件进行版本控制,与组件库版本保持一致
  4. 团队培训:推广SKILL技术的使用,提升整个团队的开发效率

SKILL技术为私有组件库的AI集成提供了完美的解决方案,真正实现了"编写一次,智能生成"的开发模式,显著提升了前端开发的效率和质量。