助手
扣子 AI 帮助与支持
你好,我是 扣子 文档问答助手 🎉 你在阅读当前文档的过程中,无论对文档概念的解释,还是文档内容方面的疑问,都可以随时向我提问,我会全力为你解答
推荐问题
如何快速了解这个空间的核心内容?
有哪些近期更新的重点文档?
我应该从哪些文档开始阅读?
文档反馈

调用 Prompt

更新于: 2026-06-24 15:45:09

功能概述

扣子罗盘 Java SDK 提供了调用扣子罗盘平台已发布 Prompt 的能力。你可以根据业务需求,选择以下两种调用模式:

  • 非流式调用 (Non-Streaming):同步等待模型执行完成,一次性返回完整的响应结果。适用于对响应延迟不敏感或需要完整内容进行后续处理的场景。
  • 流式调用 (Streaming):建立长连接,实时分段接收模型生成的响应内容。适用于聊天机器人、实时生成等需要快速反馈的交互式场景,能显著提升用户体验。

前置条件

在集成 Prompt 调用功能前,请确保满足以下条件:

  • SDK 集成:项目已正确引入扣子罗盘 Java SDK 依赖。建议使用最新版本。
  • 鉴权配置:运行环境已配置必要的访问凭证:
    • COZELOOP_WORKSPACE_ID:目标工作空间 ID。
    • COZELOOP_API_TOKEN:拥有 executePrompt 权限的 API 令牌(PAT 或 OAuth Token)。
  • 资源准备:已在扣子罗盘平台完成 Prompt 的创建与调试,并至少提交了一个可用版本。请获取该 Prompt 的 Prompt Key 用于后续调用。

代码示例

以下示例展示了如何在 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();
        }
    }
}