Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions src/main/java/com/unfbx/sparkdesk/constant/SparkDesk.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,12 @@ public class SparkDesk {
* 星火v2.1地址:wss协议
*/
public final static String SPARK_API_HOST_WSS_V2_1 = "https://spark-api.xf-yun.com/v2.1/chat";
/**
* 星火v3.1地址:ws协议
*/
public final static String SPARK_API_HOST_WS_V3_1 = "http://spark-api.xf-yun.com/v3.1/chat";
/**
* 星火v3.1地址:wss协议
*/
public final static String SPARK_API_HOST_WSS_V3_1 = "https://spark-api.xf-yun.com/v3.1/chat";
}
10 changes: 7 additions & 3 deletions src/main/java/com/unfbx/sparkdesk/entity/Chat.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,20 @@
@JsonIgnoreProperties(ignoreUnknown = true)
public class Chat {
/**
* 取值为[general,generalv2]
* 指定访问的领域,general指向V1.5版本 generalv2指向V2版本。注意:不同的取值对应的url也不一样!
* 取值为[general,generalv2,generalv3]
* 指定访问的领域,general指向V1.5版本,generalv2指向V2版本,generalv3指向V3版本 。注意:不同的取值对应的url也不一样!
*/
private String domain;
/**
* 取值为[0,1],默认为0.5
*/
private double temperature;
/**
* 取值为[1,4096],默认为2048
* 模型回答的tokens的最大长度
* <p>
* V1.5取值为[1,4096]
* V2.0取值为[1,8192],默认为2048。
* V3.0取值为[1,8192],默认为2048。
*/
@JsonProperty("max_tokens")
private Integer maxTokens;
Expand Down
85 changes: 85 additions & 0 deletions src/main/java/com/unfbx/sparkdesk/entity/Function.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package com.unfbx.sparkdesk.entity;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;
import java.util.Map;

/**
* @author cnzbq
* @since 11/30/2023
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class Function {
/**
* 列表形式,列表中的元素是json格式
* 元素中包含name、description、parameters属性
*/
private List<Text> text;

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public static class Text {
/**
* function名称 用户输入命中后,会返回该名称
*/
private String name;
/**
* function功能描述 描述function功能即可,越详细越有助于大模型理解该function
*/
private String description;
/**
* function参数列表
*/
private Parameter parameters;
}

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public static class Parameter {
/**
* 参数类型
*/
private String type;
/**
* 参数信息描述
* 该内容由用户定义,命中该方法时需要返回哪些参数
*/
private Map<String, Properties> properties;
/**
* 必须返回的参数列表
* 该内容由用户定义,命中方法时必须返回的字段
*/
private List<String> required;
}


@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public static class Properties {
/**
* 参数类型描述
* 该内容由用户定义,需要返回的参数是什么类型
*/
private String type;
/**
* 参数详细描述
* 该内容由用户定义,需要返回的参数的具体描述
*/
private String description;
}
}
27 changes: 27 additions & 0 deletions src/main/java/com/unfbx/sparkdesk/entity/FunctionCall.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.unfbx.sparkdesk.entity;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
* @author cnzbq
* @since 11/30/2023
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class FunctionCall {
/**
* 客户在请求体中定义的参数及参数值
*/
private String arguments;
/**
* 客户在请求体中定义的方法名称
*/
private String name;
}
1 change: 1 addition & 0 deletions src/main/java/com/unfbx/sparkdesk/entity/InPayload.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,5 @@
@JsonIgnoreProperties(ignoreUnknown = true)
public class InPayload {
private Message message;
private Function functions;
}
11 changes: 11 additions & 0 deletions src/main/java/com/unfbx/sparkdesk/entity/Text.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.unfbx.sparkdesk.entity;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.*;

/**
Expand All @@ -24,6 +25,16 @@ public class Text {
* 结果序号,取值为[0,10]; 当前为保留字段,开发者可忽略
*/
private Integer index;
/**
* /
*/
@JsonProperty("content_type")
private String contentType;
/**
* function call 返回结果
*/
@JsonProperty("function_call")
private FunctionCall functionCall;

@Getter
public enum Role {
Expand Down
39 changes: 31 additions & 8 deletions src/test/java/com/unfbx/AppTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,7 @@
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.*;
import java.util.concurrent.CountDownLatch;

/**
Expand All @@ -22,16 +20,16 @@ public class AppTest {
@Test
public void test() {
SparkDeskClient sparkDeskClient = SparkDeskClient.builder()
.host(SparkDesk.SPARK_API_HOST_WS_V2_1)
.host(SparkDesk.SPARK_API_HOST_WS_V3_1)
.appid("****")
.apiKey("************************")
.apiSecret("************************")
.build();
InHeader header = InHeader.builder().uid(UUID.randomUUID().toString().substring(0, 10)).appid("****").build();
Parameter parameter = Parameter.builder().chat(Chat.builder().domain("generalv2").maxTokens(2048).temperature(0.3).build()).build();
InHeader header = InHeader.builder().uid(UUID.randomUUID().toString().substring(0, 10)).appid(sparkDeskClient.getAppid()).build();
Parameter parameter = Parameter.builder().chat(Chat.builder().domain("generalv3").maxTokens(2048).temperature(0.3).build()).build();
List<Text> text = new ArrayList<>();
text.add(Text.builder().role(Text.Role.USER.getName()).content("使用md文档格式写出一个三行三列的表格,表头包含:姓名,性别,爱好。数据随机即可。").build());
InPayload payload = InPayload.builder().message(Message.builder().text(text).build()).build();
text.add(Text.builder().role(Text.Role.USER.getName()).content("北京天气").build());
InPayload payload = InPayload.builder().message(Message.builder().text(text).build()).functions(buildFunction()).build();
AIChatRequest aiChatRequest = AIChatRequest.builder().header(header).parameter(parameter).payload(payload).build();

sparkDeskClient.chat(new ChatListener(aiChatRequest) {
Expand Down Expand Up @@ -64,4 +62,29 @@ public void onChatToken(Usage usage) {
e.printStackTrace();
}
}

private Function buildFunction() {
Function function = new Function();
Function.Text text1 = new Function.Text();
function.setText(Collections.singletonList(text1));

text1.setName("天气查询");
text1.setDescription("天气插件可以提供天气相关信息。你可以提供指定的地点信息、指定的时间点或者时间段信息,来检索诗词库,精准检索到天气信息。");

Function.Parameter parameter = new Function.Parameter();
text1.setParameters(parameter);

parameter.setType("object");

Function.Properties location = Function.Properties.builder().type("string").description("地点,比如北京。").build();
Function.Properties date = Function.Properties.builder().type("string").description("日期。").build();

Map<String, Function.Properties> map = new HashMap<>();
map.put("location", location);
map.put("date", date);
parameter.setProperties(map);

parameter.setRequired(Collections.singletonList("location"));
return function;
}
}