Gradio 接入 Coze 时,API 令牌必须保留在服务端。浏览器把用户消息发给 Gradio 后端,后端再调用 Coze,并为每个登录用户维护独立会话标识;前端不能直接携带长期令牌。 本文结合 Gradio ChatInterface 与 Coze 开放文档说明架构,未连接你的 Coze 应用和鉴权实测;具体端点、事件流、会话字段和发布权限以当前 Coze API 为准。
本篇验收要点:ChatInterface 的 Python 回调调用服务端 CozeClient,令牌从进程密钥配置读取,不返回到浏览器、日志或聊天记录。 服务端按已认证 user_id 保存 Coze conversation_id;新建、继续和清空会话都有明确状态,不能只按浏览器传入的 ID 信任归属。

开始前准备
- 已发布且允许 API 调用的 Coze 智能体
- 服务端安全保存的访问令牌
- Gradio Python 环境
- 用户身份与会话存储方案
按顺序搭建
- 按当前 Coze 文档完成一次服务端 API 调用,记录所需 bot_id、conversation_id、消息和完成状态;先别接 Gradio。
- 封装 CozeClient,只返回标准化 result、conversation_id、status 和 error;令牌通过环境或密钥服务读取。
- 建立 Gradio ChatInterface 回调,输入 message 和 history,服务端从登录会话取得 user_id 并查找对应 conversation_id。
- 处理流式或轮询完成:只把已确认的回答文本返回,超时和远端错误显示未完成,不重复创建同一消息。
- 用两个测试用户交叉对话、刷新页面、清空会话和模拟 API 失败,确认历史与会话不会串用。
可复制的最小示例
下面只展示服务边界,不包含会变化的 Coze 端点字段:
def chat(message, history, request):
user_id = authenticated_user(request)
conversation_id = session_store.get(user_id)
result = coze_client.send(
message=message,
conversation_id=conversation_id,
request_id=new_request_id(),
)
if not result.ok:
return "消息未完成:请稍后重试"
session_store.set(user_id, result.conversation_id)
return result.text
怎样验收结果
验证标准是浏览器网络与页面源码没有长期令牌,两个用户的 conversation_id 不交叉,刷新后按产品设计恢复或新建会话,Coze 失败时页面不显示伪造回答且同一 request_id 不重复提交。
- 令牌只在服务端
- 会话按已认证用户归属
- 远端失败返回明确状态
- 两个用户并发测试不串历史
常见失败与处理
- 前端出现令牌:立即撤销并改为服务端代理。
- 刷新后对话丢失:明确持久化策略并保存 conversation_id。
- 回答重复:为消息建立 request_id 和发送状态,未知结果先查询。
读者下一步是先在纯 Python 后端跑通一次 Coze 调用并标准化错误,再把该函数接到 Gradio ChatInterface。
相关问答
可以把 Coze Token 写在 JavaScript 里吗?
不可以。浏览器代码和网络请求对用户可见,长期令牌必须放在服务端。
Gradio history 能直接当 Coze 会话吗?
两者数据结构和归属不同;应显式保存 Coze conversation_id,并按需要转换展示历史。
官方资料与适用边界
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/32490.html