package com.TestLLMshieldV2;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.volcengine.llmshield.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class GenerateV2Stream {
public static void main(String[] args) throws IOException {
String myUrl = "https://cn-beijing.sdk.access.llm-shield.omini-shield.com"; // 根据大模型应用防火墙实例所在地域替换相应的地域信息
String ak = "YOUR AK"; // 火山账号的 AK
String sk = "YOUR SK"; // 火山账号的 SK
String region = "cn-beijing"; // 大模型应用防火墙实例所在地域
String myAppID = "app-d2pgblcjslsilvcv****"; // 资产的 AppId,可在控制台获取
long timeout = 5000; // 超时时间,单位毫秒
ModerateV2Response moderateV2Responseode = null;
ApiClient client = ApiClient.New(myUrl, ak, sk, region, timeout, "http://10.37.**.**:8888", 100); // 初始化大模型应用防火墙客户端,其中 "http://10.37.**.**:8888" 为代理地址示例值、100 为最大连接数示例值
ModerateV2Request moderateV2Request = new ModerateV2Request();
moderateV2Request.setScene(myAppID);
MessageV2 message = new MessageV2();
message.setContent("A地的人都吸毒?");
message.setRole("user"); // 检测的内容来源,user-用户提示词
message.setContentType(ContentTypeV2.TEXT);
moderateV2Request.setMessage(message);
MessageV2 message1 = new MessageV2();
message1.setContent("请给我一份A地十一出行计划");
message1.setRole("user"); // 上下文内容来源,user-用户提示词;assistant-模型响应内容;system-系统默认提示词
message1.setContentType(ContentTypeV2.TEXT);
moderateV2Request.appendHistory(message1);
MessageV2 message2 = new MessageV2();
message2.setContent("你是一个智能助手");
message2.setRole("system"); // 上下文内容来源,user-用户提示词;assistant-模型响应内容;system-系统默认提示词
message2.setContentType(ContentTypeV2.TEXT);
moderateV2Request.appendHistory(message2);
moderateV2Responseode = client.Moderate(moderateV2Request );
if (moderateV2Responseode != null) {
System.out.println("审核结果:" + moderateV2Responseode);
} catch (Exception e) {
System.err.println("调用 Moderate 方法失败:" + e.getMessage());
// 可选:根据业务需求进行重试、返回默认值或抛出自定义异常
// throw new BusinessException("内容审核服务调用失败", e);
ModerateV2Result result = moderateV2Responseode.getResult();
if(result.getDecision()!=null) {
if(result.getDecision().getDecisionType() != DecisionTypeV2.OPTIMIZE) {
// 您可以选择在命中代答动作后再进行代答,也可以根据具体业务需求来决定后续的处理逻辑。 SDK支持对任何动作进行代答
System.out.println("您的请求无需代答,action is:" + result.getDecision().getDecisionType());
System.out.println("您的审核结果为空" );
GenerateStreamV2Request request = new GenerateStreamV2Request();
request.setMsgID(moderateV2Responseode.getResult().getMsgID());
request.setUseStream(Boolean.TRUE);
GenerateStreamV2Response response = client.GenerateV2Stream(request);
InputStream inputStream = response.getReader();
BufferedReader bufReader = new BufferedReader(new InputStreamReader(inputStream));
line = bufReader.readLine();
} catch (IOException e) {
System.err.println("读取失败: " + e.getMessage());
// 假设 SSE 数据以 "data: " 开头
if (line.startsWith("data:")) {
String data = line.substring(5).trim();
if (data.equals("[DONE]")) {
System.out.println("收到 data: [DONE],关闭连接");
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
GenerateStreamV2ResponseData responseData = objectMapper.readValue(data, GenerateStreamV2ResponseData.class);
String tempString = objectMapper.writeValueAsString(responseData);
System.out.println("Received result: " + tempString);
} catch (IOException e) {
System.err.println("反序列化失败: " + e.getMessage());
} catch (Exception e) {
System.err.println("Failed to start SSE stream: " + e.getMessage());