
# 插件创建方法
在AgentArts中创建一个完整的自定义插件，需要依次完成**插件和工具**的创建。其中插件负责定义连接目标与鉴权方式，工具负责定义具体的接口与参数，二者共同构成一个可被智能体调用的完整插件能力。
#### 插件与工具是什么
在 AgentArts 中，插件和工具是"集合"与"个体"的关系：
- 插件：是一个功能集合，定义了一组工具共用的基础属性，包括服务域名、基准路径和鉴权方式。可以把它理解为"连接到某个外部服务的通道"。
- 工具：是插件内具体的执行单元，每个工具对应一个独立的API接口，负责完成一项具体的单一任务。智能体在实际运行时，调用的是工具，而不是插件本身。
平台要求同一插件下的工具需具备同类功能，判断标准是：这些工具是否服务于同一业务域。
[表1]中，https://{endpoint}/v2/{project_id}/ocr是所有接口的根基，它定义了插件的连接目标（由服务域名+基准URL构成）；/general-text这类后缀是各工具独有的"路径"，它区分了插件内的不同能力。
 表1文字识别插件示例 
| 插件名称   | 工具名称   | API接口地址                                                  |
|:---|:---|:---|
| 文字识别插件 | 通用文字识别 | https://{endpoint}/v2/{project_id}/ocr/**general-text**  |
| 文字识别插件 | 通用表格识别 | https://{endpoint}/v2/{project_id}/ocr/**general-table** |
| 文字识别插件 | 手写文字识别 | https://{endpoint}/v2/{project_id}/ocr/**handwriting**   |
   
正确示例：
```
文字识别插件（公共部分：https://{endpoint}/v2/{project_id}/ocr）
├── 工具1：通用文字识别   →  /general-text
├── 工具2：通用表格识别   →  /general-table
└── 工具3：手写文字识别   →  /handwriting
```
错误示例：
将不同功能的工具混在一起，三个工具功能完全不同，不应放在同一插件下，会造成大模型在匹配插件能力时产生混淆。
```
插件中工具混乱
├── 工具1：天气查询   →  weather.api.com
├── 工具2：文字识别   →  ocr.myhuaweicloud.com
└── 工具3：发送邮件   →  mail.api.com
```
#### 插件URL与工具path的拆分
确定了插件包含哪些工具之后，下一步要规划插件URL与工具path的拆分方式。这本质上是"公共路径放哪里"的问题。
拆分原则：将所有工具共享的公共路径放入插件URL，将各工具独有的路径放入工具path。
以文字识别为例：
```
完整 API 地址：
https://ocr.cn-southwest-2.myhuaweicloud.com/v2/{project_id}/ocr/general-text
正确拆分方式：
插件 URL  = https://ocr.cn-southwest-2.myhuaweicloud.com/v2/{project_id}/ocr
工具 path = /general-text
错误拆分方式：
插件 URL  = https://ocr.cn-southwest-2.myhuaweicloud.com
工具 path = /v2/{project_id}/ocr/general-text
```
两种方式都能调通，但正确拆分的优势在于：公共路径只需在插件层维护一次，每个工具的path保持简洁。当插件下有多个工具时，若服务域名或公共路径发生变化，只需修改插件层一处，无需逐个修改所有工具。
关于路径变量（如 {project_id}）：
API路径中的变量如果是一个固定值，在配置插件时可以设置为固定值；如果是动态变化的变量，需要通过平台的"添加变量"功能在插件URL中声明，不能将变量写死为固定值。
图1配置路径变量   
![](https://support.huaweicloud.com/bestpractice-agentarts/zh-cn_image_0000002687950004.png "点击放大")
