使用数据表管理工具
本节内容可以参考文件"CaseStudy\DeepSeek.Table"的窗口"用数据表管理工具"。
本节的任务和上一节完全一样,只是不再直接在代码中定义工具,改为用数据表定义工具。
在前面为GroupTableBuilder编写工具定义的时候,你可能会感到一丝担忧:工具描述和参数描述很长,不仅可读性差,容易出错,且不容易维护。
我们可以通过数据表来管理工具。
示例文件创建了AITools和AIParameters两个表,分别用于输入工具定义和参数定义,两个表通过ToolID建立关联,二者的结构如下:
AITools表结构:
|
列名 |
说明 |
|
ToolID |
工具ID,整数型 |
|
ToolName |
工具名,字符串型 |
|
Description |
工具描述,备注型 |
AIParameters表结构:
| 列名 | 说明 |
|
ToolID |
工具ID,整数型 |
|
SortOrder |
参数顺序,整数型 |
|
ParameterName |
参数名称,字符串型 |
|
ParameterType |
参数类型,字符串型 |
|
IsRequired |
是否为必填参数,逻辑型 |
|
ArrayItemType |
如果参数类型为数组(array),可用此列指定元素类型,字符串型 |
|
EnumValues |
候选值,用逗号分割,字符串型 |
|
Description |
参数描述,备注型 |
这两个表中已经输入了前两节中所有的工具和参数定义,现在修改窗口的AfterLoad事件代码,将工具定义代码修改为:
'从数据表中读取工具定义
For
Each
tr
As
DataRow
In
DataTables("AITools").DataRows
Dim
tool
As
AITool = caller.AddTool(tr("ToolName"),
tr("Description"))
'添加工具
For
Each
pr
As
DataRow
In
DataTables("AIParameters").Select("ToolID
= "
& tr("ToolID"),
"SortOrder")
'根据SortOrder列排序
Dim
EnumValues()
As
String
=
Nothing
If
pr.IsNull("EnumValues")
=
False
Then
EnumValues = pr("EnumValues").Split({","c,
","c})
'假定候选值是用逗号
隔开,用户容易混淆半角逗号和全角逗号,所以将两个都作为分割符号
End
If
tool.AddParameter(pr("ParameterName"),
pr("ParameterType"),
pr("Description"),
pr("IsRequired"),
pr("ArrayItemType"),
EnumValues)
Next
Next
今后增加、删除或修改工具和参数的定义后,上述代码都可以保持不变。