对于Coze—AI:SDK的解析
开篇介绍:
hello 大家,本篇博客又是一个比较轻松的内容,哈哈,那么在本篇博客中,我们就来学习一下Coze—AI中的SDK。
一、先搞懂:为什么 SDK 是新手的 “救命稻草”?
在正式讲 Coze SDK 之前,我们先解决一个核心问题:既然已经有 API 了,为什么还要学 SDK?
1.1 什么是 SDK?(麻婆豆腐式通俗解释)
SDK(Software Development Kit,软件开发工具包),本质是平台方为开发者准备的 “一站式懒人工具包”:
| 场景 | API(应用程序接口) | SDK(软件开发工具包) |
|---|---|---|
| 类比 | 麻婆豆腐的 “详细菜谱” | 麻婆豆腐的 “预制料理包” |
| 你需要做的事 | 1. 自己买豆腐、牛肉末、豆瓣酱等所有原料;2. 自己切豆腐、剁豆豉、焙香花椒并磨粉;3. 严格按步骤控制火候、勾芡次数;4. 全程自己处理 “炒糊了”“味道淡了” 等问题 | 1. 打开料理包,里面有切好焯水的豆腐、配好比例的酱料;2. 按 3 步简单操作(热锅倒油→炒酱料→煮豆腐);3. 无需关心调料比例、火候控制,料理包已优化;4. 几乎零失败,新手也能做出大师级味道 |
| 对应开发场景 | 1. 自己写 HTTP 请求代码;2. 手动配置请求头(Authorization/Content-Type);3. 自己解析 JSON 响应、处理异常;4. 反复调试参数格式、令牌权限 | 1. 导入 SDK 库,调用现成函数;2. 无需关心请求头、URL 拼接;3. SDK 自动解析响应、封装异常;4. 一行代码调用智能体聊天、工作流执行 |


