打通系统边界:外部应用如何无缝调用 Coze 工作流?全指南来了

在Coze上搭建工作流很方便,你有没有想过将你做好的工作流用在外部系统中呢?比如:自己做 AI 相关的产品,自己搭一套大模型不现实,有没有什么办法直接调用 Coze 上搭建好的工作流呢?答案是"当然可以",本文就带你一步步实现外部系统调用 Coze 工作流。

创建测试工作流

创建一个用来测试的工作流,名字就叫test_api

工作流的内容,很简单,调用一下就输出当前的时间

发布工作流,继续下一步。

外部系统调用工作流

前面的测试工作流已经搭好了,接下来就是通过 Coze 提供的 API 来调用搭建好的工作流,参考下 Coze 的文档

如何查看文档,上图已经标出来了。调用 Coze API 的关键点是上图框出来的 token,那这个 token 怎么获取呢?继续看下文。

选择鉴权方式

查看鉴权方式方式相关文档,链接是:www.coze.cn/open/docs/d...,鉴权方式有 3 种,如下图:

这三种方式如何选择呢?官方给出了选择参考图

你可以根据这个参考图选择适合自己的鉴权类型。一般的话,都是用自己的服务器和 Coze API 进行交互的,选择OAuth JWT 授权比较合适

这里就以OAuth JWT 授权来介绍,看下如何授权。

OAuth JWT 授权

如何通过OAuth JWT 授权,文档:www.coze.cn/open/docs/d... 中有详细的说明。主要有下面几步

  1. 在扣子平台创建 OAuth 应用并完成授权。
  2. 应用程序通过公钥和私钥签署 JWT。
  3. 应用程序通过 API,获取访问令牌,具体请参见通过 JWT 获取 Oauth Access Token

第 1 步,参考官方文档进行设置就可以,需要注意的是要将私钥保存到本地,后面要用到。

第 2 步和第 3 步,合在一起看,直接看官方给出的示例代码,如下

java 复制代码
package example.auth;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;

import com.coze.openapi.client.auth.OAuthToken;
import com.coze.openapi.service.auth.JWTOAuth;
import com.coze.openapi.service.auth.JWTOAuthClient;
import com.coze.openapi.service.service.CozeAPI;

/*
This example is about how to use the service jwt oauth process to acquire user authorization.

Firstly, users need to access https://www.coze.com/open/oauth/apps. For the cn environment,
users need to access https://www.coze.cn/open/oauth/apps to create an OAuth App of the type
of Service application.
The specific creation process can be referred to in the document:
https://www.coze.com/docs/developer_guides/oauth_jwt. For the cn environment, it can be
accessed at https://www.coze.cn/docs/developer_guides/oauth_jwt.
After the creation is completed, the client ID, private key, and public key id, can be obtained.
For the client secret and public key id, users need to keep it securely to avoid leakage.
* */
public class JWTOAuthExample {

