coze-api
npx skills add https://github.com/smallnest/goskills --skill coze-api
Agent 安装分布
Skill 文档
Coze API éæ Skill
æ£å(Coze)æ¯åèè·³å¨æ¨åºç AI æºè½ä½å¼åå¹³å°,æ¬ Skill æä¾å®æ´ç Coze API è°ç¨æåã
æ ¸å¿åè½
- å¯¹è¯ API (Chat API) – 䏿ºè½ä½è¿è¡å¯¹è¯
- 工使µ API (Workflow API) – æ§è¡å·¥ä½æµ
- æ¶æ¯ç®¡ç – æ¥è¯¢å¯¹è¯ç¶æåæ¶æ¯å表
å¿«éå¼å§
1. åå¤å·¥ä½
å¨ä½¿ç¨ Coze API åéè¦å®æä»¥ä¸åå¤:
è·å访é®ä»¤ç (Personal Access Token)
- ç»å½ Coze å¹³å°: https://www.coze.cn
- è¿å ¥ä¸ªäººä¸å¿ â API 管ç
- å建个人访é®ä»¤ç(PAT)
- ä¿å令ç(ä» æ¾ç¤ºä¸æ¬¡)
è·å Bot ID
- è¿å ¥ Bot ç¼è¾é¡µé¢
- ä» URL ä¸è·å Bot ID
- ä¾å¦:
https://www.coze.cn/space/123/bot/7348293334 - Bot ID 为:
7348293334
- ä¾å¦:
åå¸ Bot 为 API æå¡
- å¨ Bot 页é¢ç¹å»”å帔
- éæ©”Bot as API”
- çå¾ å®¡æ ¸éè¿
2. API åºç¡ä¿¡æ¯
API åºç¡ URL
- å½å
ç:
https://api.coze.cn - API çæ¬: v3(æ¨è)
è®¤è¯æ¹å¼
Authorization: Bearer {YOUR_PAT_TOKEN}
Content-Type: application/json
使ç¨éå¶
- åºç¡ç: æ¯è´¦å· 100 次 API è°ç¨(䏿¬¡æ§)
- ä¸ä¸ç: æ éå¶,æ Token æ¶è计费
å¯¹è¯ API (Chat API)
éæµå¼å¯¹è¯
åèµ·ä¸æ¬¡å®æ´å¯¹è¯,çå¾ å®æ´ç»æåè¿åã
API 端ç¹
POST https://api.coze.cn/v3/chat
Python 示ä¾ä»£ç
import requests
import json
API_URL = "https://api.coze.cn/v3/chat"
RETRIEVE_URL = "https://api.coze.cn/v3/chat/retrieve"
MESSAGE_LIST_URL = "https://api.coze.cn/v3/chat/message/list"
# é
ç½®åæ°
PAT_TOKEN = "YOUR_PAT_TOKEN"
BOT_ID = "YOUR_BOT_ID"
USER_ID = "unique_user_id"
def send_message(message):
"""å起对è¯"""
headers = {
"Authorization": f"Bearer {PAT_TOKEN}",
"Content-Type": "application/json"
}
data = {
"bot_id": BOT_ID,
"user_id": USER_ID,
"stream": False,
"auto_save_history": True,
"additional_messages": [
{
"role": "user",
"content": message,
"content_type": "text"
}
]
}
response = requests.post(API_URL, headers=headers, json=data)
return response.json()
def check_status(conversation_id, chat_id):
"""æ¥è¯¢å¯¹è¯ç¶æ"""
headers = {
"Authorization": f"Bearer {PAT_TOKEN}",
"Content-Type": "application/json"
}
params = {
"conversation_id": conversation_id,
"chat_id": chat_id
}
response = requests.get(RETRIEVE_URL, headers=headers, params=params)
return response.json()
def get_messages(conversation_id, chat_id):
"""è·åå¯¹è¯æ¶æ¯"""
headers = {
"Authorization": f"Bearer {PAT_TOKEN}",
"Content-Type": "application/json"
}
params = {
"conversation_id": conversation_id,
"chat_id": chat_id
}
response = requests.get(MESSAGE_LIST_URL, headers=headers, params=params)
return response.json()
# 使ç¨ç¤ºä¾
result = send_message("ä½ å¥½,请ä»ç»ä¸ä¸èªå·±")
print(json.dumps(result, ensure_ascii=False, indent=2))
æµå¼å¯¹è¯
宿¶æ¥æ¶ AI åå¤,类似æåæºææã
Python 示ä¾ä»£ç
import requests
import json
def stream_chat(message):
"""æµå¼å¯¹è¯"""
headers = {
"Authorization": f"Bearer {PAT_TOKEN}",
"Content-Type": "application/json"
}
data = {
"bot_id": BOT_ID,
"user_id": USER_ID,
"stream": True,
"auto_save_history": False, # æµå¼æ¶å¿
须为 False
"additional_messages": [
{
"role": "user",
"content": message,
"content_type": "text"
}
]
}
response = requests.post(API_URL, headers=headers, json=data, stream=True)
# å¤çæµå¼ååº
for line in response.iter_lines():
if line:
line_str = line.decode('utf-8')
# è·³è¿é data è¡
if not line_str.startswith('data:'):
continue
# æå JSON æ°æ®
json_str = line_str.split('data:', 1)[1].strip()
try:
data = json.loads(json_str)
# å¤çæ¶æ¯äºä»¶
if data.get('event') == 'conversation.message.delta':
content = data.get('data', {}).get('content', '')
print(content, end='', flush=True)
# å¤ç宿äºä»¶
elif data.get('event') == 'conversation.message.completed':
print("\n[对è¯å®æ]")
except json.JSONDecodeError:
continue
# 使ç¨ç¤ºä¾
stream_chat("åä¸é¦å
³äºæ¥å¤©çè¯")
éè¦åæ°è¯´æ
请æ±åæ°
bot_id(å¿ å¡«): Bot çå¯ä¸æ è¯ç¬¦user_id(å¿ å¡«): ç¨æ·æ è¯ç¬¦,ç¨äºåºåä¸åç¨æ·stream(å¿ å¡«): æ¯å¦ä½¿ç¨æµå¼è¾åºtrue: æµå¼è¾åº,auto_save_historyå¿ é¡»ä¸ºfalsefalse: éæµå¼è¾åº,auto_save_historyå¿ é¡»ä¸ºtrue
auto_save_history: æ¯å¦èªå¨ä¿ååå²è®°å½additional_messages: æ¶æ¯æ°ç»role: è§è²,é常为 “user”content: æ¶æ¯å 容content_type: å 容类å,é常为 “text”
conversation_id(å¯é): å¯¹è¯ ID,ç¨äºç»§ç»ä¹åç对è¯
ååºå段
conversation_id: å¯¹è¯ IDchat_id: æ¬æ¬¡å¯¹è¯ç IDstatus: 对è¯ç¶æin_progress: å¤çä¸completed: 已宿failed: 失败
工使µ API
æ§è¡å·²åå¸ç工使µã
API 端ç¹
POST https://api.coze.cn/v3/workflows/run
Python 示ä¾ä»£ç
import requests
import json
WORKFLOW_RUN_URL = "https://api.coze.cn/v3/workflows/run"
def run_workflow(workflow_id, parameters):
"""æ§è¡å·¥ä½æµ"""
headers = {
"Authorization": f"Bearer {PAT_TOKEN}",
"Content-Type": "application/json"
}
data = {
"workflow_id": workflow_id,
"parameters": parameters
}
response = requests.post(WORKFLOW_RUN_URL, headers=headers, json=data)
return response.json()
# 使ç¨ç¤ºä¾
workflow_id = "73xxx47"
params = {
"input_text": "éè¦å¤ççææ¬",
"option": "é项A"
}
result = run_workflow(workflow_id, params)
print(json.dumps(result, ensure_ascii=False, indent=2))
宿´ç¤ºä¾: 轮询è·å对è¯ç»æ
éæµå¼å¯¹è¯éè¦è½®è¯¢æ¥è¯¢ç¶æ,ç´å°å¯¹è¯å®æã
import requests
import time
import json
def chat_with_polling(message, max_retries=30, interval=2):
"""
å起对è¯å¹¶è½®è¯¢è·åç»æ
Args:
message: ç¨æ·æ¶æ¯
max_retries: æå¤§éè¯æ¬¡æ°
interval: 轮询é´é(ç§)
"""
headers = {
"Authorization": f"Bearer {PAT_TOKEN}",
"Content-Type": "application/json"
}
# 1. å起对è¯
data = {
"bot_id": BOT_ID,
"user_id": USER_ID,
"stream": False,
"auto_save_history": True,
"additional_messages": [
{
"role": "user",
"content": message,
"content_type": "text"
}
]
}
response = requests.post(API_URL, headers=headers, json=data)
result = response.json()
if response.status_code != 200:
print(f"å起对è¯å¤±è´¥: {result}")
return None
conversation_id = result['data']['conversation_id']
chat_id = result['data']['id']
print(f"对è¯å·²å建: conversation_id={conversation_id}, chat_id={chat_id}")
# 2. 轮询æ¥è¯¢ç¶æ
retrieve_url = f"https://api.coze.cn/v3/chat/retrieve"
params = {
"conversation_id": conversation_id,
"chat_id": chat_id
}
for i in range(max_retries):
time.sleep(interval)
status_response = requests.get(retrieve_url, headers=headers, params=params)
status_data = status_response.json()
status = status_data['data']['status']
print(f"æ¥è¯¢ç¶æ [{i+1}/{max_retries}]: {status}")
if status == "completed":
# 3. è·åæ¶æ¯å表
message_url = f"https://api.coze.cn/v3/chat/message/list"
message_response = requests.get(message_url, headers=headers, params=params)
message_data = message_response.json()
# æå AI åå¤
messages = message_data['data']
for msg in messages:
if msg['role'] == 'assistant' and msg['type'] == 'answer':
print("\n=== AI åå¤ ===")
print(msg['content'])
return msg['content']
elif status == "failed":
print("对è¯å¤±è´¥")
return None
print("轮询è¶
æ¶")
return None
# 使ç¨ç¤ºä¾
response = chat_with_polling("ä»ç»ä¸ä¸äººå·¥æºè½çåå±åå²")
é误å¤ç
常è§é误ç
-
400– 请æ±åæ°é误- æ£æ¥
bot_idæ¯å¦æ£ç¡® - æ£æ¥
streamåauto_save_historyçç»åæ¯å¦æ£ç¡®
- æ£æ¥
-
401– 认è¯å¤±è´¥- æ£æ¥ PAT Token æ¯å¦æ£ç¡®
- æ£æ¥ Authorization å¤´æ ¼å¼æ¯å¦æ£ç¡®
-
403– æéä¸è¶³- æ£æ¥ Bot æ¯å¦å·²åå¸ä¸º API æå¡
- æ£æ¥è´¦å·æ¯å¦ææé访é®è¯¥ Bot
-
429– 请æ±é¢çéå¶- åºç¡çè¾¾å° 100 次éå¶
- éä½è¯·æ±é¢ç
-
500– æå¡å¨é误- ç¨åéè¯
é误å¤ç示ä¾
def safe_api_call(func, *args, **kwargs):
"""å®å
¨ç API è°ç¨"""
try:
result = func(*args, **kwargs)
return result
except requests.exceptions.RequestException as e:
print(f"请æ±é误: {e}")
return None
except json.JSONDecodeError as e:
print(f"JSON è§£æé误: {e}")
return None
except Exception as e:
print(f"æªç¥é误: {e}")
return None
æä½³å®è·µ
1. 管ç对è¯ä¸ä¸æ
ä½¿ç¨ conversation_id ç»´æå¤è½®å¯¹è¯:
def multi_turn_chat(conversation_id=None):
"""å¤è½®å¯¹è¯"""
data = {
"bot_id": BOT_ID,
"user_id": USER_ID,
"stream": False,
"auto_save_history": True,
"additional_messages": [
{
"role": "user",
"content": "ç»§ç»æä»¬ç对è¯",
"content_type": "text"
}
]
}
# 妿æ conversation_id,ç»§ç»ä¹åç对è¯
if conversation_id:
data["conversation_id"] = conversation_id
# ... åé请æ±
2. éæ©åéçååºæ¨¡å¼
-
éæµå¼ (
stream=False): éåéè¦å®æ´ç»æçåºæ¯- æ°æ®åæ
- æ¹éå¤ç
- API éæ
-
æµå¼ (
stream=True): éå交äºå¼åºæ¯- è天åºç¨
- 宿¶åé¦
- ç¨æ·ä½éªä¼å
3. åçè®¾ç½®è¶ æ¶
response = requests.post(
API_URL,
headers=headers,
json=data,
timeout=30 # 设置 30 ç§è¶
æ¶
)
4. 使ç¨èªå®ä¹åé
å¨å¯¹è¯ä¸ä¼ éä¸ä¸æä¿¡æ¯:
data = {
"bot_id": BOT_ID,
"user_id": USER_ID,
"stream": False,
"auto_save_history": True,
"additional_messages": [...],
"custom_variables": {
"user_name": "å¼ ä¸",
"company": "ABCå
¬å¸",
"department": "ææ¯é¨"
}
}
åèèµæ
- 宿¹ææ¡£: https://www.coze.cn/open/docs/developer_guides/coze_api_overview
- å¼åè å¹³å°: https://www.coze.cn/open/playground
- API åè: https://www.coze.cn/docs/developer_guides/chat_v3
注æäºé¡¹
- Token å®å ¨: ä¸è¦å¨ä»£ç ä¸ç¡¬ç¼ç PAT Token,使ç¨ç¯å¢åéæé ç½®æä»¶
- è´¹ç¨ç®¡ç: ä¸ä¸çæ Token æ¶è计费,注æçæ§ä½¿ç¨é
- çæ¬æ´æ°: API å¯è½æ´æ°,å»ºè®®å®ææ¥ç宿¹ææ¡£
- æµå¼éå¶: æµå¼æ¨¡å¼ä¸
auto_save_historyå¿ é¡»ä¸ºfalse - ç¨æ·æ è¯: 使ç¨å¯ä¸ç
user_idåºåä¸åç¨æ·,便äºè¿½è¸ªå管ç