现如今,自动化和集成已经成为任何技术驱动中不可或缺的一部分。拥有强大 API 的平台可以加速和简化的工作流程。而扣子平台(Coze)正提供了一种运行工作流的 API 接口,这让业务流程自动化变得极为简便。
只需要简单几个步骤就可实现使用。首先,开发者需要在扣子平台上获取扣子的 WORKFLOW_ID 和 PERSONAL_ACCESS_TOKEN(工作流需要自己搭建),没有尝试过搭建过程,文章结尾介绍。
扣子官方快速调用方法
下列展示其中一种方法:非流式调用
import os
from cozepy import COZE_CN_BASE_URL
# from cozepy import COZE_COM_BASE_URL
coze_api_token = '扣子个人访问令牌'
# 默认访问地址是 api.coze.com,但如果您需要访问 api.coze.cn,请使用 base_url 配置要访问的 API 端点
# 两者为不同的环境,token和工作流id不通用。
# coze_api_base = COZE_COM_BASE_URL
coze_api_base = COZE_CN_BASE_URL
from cozepy import Coze, TokenAuth, Message, ChatStatus, MessageContentType # noqa
coze = Coze(auth=TokenAuth(token=coze_api_token), base_url=coze_api_base)
# 在 Coze 中创建一个工作流实例,从网页链接中复制最后一个数字作为工作流的 ID。
workflow_id = '工作流id'
workflow = coze.workflows.runs.create(
workflow_id=workflow_id,
# 工作流开始节点的输入参数及取值,你可以在指定工作流的编排页面查看参数列表。
parameters={
"BOT_USER_INPUT": "如何评价《老友记》?"
}
# 其他可选参数,详情请参考 API 文档。
#bot_id = '', # 需要关联的 Bot ID。 部分工作流执行时需要指定关联的 Bot,例如存在数据库节点、变量节点等节点的工作流。
# app_id='', # 引用 workflow 的应用 ID
# is_async = False, # 是否异步执行,默认为 False。(仅限扣子专业版使用)
# ext ={
# #目前仅支持以下字段:
# latitude:String 类型,表示经度。
# longitude:String 类型,表示纬度。
# user_id:Integer 类型,表示用户 ID。
# }
)
print("workflow结果:\n", workflow) # 通过url可以查看执行过程
print("workflow.data结果:\n", workflow.data)
自定义调用方法
优势:
- 1.可以自选多种工作流方式,封装程度低。
- 2.无添加引用其他工作流id(若工作流中有引用),只需目标工作流id。
扣子执行工作流方式有多种,下面展示其中一种【同步执行工作流】,其他执行方式参考官方开发文档(curl) 转换成自己熟悉的语言(java,python等)即可。
import requests
import json
# API URL
url = 'https://api.coze.cn/v1/workflow/run'
# Headers
headers = {
'Authorization': 'Bearer pat_hfwkehfncaf****', # 替换为真实的token
'Content-Type': 'application/json'
}
# 请求数据
data = {
"workflow_id": "73664689170551*****", # 替换为实际的workflow_id
"parameters": {
"user_id": "12345",
"user_name": "George"
}
}
# 发送 POST 请求
response = requests.post(url, headers=headers, data=json.dumps(data))
# 输出响应内容
print(response.status_code)
print(response.json()) # 如果返回的是 JSON 数据
对官方原代码进一步处理,划分结构和异常处理,便于后续的维护和应用
import requests
import json
from requests.exceptions import RequestException
def http_request_structure(question_input):
"""发送聊天请求,封装了请求头、数据和异常处理"""
# 工作流id
WORKFLOW_ID = "工作流id"
# 扣子个人访问的Token值
PERSONAL_ACCESS_TOKEN = "扣子个人访问的Token值"
# 验证工作流ID和Token
if not WORKFLOW_ID and not PERSONAL_ACCESS_TOKEN:
raise ValueError("WORKFLOW_ID 或 PERSONAL_ACCESS_TOKEN 无效")
# 扣子的工作流请求路径
url = 'https://api.coze.cn/v1/workflow/run'
# 设置请求头
headers = {
'Authorization': f'Bearer {PERSONAL_ACCESS_TOKEN}',
'Content-Type': 'application/json'
}
# [设置请求体的](url) body 数据
body = {
"workflow_id": WORKFLOW_ID,
"parameters": {
"BOT_USER_INPUT": question_input,
}
}
return url, headers, body
def get_chat_messages(url, headers, body):
"""发送请求的通用函数,包含简化的异常处理"""
try:
# 调用通用函数发送请求
response = requests.post(url, headers=headers, json=body)
# 如果响应的 HTTP 状态码不是 2xx,抛出异常
response.raise_for_status()
# 尝试解析响应体为 JSON
return response.json()
except (RequestException, json.JSONDecodeError) as err:
# 捕获所有与请求相关的异常(HTTP 错误、网络问题、JSON 解析错误等)
print(f"请求发生错误:{err}")
except Exception as err:
# 捕获任何其他类型的异常
print(f"发生意外错误:{err}")
def request_process_result(question_input):
url, headers, body = http_request_structure(question_input)
response = get_chat_messages(url, headers, body)
return response
user_dialogue = "如何评价《老友记》?"
model_output = request_process_result(user_dialogue)
print(model_output)
其中请求体
body的parameters是工作流开始节点的输入参数及取值,你可以在指定工作流的编排页面查看参数列表。
这个 API 的核心在于
url 和 headers,url 指向扣子平台的工作流运行接口,而 headers 包含了需要的认证信息如 Bearer Token。请求体(body)则包括对应的工作流 ID 和输入参数,这些参数可以基于实际业务需求进行配置。
通过 requests 库发送 POST 请求,并适当处理任何可能的异常情况,如网络问题或JSON解析错误。这种模块化的请求设计不仅保持了代码的整洁性,而且增强了代码的健壮性,使得开发者可以更专注于优化业务逻辑而不是处理底层网络通信。
工作流简单搭建过程:
1.选择工作流搭建
2.工作流命名和描述
3.选择模型,选择模型输入的来源,功能作用(提示词),输出内容(可语言描述指定输出,但在编写提示词时要有体现)
4.结束模块指定输出,测试和发布