最近spring-ai-alibaba主干分支新增了對Tushare的支持,一起來看看如何使用
簡單樣例
老樣子,分三步進行:
第一步:添加依賴
<dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-tool-calling-tushare</artifactId></dependency>
第二步:添加配置
spring.ai.alibaba.toolcalling.tushare.token=your token
第三步:代碼調用
@GetMapping("/tool")public String tool(String input) {return chatClient.prompt().toolNames("tushareGetStockQuotes").user(input).call().content();}
擴展知識
接口固定只能查詢日行情,不夠用想要調用其他接口怎么辦?
在引入前面jar包和添加配置后,自定義一個bean來搞定
public class TushareCustomServiceimplements Function<TushareCustomService.Request, TushareCustomService.Response> {private final WebClientTool webClientTool;private final TushareProperties tushareProperties;public TushareCustomService(JsonParseTool jsonParseTool, TushareProperties tushareProperties) {this.webClientTool = WebClientTool.builder(jsonParseTool, tushareProperties).build();this.tushareProperties = tushareProperties;}/*** 獲取股票日行情* @param tsCode 股票代碼,例如000001.SZ* @param startDate 開始日期,格式yyyyMMdd* @param endDate 結束日期,格式yyyyMMdd* @return https://tushare.pro/document/2?doc_id=27*/private String getStockQuotes(String tsCode, String startDate, String endDate) {try {//第二步:準備請求參數Map<String, String> params = new HashMap<>(3);params.put("ts_code", tsCode);params.put("start_date", startDate);params.put("end_date", endDate);//第三步,修改api_name和fields//api_name=daily,daily即tushare接口名稱//fields為想要接收的字段Map<String, Object> valueMap = Map.of("api_name", "daily", "token", tushareProperties.getToken(), "params",params, "fields", "ts_code,trade_date,open,high,low,close,pre_close,change,pct_chg,vol,amount");return webClientTool.post("", valueMap).block();}catch (Exception e) {throw new RuntimeException("Failed to get stock quotes", e);}}@Overridepublic Response apply(Request request) {try {return new Response(this.getStockQuotes(request.tsCode, request.startDate, request.endDate));}catch (Exception e) {return new Response("Error occurred while processing the request.");}}//第一步:修改Request請求字段@JsonClassDescription("根據股票代碼或日期獲取股票日行情")public record Request(@JsonProperty(value = "ts_code") @JsonPropertyDescription("股票代碼,例如000001.SZ") String tsCode,@JsonProperty(value = "start_date") @JsonPropertyDescription("開始日期,格式yyyyMMdd") String startDate,@JsonProperty(value = "end_date") @JsonPropertyDescription("結束日期,格式yyyyMMdd") String endDate) {}public record Response(String message) {}}
三步套用上面的代碼:
第一步:修改Request字段,修改為希望大模型從對話中提取的字段,也即調用tushare接口的參數
第二步:修改請求參數,將調用接口時傳遞的params修改為接口所需入參
第三步:修改接口名稱api_name和返回字段列表fields
然后將該類傳遞給ChatClient即可
ps:該包目前還在主干分支中,使用需自行打包或等下一個版本(>1.0.0.2)