扣子罗盘 Java SDK 提供了调用扣子罗盘平台已发布 Prompt 的能力。你可以根据业务需求,选择以下两种调用模式:
在集成 Prompt 调用功能前,请确保满足以下条件:
COZELOOP_WORKSPACE_ID:目标工作空间 ID。COZELOOP_API_TOKEN:拥有 executePrompt 权限的 API 令牌(PAT 或 OAuth Token)。以下示例展示了如何在 Java 应用中通过 SDK 调用已发布的 Prompt。
使用 client.execute(param) 方法发起请求,该方法会阻塞直到模型生成结束,并返回包含完整结果的 ExecuteResult 对象。
import com.coze.loop.client.CozeLoopClient;
import com.coze.loop.client.CozeLoopClientBuilder;
import com.coze.loop.entity.ExecuteParam;
import com.coze.loop.entity.ExecuteResult;
import java.util.HashMap;
import java.util.Map;
public class NonStreamingExecuteExample {
public static void main(String[] args) {
// 推荐使用 try-with-resources 模式,确保 client 在使用结束后自动关闭并释放资源
try (CozeLoopClient client = new CozeLoopClientBuilder().build()) {
// 1. 准备 Prompt 变量
// 变量名需与平台 Prompt 中定义的变量保持一致
Map variableVals = new HashMap<>();
variableVals.put("topic", "人工智能");
variableVals.put("user_request", "请解释一下什么是机器学习");
// 2. 构建执行参数
ExecuteParam param = ExecuteParam.builder()
.promptKey("your_prompt_key") // 必填:替换为实际的 Prompt Key
// .version("0.0.1") // 可选:指定具体版本号,不传默认使用最新发布版本
// .label("production") // 可选:通过环境标识指定版本(如 production/staging)
.variableVals(variableVals)
.build();
// 3. 发起非流式调用
System.out.println("正在进行非流式调用...");
ExecuteResult result = client.execute(param);
// 4. 处理响应结果
if (result != null) {
if (result.getMessage() != null) {
System.out.println("模型响应: " + result.getMessage().getContent());
}
System.out.println("结束原因: " + result.getFinishReason());
// 打印 Token 消耗统计
if (result.getUsage() != null) {
System.out.println("Token用量: "
+ "Prompt Tokens: " + result.getUsage().getPromptTokens()
+ ", Completion Tokens: " + result.getUsage().getCompletionTokens());
}
}
} catch (Exception e) {
System.err.println("调用失败: " + e.getMessage());
e.printStackTrace();
}
}
}
使用 client.executeStreaming(param) 方法发起请求,返回 StreamReader。通过循环调用 recv() 方法逐块获取增量内容,直至返回 null 标识流结束。
import com.coze.loop.client.CozeLoopClient;
import com.coze.loop.client.CozeLoopClientBuilder;
import com.coze.loop.entity.ExecuteParam;
import com.coze.loop.entity.ExecuteResult;
import com.coze.loop.stream.StreamReader;
import java.util.HashMap;
import java.util.Map;
public class StreamingExecuteExample {
public static void main(String[] args) {
// 使用 try-with-resources 自动管理客户端生命周期
try (CozeLoopClient client = new CozeLoopClientBuilder().build()) {
// 1. 构造执行参数
Map variableVals = new HashMap<>();
variableVals.put("topic", "人工智能");
variableVals.put("user_request", "请解释一下什么是机器学习");
ExecuteParam param = ExecuteParam.builder()
.promptKey("your_prompt_key") // 替换为你的 Prompt Key
.variableVals(variableVals)
.build();
// 2. 发起流式调用
System.out.println("正在进行流式调用...");
// StreamReader 也支持 try-with-resources,确保流被正确关闭
try (StreamReader streamReader = client.executeStreaming(param)) {
ExecuteResult result;
// 3. 循环接收数据块
while ((result = streamReader.recv()) != null) {
// 实时打印增量内容
if (result.getMessage() != null && result.getMessage().getContent() != null) {
System.out.print(result.getMessage().getContent());
}
// 处理流结束信号
if (result.getFinishReason() != null) {
System.out.println("\n结束原因: " + result.getFinishReason());
}
// 统计信息通常在最后一个数据块中返回
if (result.getUsage() != null) {
System.out.println("Token用量: "
+ "Prompt Tokens: " + result.getUsage().getPromptTokens()
+ ", Completion Tokens: " + result.getUsage().getCompletionTokens());
}
}
System.out.println("\n流式调用结束。");
}
} catch (Exception e) {
System.err.println("调用失败: " + e.getMessage());
e.printStackTrace();
}
}
}