逻辑设计

开始->了解、分析用户->查询满足条件的商品->给用户推荐->新增订单->完成

加粗为大模型处理;其他两个是传统程序处理,将其定义为方法

prompt设计

function

  • 发送prompt,包含function定义(一个复杂的json)
  • agent任务拆分,判断是否需要调用function
  • 返回function名称和参数
  • 执行函数,拼接结果到prompt,再次发送给大模型

要注意大模型是否支持function

定义function

在后续版本中,function也叫做tools。
首先定义tools模板:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Data
public class XXXQuery{
@ToolParam(Required = false,description = "根据条件查询课程")
private String type;
@ToolParam(Required = false,description = "排序方式")
private List<Sort> sorts;
@Data
public static class Sort{
@ToolParam(Required = false,description = "排序字段")
private String field;
@ToolParam(Required = false,description = "是否升序")
private Boolean asc;
}
}

在实现每个方法:

1
2
3
4
5
6
7
8
9
10
@RequiredArgsConstructor
@Component
public calss XXXTools{
private final XXservice xxservice;

@Tool(description = "根据条件查询课程")
public List<Course> queryCourse(@ToolParam(required = false,description = "课程查询条件") XXXQuery query){
//XXXXX实现,比如通过数据库查询
}
}

spring-ai会通过反射实现

配置tools

在chatclient中配置defaultTools(xxxTools),同时需要配置defaultSystem(SystemConstants.SERVICE_SYSTEM_PROMPT)系统提示词身份

在调用tools,由于spring AI和Alibaba不兼容,会导致FunctionCalling无法使用stream模式。版本是M6,后续版本应该修复了