后端接入讯飞星火API

如何引入?先看官方文档

https://www.xfyun.cn/doc/spark/Web.html#_2-function-call%E8%AF%B4%E6%98%8E:~:text=%23-,3.%20%E8%B0%83%E7%94%A8%E7%A4%BA%E4%BE%8B,-%E6%B3%A8%3A%20demo%E5%8F%AA%E6%98%AF

我建议引入其他大佬写好的 sdk ,GitHub 地址:https://github.com/briqt/xunfei-spark4j

1
2
3
4
5
6
7
<!--修改version为最新稳定版-->

<dependency>
<groupId>io.github.briqt</groupId>
<artifactId>xunfei-spark4j</artifactId>
<version>1.3.0</version>
</dependency>

调用的话,不使用硬编码,而是把相关信息写在配置文件里面

1
2
3
4
5
6
SparkClient sparkClient=new SparkClient();

// 设置认证信息
sparkClient.appid="";
sparkClient.apiKey="";
sparkClient.apiSecret="";

config 文件,读取我们配置的信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import lombok.Data;

@Configuration
@ConfigurationProperties(prefix = "xunfei.client")
@Data
public class XingHuoConfig {
private String appid;
private String apiSecret;
private String apiKey;

@Bean
public SparkClient sparkClient() {
SparkClient sparkClient = new SparkClient();
sparkClient.setApiKey(apiKey);
sparkClient.setApiSecret(apiSecret);
sparkClient.setAppid(appid);
return sparkClient;
}
}

如果生成的内容不符合自己的预期,解决方法:给他一个符合标准的例子, 虽然有耗费 token 但是暂时没想到更好的方式

这个 PRECONDITION 是我在 service 调用之前手动拼接到 content 前面,没太深入了解是不是能提前指定预设😅

AI 服务类相关的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
@Service
@Slf4j
public class Aiservice {

@Resource
private SparkClient sparkClient;

@Resource
private ClientV4 clientV4;

// 稳定的随机数
private static final float STABLE_TEMPERATURE = 0.05f;

//预设角色
public static final String PRECONDITION = "你是一个${角色定义},接下来我会按照以下固定格式给你提供内容:\n" +。。。。 + "下面是一个具体的例子的模板:"+;

/**
* 星火AI 对话
*
* @param
* @return
*/
public String sendMesToAIUseXingHuo(final String content) {
List<SparkMessage> messages = new ArrayList<>();
messages.add(SparkMessage.userContent(content));
// 构造请求
SparkRequest sparkRequest = SparkRequest.builder()
// 消息列表
.messages(messages)
// 模型回答的tokens的最大长度,非必传,取值为[1,4096],默认为2048
.maxTokens(2048)
// 核采样阈值。用于决定结果随机性,取值越高随机性越强即相同的问题得到的不同答案的可能性越高 非必传,取值为[0,1],默认为0.5
.temperature(0.2)
// 指定请求版本,默认使用最新2.0版本
.apiVersion(SparkApiVersion.V3_5)
.build();
// 同步调用
SparkSyncChatResponse chatResponse = sparkClient.chatSync(sparkRequest);
String responseContent = chatResponse.getContent();
log.info("星火 AI 返回的结果 {}", responseContent);
return responseContent;
}

}

后端接入讯飞星火API
http://blog.hrseno.cn/2024/11/16/AI大模型接入1/
作者
黄浩森
发布于
2024年11月16日
许可协议