  public static void main(String[] args) {

    // The default access is api.coze.com, but if you need to access api.coze.cn,
    // please use base_url to configure the api endpoint to access
    String cozeAPIBase = System.getenv("COZE_API_BASE");
    if (cozeAPIBase == null || cozeAPIBase.isEmpty()) {
      cozeAPIBase = "api.coze.cn";
    }
    String jwtOauthClientID = System.getenv("COZE_JWT_OAUTH_CLIENT_ID");
    String jwtOauthPrivateKey = System.getenv("COZE_JWT_OAUTH_PRIVATE_KEY");
    String jwtOauthPrivateKeyFilePath = System.getenv("COZE_JWT_OAUTH_PRIVATE_KEY_FILE_PATH");
    String jwtOauthPublicKeyID = System.getenv("COZE_JWT_OAUTH_PUBLIC_KEY_ID");
    //    jwtOauthPublicKeyID+="123";
    JWTOAuthClient oauth = null;
    try {
      jwtOauthPrivateKey =
          new String(
              Files.readAllBytes(Paths.get(jwtOauthPrivateKeyFilePath)), StandardCharsets.UTF_8);
    } catch (IOException e) {
      e.printStackTrace();
    }

    /*
    The jwt oauth type requires using private to be able to issue a jwt token, and through
    the jwt token, apply for an access_token from the coze service. The sdk encapsulates
    this procedure, and only needs to use get_access_token to obtain the access_token under
    the jwt oauth process.
    Generate the authorization token
    The default ttl is 900s, and developers can customize the expiration time, which can be
    set up to 24 hours at most.
    * */
    try {
      oauth =
          new JWTOAuthClient.JWTOAuthBuilder()
              .clientID(jwtOauthClientID)
              .privateKey(jwtOauthPrivateKey)
              .publicKey(jwtOauthPublicKeyID)
              .baseURL(cozeAPIBase)
              .build();
    } catch (Exception e) {
      e.printStackTrace();
      return;
    }

    try {
      OAuthToken resp = oauth.getAccessToken();
      System.out.println(resp);
    } catch (Exception e) {
      e.printStackTrace();
    }
    /*
    The jwt oauth process does not support refreshing tokens. When the token expires,
    just directly call get_access_token to generate a new token.
    * */
    CozeAPI coze =
        new CozeAPI.Builder()
            .auth(JWTOAuth.builder().jwtClient(oauth).build())
            .baseURL(cozeAPIBase)
            .build();
    // you can also specify the scope and session for it
  }
}

上面的代码的作用就是获取鉴权需要的 token,token 获取成功后,就可以调用相关的 API 来执行工作流了。

外部调用API执行工作流

文章到这里已经获取到鉴权需要的 token 了,就可以直接调用 Coze 工作流了,我服务端使用的是 SpringBoot 框架,已经将代码整理好了,就直接看代码。先看下配置内容

介绍下这里的 1,2,3,4 是怎么来的。

  • 1:是创建 key 的时候生成的私钥文件,需要我们保存下来。
  • 2:就是上面👆创建 key 生成的公钥指纹。
  • 3:应用创建完成后生成的应用 ID。
  • 4:工作流 id,进入你自己工作流界面,链接最后的内容。

知道配置文件中的每个内容是怎么来的就可以了。

我已经将外部调用 Coze API执行工作流整理成了一个 Demo 项目,下载后,修改相关内容运行即可。

把项目运行起来,调用接口测试下,如下

成功获取工作流执行的结果。

搞定,收工。

结束语

不得不说有了 Coze 后,方便了很多,让一些没能力部署自己大模型的公司,也可以用上 AI 了。

相关推荐
互联网江湖9 小时前
千问闯关AI混沌期:阿里画靶,吴嘉张弓,马云射箭?
人工智能
AI品信智慧数智人9 小时前
景区AI伴游革新!山东品信数字人智能语音交互系统,重构文旅智慧体验✨
人工智能
大喵桑丶9 小时前
ZABBIX7二次开发AI监控数据调取杂记
大数据·人工智能·python
龙文浩_10 小时前
AI中NLP的注意力机制的计算公式解析
人工智能·pytorch·深度学习·神经网络·自然语言处理
北京软秦科技有限公司10 小时前
物流运输环境检测进入AI报告审核时代:IACheck如何重塑报告精准性与全流程质量把控?
大数据·人工智能
鬼先生_sir10 小时前
Spring AI Alibaba 用户使用手册
java·人工智能·springai
跟着狗蛋学安全10 小时前
Windows本地大语言模型部署
人工智能·语言模型·自然语言处理
视***间10 小时前
智视无界,一采倾城 —— 视程空间高性能影像采集卡,开启视觉采集全新时代
人工智能·边缘计算·采集卡·ai算力·视程空间·视频采集卡
橘子编程10 小时前
MindOS:你的AI第二大脑知识库
java·开发语言·人工智能·计算机网络·ai