自定义 CodeAct 工具 - 高级特性
1. 结构化参数定义
嵌套对象参数
ParameterTree.builder()
.addParameter(ParameterNode.builder()
.name("user")
.type(ParameterType.OBJECT)
.description("用户信息")
.required(true)
.addProperty(ParameterNode.builder()
.name("name")
.type(ParameterType.STRING)
.description("用户名")
.required(true)
.build())
.addProperty(ParameterNode.builder()
.name("age")
.type(ParameterType.INTEGER)
.description("年龄")
.build())
.addProperty(ParameterNode.builder()
.name("email")
.type(ParameterType.STRING)
.description("邮箱")
.build())
.build())
.build();
Agent 调用代码:
result = user_tool.create_user(user={
"name": "张三",
"age": 25,
"email": "zhangsan@example.com"
})
数组参数
ParameterTree.builder()
.addParameter(ParameterNode.builder()
.name("items")
.type(ParameterType.ARRAY)
.description("项目列表")
.required(true)
.items(ParameterNode.builder()
.name("item")
.type(ParameterType.STRING)
.description("项目名")
.build())
.build())
.build();
Agent 调用代码:
result = tool.process_items(items=["item1", "item2", "item3"])
2. 返回值 Schema 定义
@Override
public CodeactToolDefinition getCodeactDefinition() {
// 构建商品对象的 shape
ObjectShapeNode productShape = new ObjectShapeNode();
productShape.putField("id", new PrimitiveShapeNode(PrimitiveType.STRING, false, "商 品ID"));
productShape.putField("name", new PrimitiveShapeNode(PrimitiveType.STRING, false, "商品名称"));
productShape.putField("price", new PrimitiveShapeNode(PrimitiveType.NUMBER, false, "价格"));
// 构建返回值的 shape
ObjectShapeNode resultShape = new ObjectShapeNode();
resultShape.putField("products", new ArrayShapeNode(productShape, false, "商品列表"));
resultShape.putField("total", new PrimitiveShapeNode(PrimitiveType.INTEGER, false, "总数量"));
return DefaultCodeactToolDefinition.builder()
.name("search_products")
.description("搜索商品")
.parameterTree(ParameterTree.builder()
.addParameter(ParameterNode.builder()
.name("keyword")
.type(ParameterType.STRING)
.description("搜索关键词")
.required(true)
.build())
.build())
.declaredReturnSchema(ReturnSchema.builder()
.successShape(resultShape)
.build())
.build();
}
3. Few-Shot 示例
为工具提供调用示例,帮助 LLM 生成更准确的代码:
@Override
public CodeactToolMetadata getCodeactMetadata() {
return DefaultCodeactToolMetadata.builder()
.targetClassName("order")
.targetClassDescription("订单管理工具")
.supportedLanguages(List.of(Language.PYTHON))
.addFewShot(new CodeExample(
"创建一个订单,商品ID是123,数量是2",
"""
order_result = order.create_order(
product_id="123",
quantity=2
)
print(f"订单创建成功,订单号: {order_result['order_id']}")
""",
"成功创建订单并返回订单号"
))
.addFewShot(new CodeExample(
"查询订单 ORD-001 的状态",
"""
status = order.get_order_status(order_id="ORD-001")
print(f"订单状态: {status['status']}")
""",
"返回订单状态信息"
))
.build();
}
4. 工具别名
@Override
public CodeactToolMetadata getCodeactMetadata() {
return DefaultCodeactToolMetadata.builder()
.targetClassName("db")
.displayName("数据库查询工具")
.aliases(List.of("database", "query", "sql"))
.build();
}