Springboot整合讯飞星火模型实现AI问答
(网上看到的一段代码,使用简单,记录一下。)
开放文档地址:https://xinghuo.xfyun.cn/sparkapi
配置
yaml文件配置
pom.xml文件
<dependency>
<groupId>io.github.briqt</groupId>
<artifactId>xunfei-spark4j</artifactId>
<version>1.2.0</version>
</dependency>
配置文件
XingHuoConfig
import io.github.briqt.spark4j.SparkClient;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@ConfigurationProperties(prefix = "xunfei.client")
@Data
public class XingHuoConfig {
// AppID,即开放平台分配给开发者的AppID
private String appid;
// AppSecret,即开放平台分配给开发者的AppSecret
private String apiSecret;
// 用于API调用的密钥,由开发者填写
private String apiKey;
@Bean
//定义一个SparkClient函数,返回一个SparkClient对象
public SparkClient sparkClient() {
//创建一个SparkClient对象
SparkClient sparkClient = new SparkClient();
//将apiKey赋值给SparkClient的apiKey属性
sparkClient.apiKey = apiKey;
//将apiSecret赋值给SparkClient的apiSecret属性
sparkClient.apiSecret = apiSecret;
//将appid赋值给SparkClient的appid属性
sparkClient.appid = appid;
//返回SparkClient对象
return sparkClient;
}
}
参数使用(以接口为例)
controller
import com.example.medicalsystem.pojo.ECGAnalysis;
import com.example.medicalsystem.pojo.ECGIndicatorsVO;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping("/AI")
public class AIChat {
@Resource
private SparkManager sparkManager;
@PostMapping("/analyze1")
// 处理ECG指标分析的请求
public ECGAnalysis analyzeECGIndicators1(@RequestBody ECGIndicatorsVO indicators) {
String string = indicators.toString();
System.out.println("数据调试。该数据分析接口的入参是:----"+string);
String hr = indicators.getHr();
// 拼接用户输入的问题,调用SparkManager中的sendMesToAIUseXingHuo方法,传入拼接后的字符串,返回分析结果
String userInput="以下是我的医疗相关的问题,请帮我解答"+hr;
//result即:星火分析的文本结果
String result = sparkManager.sendMesToAIUseXingHuo(userInput);
// 创建ECGAnalysis对象,并将分析结果赋值给ecgIndicators
ECGAnalysis ecgIndicators=new ECGAnalysis();
ecgIndicators.setUserName(indicators.getPatientName());
ecgIndicators.setAlarm(result);
// 返回ECGAnalysis对象
return ecgIndicators;
}
}
service层
import io.github.briqt.spark4j.SparkClient;
import io.github.briqt.spark4j.constant.SparkApiVersion;
import io.github.briqt.spark4j.model.SparkMessage;
import io.github.briqt.spark4j.model.SparkSyncChatResponse;
import io.github.briqt.spark4j.model.request.SparkRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@Component
@Slf4j
public class SparkManager {
@Resource
private SparkClient sparkClient;
/*** AI生成问题的预设条件*/
public static final String PRECONDITION = "你作为一名医生,你具备查看各种生理指标的能力,并且能够为病人提供诊断和建议。有关您的健康情况,你随时可以提供专业的帮助和支持。\n" +
"\n" +
"\n" +
"\n";
public String sendMesToAIUseXingHuo(final String content) {
// 消息列表,可以在此列表添加历史对话记录
List<SparkMessage> messages = new ArrayList<>();
messages.add(SparkMessage.systemContent(PRECONDITION));
messages.add(SparkMessage.userContent(content));
// 构造请求
SparkRequest sparkRequest = SparkRequest.builder()
// 消息列表
.messages(messages)
// 模型回答的tokens的最大长度,非必传,默认为2048
.maxTokens(2048)
// 结果随机性,取值越高随机性越强,即相同的问题得到的不同答案的可能性越高,非必传,取值为[0,1],默认为0.5
.temperature(0.2)
// 指定请求版本
.apiVersion(SparkApiVersion.V3_5)
.build();
// 同步调用
SparkSyncChatResponse chatResponse = sparkClient.chatSync(sparkRequest);
String responseContent = chatResponse.getContent();
log.info("星火AI返回的结果{}", responseContent);
return responseContent;
}
}
好好学习,天天向上!