简单说:API 是 “原材料 + 说明书”,需要你全程手动操作;SDK 是 “半成品 + 简易指南”,把最复杂的环节都封装好了,你只需要关注核心逻辑。
1.2 Coze API vs Coze SDK:新手该选谁?
我用表格对比一下两者的核心差异,看完就知道为什么 SDK 是首选:
| 对比维度 | Coze API | Coze SDK(cozepy) |
|---|---|---|
| 代码量 | 调用一次聊天需要写 30 + 行代码(请求头、参数、响应解析) | 调用一次聊天只需 5-10 行代码(导入库→初始化→调函数) |
| 学习成本 | 需要懂 HTTP 请求、JSON 解析、异常处理 | 只需懂 Python 基础语法,会调用函数即可 |
| 出错概率 | 高(容易漏写 Bearer、参数格式错误、响应解析出错) | 低(SDK 封装了所有格式校验,只传核心参数) |
| 维护成本 | 高(换功能要重写请求逻辑) | 低(换功能只需调用不同的 SDK 函数) |
| 新手友好度 | 极低(全是细节坑) | 极高(开箱即用,无需关注底层) |
1.3 Coze SDK 能做什么?
Coze Python SDK(cozepy)几乎封装了 Coze 平台的所有核心能力,你能想到的操作,SDK 都能一键实现:
- 工作空间管理:查看 / 获取工作空间列表、详情
- 智能体管理:查看智能体列表、获取智能体配置、修改智能体基本信息
- 会话交互:和智能体聊天(同步 / 流式)、查看会话记录、统计 Token 消耗
- 工作流管理:执行自定义工作流、查看工作流列表、获取工作流详情
- 其他能力:消息管理、文件上传、权限控制等
总结:如果你是新手,直接学 SDK 就够了;API 适合需要极致定制化的资深开发者。
二、前置准备:0 基础也能搞定的环境搭建
要使用 Coze Python SDK,首先得搭好 Python 开发环境 —— 这一步看似简单,但新手很容易踩坑,我会拆成 “傻瓜式步骤”,跟着做就行。
2.1 Python 安装:从下载到验证(Windows/macOS 通用)
Python 是 Coze SDK 的运行基础,我们选 Python 3.8 及以上版本(兼容 cozepy 所有功能)。
2.1.1 Windows 系统安装步骤
- 打开 Python 官网:https://www.python.org/downloads/
- 点击 “Download Python 3.11.x”(选 3.11 版本,稳定且兼容);
- 下载完成后,双击安装包,务必勾选 “Add Python 3.11 to PATH”(这是最关键的一步,避免后续配置环境变量);
- 点击 “Install Now”,等待安装完成;
- 验证是否安装成功:
- 按下 Win+R,输入 “cmd” 打开命令提示符;
- 输入
python --version(如果提示 “不是内部命令”,换成python3 --version); - 若显示 “Python 3.11.x”,说明安装成功。
2.1.2 macOS 系统安装步骤
- 方法 1(推荐):用 Homebrew 安装(先打开终端,输入
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"安装 Homebrew); - 终端输入
brew install python@3.11; - 验证:终端输入
python3 --version,显示版本号即成功。
2.1.3 新手避坑:Python 和 pip 的环境问题
- 问题 1:输入
python没反应,只有python3能用?解决方案:后续所有命令把python换成python3,pip换成pip3即可。 - 问题 2:pip 安装包提示 “权限不足”?解决方案:Windows 加
--user(如pip install --user cozepy);macOS 加sudo(如sudo pip3 install cozepy)。
2.2 PyCharm 安装:免费社区版就够用
PyCharm 是最适合新手的 Python 编辑器,自带代码提示、环境管理,比记事本 / VS Code 更友好。
- 打开 PyCharm 官网社区版下载页:https://www.jetbrains.com/pycharm/download/#section=windows
- 选择对应系统(Windows/macOS/Linux)下载;
- 安装步骤:
- Windows:双击安装包,一路 “Next”,勾选 “Create Desktop Shortcut”(创建桌面快捷方式);
- macOS:解压后拖到 “应用程序” 文件夹;
- 首次打开 PyCharm:
- 选择 “New Project”,新建一个项目;
- 项目名称填 “CozeSDK_Demo”,解释器选择刚才安装的 Python 3.11;
- 点击 “Create”,等待项目初始化完成。
2.3 环境验证:确保基础工具能用
在 PyCharm 中打开 “Terminal”(底部菜单栏),输入以下命令,验证 Python 和 pip 是否正常:
# 验证Python版本
python --version # Windows
# 或
python3 --version # macOS/Linux
# 验证pip版本
pip --version # Windows
# 或
pip3 --version # macOS/Linux
只要能显示版本号,说明环境没问题。
三、Coze SDK 核心安装与配置:3 步搞定
环境搭好后,我们开始安装 Coze SDK 并完成核心配置 —— 这是调用 SDK 的前提
3.1 第一步:安装 cozepy(Coze 官方 Python SDK)
cozepy 是 Coze 官方维护的 Python SDK,一行命令就能安装:
# Windows系统
pip install cozepy
# macOS/Linux系统
pip3 install cozepy
# 若安装速度慢,换国内镜像源
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple cozepy
验证安装是否成功
在 PyCharm 的 Terminal 中输入:
python -c "import cozepy; print('cozepy安装成功')"
如果输出 “cozepy 安装成功”,说明安装没问题;若提示 “ModuleNotFoundError”,则重新执行安装命令。
3.2 第二步:安装敏感信息保护工具(python-dotenv)
新手最容易犯的错:把 Coze 令牌直接写在代码里(比如api_token = "pat_xxxx"),一旦代码泄露,别人就能随意操作你的 Coze 账号。
我们用python-dotenv来管理敏感信息(比如令牌),把令牌存在独立的.env文件里,代码里只读取变量,不硬编码。
安装命令:
# Windows
pip install python-dotenv
# macOS/Linux
pip3 install python-dotenv
3.3 第三步:获取 Coze 个人访问令牌(PAT)
SDK 的所有调用都需要令牌(相当于 “登录密码”),新手优先用个人访问令牌(PAT),步骤如下:
- 打开 Coze 令牌管理页面:https://www.coze.cn/open/oauth/pats(先登录你的 Coze 账号);
- 点击 “添加” 按钮,填写令牌信息:
- 令牌名称:随便填(比如 “CozeSDK 测试令牌”);
- 过期时间:选 7 天(短期更安全,测试用);
- 权限:全勾选(测试阶段不用纠结,正式环境按需勾选);
- 访问工作空间:勾选你要操作的工作空间;
- 点击 “生成”,此时会弹出一串以
pat_开头的字符(比如pat_xzio1K9Lr55oDO3WT5jNj77UpbtuArvdibldjcUKdcRd3QVSgS7XBWr4lXQWTnEB); - 立刻复制并保存!这个令牌只显示一次,丢了就找不回来了。
3.4 第四步:配置.env 文件(保护令牌)
在 PyCharm 的项目根目录下,新建一个名为.env的文件(注意开头有个点),步骤:
- 右键项目根目录→New→File;
- 文件名输入
.env(Windows 用户注意:如果提示 “必须输入文件名”,先输入env,创建后重命名为.env,并关闭文件扩展名隐藏); - 在
.env文件中写入:
# Coze API令牌(替换成你自己的PAT)
COZE_API_TOKEN=pat_xzio1K9Lr55oDO3WT5jNj77UpbtuArvdibldjcUKdcRd3QVSgS7XBWr4lXQWTnEB
至此,Coze SDK 的安装和配置就完成了 —— 接下来我们进入实战环节,用 SDK 调用 Coze 的核心功能。
四、Coze SDK 核心功能实战:从简单到复杂
4.1 基础功能:查看工作空间列表(验证 SDK 是否配置成功)
工作空间是 Coze 的核心组织单元,所有智能体、工作流都归属于某个工作空间。我们先调用 SDK 查看工作空间列表,验证令牌和配置是否正确。
4.1.1 完整代码示例
# 1. 导入必要的库
import os
from cozepy import Coze, TokenAuth, COZE_CN_BASE_URL
from dotenv import load_dotenv
# 2. 加载.env文件中的环境变量(读取令牌)
load_dotenv() # 会自动读取项目根目录的.env文件
# 3. 定义函数:获取工作空间列表
def get_coze_workspaces():
"""
调用Coze SDK获取工作空间列表
"""
# 从环境变量中读取令牌(避免硬编码)
api_token = os.environ.get("COZE_API_TOKEN")
# 校验令牌是否存在
if not api_token:
print("❌ 错误:未找到Coze令牌,请检查.env文件是否配置正确")
return
try:
# 4. 初始化Coze客户端(核心步骤)
coze_client = Coze(
auth=TokenAuth(token=api_token), # 传入令牌认证
base_url=COZE_CN_BASE_URL # 指定国内版Coze的域名(固定值)
)
# 5. 调用SDK函数获取工作空间列表
workspaces = coze_client.workspaces.list()
# 6. 处理返回结果(新手友好的格式化输出)
print("✅ 成功获取工作空间列表:")
print("-" * 60)
# 判断返回结果是否有items属性(SDK返回的是分页对象)
if hasattr(workspaces, "items"):
for idx, ws in enumerate(workspaces.items, 1):
print(f"[{idx}] 工作空间名称:{ws.name}")
print(f" 工作空间ID:{ws.id}")
print(f" 创建时间:{ws.created_at}")
print(f" 成员数量:{ws.member_count}")
print("-" * 60)
else:
print("⚠️ 未获取到工作空间数据")
except Exception as e:
# 捕获所有异常,方便新手排查问题
print(f"❌ 调用SDK失败:{str(e)}")
# 4. 主函数入口
if __name__ == "__main__":
get_coze_workspaces()
4.1.2 代码解释
import部分:导入 os(读取环境变量)、cozepy 核心类、load_dotenv(加载.env 文件);load_dotenv():自动读取.env文件中的变量,把COZE_API_TOKEN加载到系统环境中;os.environ.get("COZE_API_TOKEN"):从环境变量中读取令牌,避免硬编码;Coze()初始化:auth=TokenAuth(token=api_token):用令牌做身份认证,SDK 会自动处理 “Bearer + 令牌” 的格式,不用手动拼;base_url=COZE_CN_BASE_URL:指定国内版 Coze 的 API 域名(固定值,不用改);
coze_client.workspaces.list():调用 SDK 的工作空间列表接口,SDK 自动处理 HTTP 请求、响应解析;- 异常处理:捕获所有可能的错误(比如令牌无效、网络问题),并给出明确提示。
4.1.3 运行结果示例
✅ 成功获取工作空间列表:
------------------------------------------------------------
[1] 工作空间名称:我的第一个工作空间
工作空间ID:1234567890
创建时间:2025-10-01T12:00:00Z
成员数量:1
------------------------------------------------------------
[2] 工作空间名称:测试工作空间
工作空间ID:0987654321
创建时间:2025-11-01T10:00:00Z
成员数量:2
------------------------------------------------------------
4.1.4 避坑点
- 坑 1:
.env文件路径不对→确保.env在项目根目录,和运行的 py 文件同级; - 坑 2:令牌错误→检查
.env中的令牌是否和 Coze 生成的一致,有没有多 / 少字符; - 坑 3:权限不足→生成令牌时勾选了对应的工作空间权限。
4.2 核心功能:和智能体聊天(同步模式)
和智能体聊天是 Coze 最常用的功能,SDK 把复杂的 API 调用封装成了简单的函数,新手只需传bot_id(智能体 ID)和问题即可。
4.2.1 先找智能体 ID
在调用前,你需要先获取智能体 ID:
- 打开 Coze 智能体开发页面:https://www.coze.cn/bot
- 点击你要调用的智能体,进入开发页面;
- 看浏览器地址栏,
bot=后面的数字就是智能体 ID(比如https://www.coze.cn/bot/editor?bot=7536152918114779162,ID 就是 7536152918114779162)。
4.2.2 完整代码示例
import os
from cozepy import Coze, TokenAuth, COZE_CN_BASE_URL
from dotenv import load_dotenv
# 加载环境变量
load_dotenv()
# 配置智能体信息(替换成你自己的)
BOT_ID = "7536152918114779162" # 智能体ID
USER_ID = "test_user_001" # 自定义用户ID(区分不同用户)
def chat_with_coze_bot(question: str):
"""
调用Coze SDK和智能体同步聊天(等智能体回复完再返回)
"""
api_token = os.environ.get("COZE_API_TOKEN")
if not api_token:
print("❌ 未配置Coze令牌")
return
try:
# 初始化客户端
coze_client = Coze(
auth=TokenAuth(token=api_token),
base_url=COZE_CN_BASE_URL
)
# 调用聊天接口
response = coze_client.chat.create(
bot_id=BOT_ID,
user_id=USER_ID,
stream=False, # 同步模式:False;流式模式:True
additional_messages=[
{
"role": "user", # 固定值:user(用户)
"content": question, # 用户的问题
"content_type": "text"# 固定值:text(文字)
}
]
)
# 解析回复结果
print(f"🤖 智能体回复:")
# 遍历回复消息
for msg in response.messages:
if msg.role == "assistant": # assistant代表智能体
print(msg.content)
# 可选:打印Token消耗
print(f"\n💡 Token消耗:输入{response.usage.input_count} | 输出{response.usage.output_count} | 总计{response.usage.token_count}")
except Exception as e:
print(f"❌ 聊天失败:{str(e)}")
if __name__ == "__main__":
# 输入你要问的问题
user_question = input("请输入你要问智能体的问题:")
chat_with_coze_bot(user_question)
4.2.3 代码解释
BOT_ID:替换成你的智能体 ID,这是唯一需要改的核心参数;coze_client.chat.create():SDK 的聊天接口,核心参数:bot_id:智能体 ID;user_id:自定义用户 ID(比如 “小明”“小红”,用于区分不同用户的会话);stream=False:同步模式,等智能体回复完所有内容再返回;additional_messages:用户的问题列表,格式固定;
- 解析结果:
response.messages包含所有聊天消息,role="assistant"的是智能体回复。
4.2.4 运行结果示例
请输入你要问智能体的问题:你好,介绍一下自己
🤖 智能体回复:
你好!我是基于Coze平台开发的智能助手,能为你解答各种问题、提供信息咨询和实用建议。我的能力来自Coze的大模型和自定义配置,如果你有任何想知道的,都可以尽管问~
💡 Token消耗:输入15 | 输出89 | 总计104
4.3 进阶功能:流式聊天(打字机效果)
同步模式需要等智能体回复完才显示内容,而流式模式(像 ChatGPT 一样)能 “边想边说”,体验更好 ——SDK 只需改一个参数就能实现。
4.3.1 完整代码示例
import os
from cozepy import Coze, TokenAuth, COZE_CN_BASE_URL
from dotenv import load_dotenv
load_dotenv()
BOT_ID = "7536152918114779162"
USER_ID = "test_user_001"
def stream_chat_with_bot(question: str):
"""
流式聊天:智能体边回复边显示(打字机效果)
"""
api_token = os.environ.get("COZE_API_TOKEN")
if not api_token:
print("❌ 未配置令牌")
return
try:
coze_client = Coze(
auth=TokenAuth(token=api_token),
base_url=COZE_CN_BASE_URL
)
# 流式调用(stream=True)
stream = coze_client.chat.create(
bot_id=BOT_ID,
user_id=USER_ID,
stream=True, # 开启流式模式
additional_messages=[
{"role": "user", "content": question, "content_type": "text"}
]
)
# 处理流式响应(逐行打印)
print(f"🤖 智能体回复(流式):")
full_content = ""
for chunk in stream:
if chunk.event == "message":
# 拼接流式内容
content = chunk.data.content or ""
full_content += content
# 不换行打印,模拟打字机
print(content, end="", flush=True)
# 打印Token消耗(最后获取)
print(f"\n\n💡 Token消耗:{chunk.data.usage.token_count}")
except Exception as e:
print(f"❌ 流式聊天失败:{str(e)}")
if __name__ == "__main__":
user_question = input("请输入问题:")
stream_chat_with_bot(user_question)
4.3.2 核心差异
stream=True:开启流式模式;- 处理响应时用
for chunk in stream:遍历流式返回的每一个片段; print(content, end="", flush=True):不换行打印,实现打字机效果。
4.4 实用功能:执行 Coze 工作流
如果你在 Coze 上创建了自定义工作流(比如翻译、文案生成、数据处理),SDK 也能一键调用,比 API 简单 10 倍。
4.4.1 先找工作流 ID
- 打开 Coze 工作流页面:https://www.coze.cn/workflow
- 点击你的工作流,进入编辑页面;
- 浏览器地址栏中
workflow=后面的数字就是工作流 ID。
4.4.2 完整代码示例
import os
import json
from cozepy import Coze, TokenAuth, COZE_CN_BASE_URL
from dotenv import load_dotenv
load_dotenv()
# 配置工作流信息(替换成你的)
WORKFLOW_ID = "8675309876543210" # 工作流ID
WORKSPACE_ID = "1234567890" # 工作空间ID
def run_coze_workflow(input_content: str, target_lang: str = "英语"):
"""
调用Coze SDK执行自定义工作流(比如翻译工作流)
"""
api_token = os.environ.get("COZE_API_TOKEN")
if not api_token:
print("❌ 未配置令牌")
return
try:
coze_client = Coze(
auth=TokenAuth(token=api_token),
base_url=COZE_CN_BASE_URL
)
# 构造工作流输入参数(需转成JSON字符串)
parameters = json.dumps({
"content": input_content, # 工作流的输入参数名(和你定义的一致)
"language": target_lang # 工作流的输入参数名
})
# 执行工作流
response = coze_client.workflows.run(
workflow_id=WORKFLOW_ID,
workspace_id=WORKSPACE_ID,
parameters=parameters,
is_async=False # 同步执行
)
# 解析工作流结果
print(f"✅ 工作流执行成功!")
print(f"执行结果:{response.result}")
print(f"调试链接:{response.debug_url}") # 可在Coze查看执行详情
except Exception as e:
print(f"❌ 工作流执行失败:{str(e)}")
if __name__ == "__main__":
# 测试翻译工作流
content = input("请输入要翻译的文字:")
target_lang = input("请输入目标语言(比如英语/法语):")
run_coze_workflow(content, target_lang)
4.4.3 关键参数解释
parameters:工作流的输入参数,必须是 JSON 字符串(用json.dumps()转换);is_async=False:同步执行,等工作流完成后返回结果;如果是耗时较长的工作流,可设为True(异步执行);debug_url:Coze 提供的调试链接,点击可查看工作流的执行步骤、参数、输出,新手排查问题超有用。
4.5 管理功能:查看智能体列表与详情
如果你有多个智能体,可通过 SDK 批量查看智能体信息,比如名称、配置、发布状态等。
4.5.1 完整代码示例
import os
from cozepy import Coze, TokenAuth, COZE_CN_BASE_URL
from dotenv import load_dotenv
load_dotenv()
WORKSPACE_ID = "1234567890" # 工作空间ID
def get_bot_list_and_detail():
"""
查看工作空间内的智能体列表,并获取第一个智能体的详细配置
"""
api_token = os.environ.get("COZE_API_TOKEN")
if not api_token:
print("❌ 未配置令牌")
return
try:
coze_client = Coze(
auth=TokenAuth(token=api_token),
base_url=COZE_CN_BASE_URL
)
# 1. 获取智能体列表
bots = coze_client.bots.list(
workspace_id=WORKSPACE_ID,
publish_status="all" # all=全部,published_online=已发布,unpublished_draft=草稿
)
print("📋 智能体列表:")
print("-" * 80)
bot_ids = []
for idx, bot in enumerate(bots.items, 1):
bot_ids.append(bot.id)
print(f"[{idx}] 名称:{bot.name}")
print(f" ID:{bot.id}")
print(f" 状态:{'已发布' if bot.is_published else '草稿'}")
print(f" 描述:{bot.description or '无'}")
print("-" * 80)
# 2. 获取第一个智能体的详细配置
if bot_ids:
first_bot_id = bot_ids[0]
bot_detail = coze_client.bots.get(
bot_id=first_bot_id,
is_published=True # True=已发布版本,False=草稿版本
)
print(f"\n🔍 第一个智能体({bot_detail.name})的详细配置:")
print(f"使用模型:{bot_detail.model_info.model_name}")
print(f"温度参数(创意度):{bot_detail.model_info.temperature}")
print(f"上下文轮数:{bot_detail.model_info.context_round}")
print(f"最大回复字数:{bot_detail.model_info.max_tokens}")
print(f"\n提示词:\n{bot_detail.prompt_info.prompt[:200]}...") # 只显示前200字
except Exception as e:
print(f"❌ 获取智能体信息失败:{str(e)}")
if __name__ == "__main__":
get_bot_list_and_detail()
4.5.2 核心价值
- 批量管理智能体:不用手动在 Coze 页面一个个看;
- 查看智能体配置:比如模型类型、温度参数、提示词,方便批量调整;
- 区分发布状态:快速筛选已发布 / 草稿的智能体。
五、Coze SDK 进阶技巧:让代码更健壮
新手学会基础调用后,还需要掌握一些进阶技巧,让代码更稳定、更易维护。
5.1 优雅的异常处理:捕获特定错误
基础的Exception捕获太笼统,我们可以捕获 SDK 的特定异常(或按错误类型分类),精准排查问题:
import os
from cozepy import Coze, TokenAuth, COZE_CN_BASE_URL
from cozepy.exceptions import AuthError, NotFoundError, PermissionError
from dotenv import load_dotenv
load_dotenv()
def robust_chat(question: str):
api_token = os.environ.get("COZE_API_TOKEN")
coze_client = Coze(auth=TokenAuth(api_token), base_url=COZE_CN_BASE_URL)
try:
response = coze_client.chat.create(
bot_id="7536152918114779162",
user_id="test_user",
stream=False,
additional_messages=[{"role": "user", "content": question, "content_type": "text"}]
)
print(response.messages[0].content)
except AuthError:
print("❌ 令牌无效或已过期,请重新生成PAT")
except NotFoundError:
print("❌ 智能体ID不存在,请检查ID是否正确")
except PermissionError:
print("❌ 令牌没有调用该智能体的权限,请重新生成令牌并勾选权限")
except TimeoutError:
print("❌ 请求超时,请检查网络或重试")
except Exception as e:
print(f"❌ 未知错误:{str(e)}")
if __name__ == "__main__":
robust_chat("你好")
5.2 超时设置与重试机制:应对网络波动
网络不稳定时,SDK 调用可能超时,我们可以设置超时时间,并添加重试机制(用tenacity库):
# 先安装tenacity
# pip install tenacity
import os
from tenacity import retry, stop_after_attempt, wait_fixed
from cozepy import Coze, TokenAuth, COZE_CN_BASE_URL
from dotenv import load_dotenv
load_dotenv()
# 初始化客户端时设置超时(单位:秒)
coze_client = Coze(
auth=TokenAuth(os.environ.get("COZE_API_TOKEN")),
base_url=COZE_CN_BASE_URL,
timeout=30 # 超时时间30秒
)
# 添加重试机制:失败后重试3次,每次间隔2秒
@retry(stop=stop_after_attempt(3), wait=wait_fixed(2))
def chat_with_retry(question: str):
response = coze_client.chat.create(
bot_id="7536152918114779162",
user_id="test_user",
stream=False,
additional_messages=[{"role": "user", "content": question, "content_type": "text"}]
)
return response
if __name__ == "__main__":
try:
result = chat_with_retry("你好")
print(result.messages[0].content)
except Exception as e:
print(f"❌ 重试3次后仍失败:{str(e)}")
5.3 日志记录:追踪 SDK 调用过程
添加日志可以方便排查问题,尤其是线上环境:
import os
import logging
from cozepy import Coze, TokenAuth, COZE_CN_BASE_URL
from dotenv import load_dotenv
# 配置日志
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(levelname)s - %(message)s",
handlers=[logging.FileHandler("coze_sdk.log"), logging.StreamHandler()]
)
logger = logging.getLogger(__name__)
load_dotenv()
def chat_with_log(question: str):
api_token = os.environ.get("COZE_API_TOKEN")
if not api_token:
logger.error("未配置Coze令牌")
return
try:
logger.info(f"开始调用智能体聊天,问题:{question}")
coze_client = Coze(auth=TokenAuth(api_token), base_url=COZE_CN_BASE_URL)
response = coze_client.chat.create(
bot_id="7536152918114779162",
user_id="test_user",
stream=False,
additional_messages=[{"role": "user", "content": question, "content_type": "text"}]
)
logger.info(f"聊天成功,Token消耗:{response.usage.token_count}")
print(response.messages[0].content)
except Exception as e:
logger.error(f"聊天失败:{str(e)}")
if __name__ == "__main__":
chat_with_log("你好")
日志会同时输出到控制台和coze_sdk.log文件,方便后续查看。
六、Coze SDK 常见问题与避坑指南
新手使用 SDK 时,难免会遇到各种问题,我整理了最常见的 10 个问题及解决方案:
6.1 安装类问题
| 问题现象 | 原因 | 解决方案 |
|---|---|---|
ModuleNotFoundError: No module named 'cozepy' | cozepy 未安装成功,或安装到了其他 Python 环境 | 1. 重新执行pip install cozepy;2. 检查 PyCharm 的解释器是否和安装 cozepy 的 Python 一致;3. 用pip show cozepy查看安装路径,确认解释器能找到 |
| 安装 cozepy 时提示 “权限不足” | 系统权限限制 | 1. Windows:pip install --user cozepy;2. macOS/Linux:sudo pip3 install cozepy |
| 安装速度极慢 | 网络问题,默认镜像源在国外 | 换国内镜像源:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple cozepy |
6.2 配置类问题
| 问题现象 | 原因 | 解决方案 |
|---|---|---|
os.environ.get("COZE_API_TOKEN")返回 None | .env 文件路径不对,或文件名错误 | 1. 确保.env 文件在项目根目录;2. 检查文件名是.env(有开头的点),不是env或.env.txt;3. 手动指定.env 路径:load_dotenv(dotenv_path="/path/to/.env") |
| 令牌无效 / 鉴权失败 | 令牌错误、过期,或权限不足 | 1. 核对令牌是否和 Coze 生成的一致;2. 去 Coze 令牌页面查看是否过期;3. 重新生成令牌,勾选所有需要的权限 |
6.3 调用类问题
| 问题现象 | 原因 | 解决方案 |
|---|---|---|
| 智能体 ID 不存在 | ID 抄错,或智能体不属于当前工作空间 | 1. 重新从浏览器地址栏复制智能体 ID;2. 确认智能体所在的工作空间和令牌的工作空间一致 |
| 工作流执行失败:“工作流未发布” | 调用的工作流是草稿状态 | 打开 Coze 工作流页面,点击 “发布” 按钮 |
| 流式聊天解析失败 | 未处理流式响应的结束标志 | 参考 4.3 的代码,用for chunk in stream遍历,判断chunk.event |
| 请求超时 | 网络波动,或智能体 / 工作流执行耗时过长 | 1. 设置超时时间(timeout=30);2. 添加重试机制;3. 检查智能体 / 工作流是否有耗时操作 |
七、实战项目:搭建自己的命令行 AI 聊天机器人
学完所有知识点后,我们整合一下,搭建一个简单但实用的命令行 AI 聊天机器人 —— 这个项目包含了 SDK 的核心用法,可以直接复用。
7.1 项目需求
- 支持和 Coze 智能体实时聊天(流式模式);
- 支持查看聊天记录的 Token 消耗;
- 支持退出聊天功能;
- 完善的异常处理和日志记录。
7.2 项目结构
CozeSDK_Demo/
├── .env # 令牌配置文件
├── coze_chat_bot.py # 主程序
└── coze_sdk.log # 日志文件(自动生成)
7.3 完整代码(coze_chat_bot.py)
import os
import logging
from dotenv import load_dotenv
from cozepy import Coze, TokenAuth, COZE_CN_BASE_URL
from cozepy.exceptions import AuthError, NotFoundError, PermissionError
# ---------------------- 1. 配置日志 ----------------------
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(levelname)s - %(message)s",
handlers=[
logging.FileHandler("coze_sdk.log", encoding="utf-8"),
logging.StreamHandler()
]
)
logger = logging.getLogger(__name__)
# ---------------------- 2. 加载配置 ----------------------
load_dotenv()
API_TOKEN = os.environ.get("COZE_API_TOKEN")
BOT_ID = os.environ.get("COZE_BOT_ID") # 可以把BOT_ID也放到.env里
USER_ID = "cli_chat_user"
# 校验配置
if not API_TOKEN or not BOT_ID:
logger.error("请在.env文件中配置COZE_API_TOKEN和COZE_BOT_ID")
exit(1)
# ---------------------- 3. 初始化Coze客户端 ----------------------
try:
coze_client = Coze(
auth=TokenAuth(token=API_TOKEN),
base_url=COZE_CN_BASE_URL,
timeout=30
)
logger.info("Coze客户端初始化成功")
except Exception as e:
logger.error(f"Coze客户端初始化失败:{str(e)}")
exit(1)
# ---------------------- 4. 核心聊天函数 ----------------------
def stream_chat(question: str):
"""流式聊天函数"""
try:
logger.info(f"用户提问:{question}")
# 调用SDK流式聊天接口
stream = coze_client.chat.create(
bot_id=BOT_ID,
user_id=USER_ID,
stream=True,
additional_messages=[
{"role": "user", "content": question, "content_type": "text"}
]
)
# 处理流式响应
print("\n🤖 智能体回复:")
full_content = ""
token_count = 0
for chunk in stream:
if chunk.event == "message":
content = chunk.data.content or ""
full_content += content
print(content, end="", flush=True)
# 获取Token消耗
if chunk.data and hasattr(chunk.data, "usage"):
token_count = chunk.data.usage.token_count
print(f"\n💡 本次Token消耗:{token_count}")
logger.info(f"智能体回复:{full_content[:50]}... | Token消耗:{token_count}")
return True
except AuthError:
logger.error("令牌无效或已过期")
print("❌ 错误:令牌无效或已过期,请重新生成PAT")
except NotFoundError:
logger.error("智能体ID不存在")
print("❌ 错误:智能体ID不存在,请检查配置")
except PermissionError:
logger.error("令牌无权限调用该智能体")
print("❌ 错误:令牌没有调用该智能体的权限,请重新生成令牌")
except TimeoutError:
logger.error("请求超时")
print("❌ 错误:请求超时,请检查网络或重试")
except Exception as e:
logger.error(f"聊天失败:{str(e)}")
print(f"❌ 错误:{str(e)}")
return False
# ---------------------- 5. 主程序入口 ----------------------
def main():
print("=" * 60)
print("🎉 Coze AI命令行聊天机器人(输入'退出'结束聊天)")
print("=" * 60)
while True:
# 获取用户输入
user_input = input("\n请输入你的问题:").strip()
if user_input.lower() in ["退出", "exit", "quit"]:
logger.info("用户退出聊天")
print("👋 再见!")
break
if not user_input:
print("⚠️ 请输入有效问题")
continue
# 调用聊天函数
stream_chat(user_input)
if __name__ == "__main__":
main()
7.4 .env 文件配置
# Coze令牌
COZE_API_TOKEN=pat_xzio1K9Lr55oDO3WT5jNj77UpbtuArvdibldjcUKdcRd3QVSgS7XBWr4lXQWTnEB
# 智能体ID
COZE_BOT_ID=7536152918114779162
7.5 运行效果
============================================================
🎉 Coze AI命令行聊天机器人(输入'退出'结束聊天)
============================================================
请输入你的问题:你好,介绍一下Coze
🤖 智能体回复:
Coze(扣子)是字节跳动推出的一站式AI开发平台,无需复杂的编程能力,就能快速创建智能体、工作流等AI应用。你可以通过可视化界面配置提示词、调用工具、设计工作流,还能通过API/SDK将智能体集成到自己的产品中,覆盖客服、创作、数据分析等多个场景~
💡 本次Token消耗:128
请输入你的问题:退出
👋 再见!
八、总结与展望
8.1 核心知识点回顾
- SDK 的本质:是平台封装好的 “懒人工具包”,比 API 更适合新手,无需关注底层 HTTP 请求;
- Coze SDK 核心步骤:安装 cozepy→获取 PAT 令牌→配置.env 文件→初始化 Coze 客户端→调用 SDK 函数;
- 核心功能:工作空间管理、智能体聊天(同步 / 流式)、工作流执行、智能体管理;
- 进阶技巧:异常处理、超时设置、重试机制、日志记录,让代码更健壮;
- 避坑关键:令牌要保护(不硬编码)、ID 要核对(从地址栏复制)、权限要勾选(生成令牌时)。
8.2 后续学习方向
- 异步调用:对于耗时较长的工作流,学习 SDK 的异步调用方式;
- 工具调用:通过 SDK 让智能体调用自定义工具(比如天气 API、数据库查询);
- 批量操作:用 SDK 批量发布 / 修改智能体、导出聊天记录;
- 集成到 Web 应用:结合 FastAPI/Flask,把 Coze SDK 集成到 Web 应用中,搭建自己的 AI 网站。
结语
写到这里,这趟 “轻松版” Coze SDK 学习之旅也该收尾了。回头看会发现,我们从头到尾都没绕过复杂的技术术语,也没让你死记硬背任何底层原理 —— 因为 SDK 的本质,就是字节把繁琐的 API 调用 “打包” 成了新手也能上手的 “懒人工具”。
你不用懂 HTTP 请求怎么构造,不用管 JSON 怎么解析,甚至不用纠结 “Bearer” 前缀该怎么加,只需要做好三件事:装对环境、护好令牌、调对函数,就能把 Coze 的 AI 能力握在手里。就像我们最后做的命令行聊天机器人,几行核心代码,就能实现和智能体的实时对话,这就是 SDK 最核心的价值:把 “怎么实现” 的复杂问题,变成 “我要做什么” 的简单选择。
不用怕自己是 Python 新手,也不用纠结代码写得够不够 “专业”。技术的学习从来不是 “一步到位”,而是 “先跑起来,再慢慢优化”:今天能跑通 “查看工作空间”,明天能调通 “流式聊天”,后天能执行自己做的翻译工作流 —— 每一个能实际运行的小案例,都是比背会一百个函数更重要的收获。
Coze SDK 给我们打开的,不只是 “调用 AI” 的入口,更是 “定制 AI” 的可能性:你可以把它集成到自己的小程序里做智能客服,也可以写个脚本批量处理文本,甚至给团队搭个专属的 AI 助手 —— 这些听起来复杂的事,用 SDK 来做,其实都是 “调函数” 的简单延伸。
最后想和你说:学习本就该是轻松的,尤其是面对 AI 这样的新事物。不用怕试错,不用追求 “一口吃成胖子”,哪怕今天只学会了一个coze_client.chat.create(),只要能用上、能解决你一个小问题,这趟学习就有了意义。
不妨现在就打开 PyCharm,把我们的示例代码里的 ID 换成你自己的,问智能体一个你真正关心的问题 —— 当你看到屏幕上跳出智能体的回复时,会发现:原来把 AI 能力变成自己的工具,真的就这么简单。
期待你用 Coze SDK 做出第一个属于自己的 AI 小应用,也期待你在使用中慢慢发现更多有趣的玩法。毕竟,技术的魅力从来不是掌握多少知识点,而是用它解决多少实际问题。祝你玩得开心,也祝你在 AI 开发的路上,一直能保持这份 “轻松学、大胆试” 的心态~
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)