近日,字节跳动正式推出“Coze扣子”AI Bot开发平台,也被外界形象地称为“字节版GPTs”。在技术层面“迟钝”了的字节跳动,似乎想在生态方面扳回一局。
2023年11月,OpenAI首届开发者大会上,比升级的GPT-4 Turbo更吸引眼球的,莫过于GPTs的发布了。根据当时的介绍,GPTs无需编程技巧,可以让用户用自己的自然语言来创建“个人版ChatGPT”,实现全程“0代码”开发。
用OpenAI CEO奥尔特曼的话说,每个人都可以定制自己的ChatGPT,从而让GPT成为一个家族。那时候,外界讨论,GPTs搭配GPT Store,很可能会在AI应用生态中诞生下一个苹果。
这一次,字节跳动不“迟钝”了。根据媒体的报道,2月1日,扣子正式上线。官网介绍,扣子是新一代一站式AI Bot开发平台,“只要你有想法,都可以用扣子快速、低门槛搭建专属于你的Chatbot,并一键发布到豆包、飞书、微信公众号等各个渠道”。
“问答”仍是目前的主流模式。根据官网的信息,无论是否有编程基础,都可以在扣子平台上快速搭建基于AI模型的各类问答Bot,从解决简单的问答到处理复杂逻辑的对话。
其他开发者做的Bot已上线扣子的Bot商店,共计30款,涵盖工具、娱乐、咨询、创意等类目,可以提供卡通头像生成、简历诊断、文案输出等能力。
北京商报记者以医疗领域进行尝试,仅用对话的形式描述了一个医疗报告解读的平台,大约30秒,扣子便生成了一个名为“医疗报告解读助手”的Bot。在预览与调试界面,用对话的形式询问指标的正常与否,大约5秒后即可得到相关回答。
此外,扣子还具有无限拓展的能力集、丰富的数据源等优势。以拓展能力为例,在内置插件方面,平台集成了超过60款各类型的插件,包括资讯阅读、旅游出行、效率办公、图片理解等API及多模态模型,可以直接将这些插件添加到Bot中,丰富Bot能力。与此同时,扣子平台也支持创建自定义插件。
大模型一年,应用逐渐成为新的关键词。就像百度创始人李彦宏反复强调的那样,卷AI原生应用才有价值,百模大战是资源浪费。而应用链接的下一个关键词,就是生态。
去年11月,GPTs发布。今年1月11日,GPT Store上线。根据OpenAI的数据,仅仅两个月的时间,GPT Store上已经诞生了超300万个GPTs。华西证券(7.360, 0.04, 0.55%)研报曾评价,类比App Store,GPT Store将成为OpenAI生态重要一环。
按照研报的说法,对初创公司来说,GPTs本身就是一个值得挖掘的AI应用项目;而对于现有的互联网应用来说,GPT Store是一个优质的流量入口,GPTs要实现复杂功能普遍需调用外部API,若现有App能充分利用GPTs的高智能、高灵活性,并与自身应用进行结合,有望为现有互联网生态注入新鲜血液,“AI+一切”已近在咫尺。
北京市社会科学院副研究员王鹏对北京商报记者提到,扣子的推出标志着字节跳动在AI领域的又一重要进展。这个平台降低了用户创建Chatbot的门槛,使得更多人能够参与到AI生态的建设中来,同时此举也能够展示字节跳动在AI领域的技术实力,有助于提升其在全球AI竞争中的地位。
生态是美好的目标,但在这之前,可能还有一道名叫“现实”的沟壑。香颂资本董事沈萌对北京商报记者分析称,生态是系统各组成部分能够实现有机、无缝、协作的联动,是有大量人员参与的良性、封闭且循环的系统,这其中不只包括用户,也包括大量有价值的开发者,否则就只能叫“产品矩阵”。
值得一提的是,GPT Store一上线,就出现了不少山寨、刷量和违禁内容,而山寨内容的泛滥也指向了创建GPTs门槛过低的情况。“扣子作为一个类似的平台,也有可能面临类似的情况。”在接受北京商报记者采访时,深度科技研究院院长张孝荣如此说道。
为应对这些问题,张孝荣认为,字节需要建立起严格的审核机制和规范,确保平台上的Chatbot质量和内容的合法性,同时加强对用户的监管和教育,提高用户的意识和素质,避免滥用和不当行为的发生。
而在沈萌看来,扣子可能不只会遇到GPTs会遇到的问题,还会遇到GPTs不会遇到的问题,“毕竟是GPT创造了GPTs,它比复制者更理解什么是GPT。没有掌握底层原理的一窝蜂现象,只有商业经营的一窝蜂”。
在那场全员会上,字节跳动CEO梁汝波直言,公司层面的半年度技术回顾,直到2023年才开始讨论GPT,而业内做得比较好的大模型创业公司都是在2018年至2021年创立的。
这句话整体概括出了字节跳动在AI领域的形象——低调与“迟到”。去年8月,字节跳动基于云雀大模型开发的AI聊天机器人(9.110, -0.04, -0.44%)“豆包”才开始公测,面向C端市场发力AI应用。在这之前,百度“文心一言”、阿里“通义千问”等类似的对话式大模型产品均已面世。
有媒体报道称,扣子由字节跳动新成立的AI部门Flow开发,对此北京商报记者联系了字节跳动进行求证,但未收到明确回复。扣子官网链接的企业为“北京春田知韵科技有限公司”,天眼查显示,该公司成立于2023年7月,由北京抖音信息服务有限公司100%持股。
2023年11月,有媒体报道称,字节跳动成立了一个专注于AI创新业务的新部门Flow,由字节跳动技术副总裁洪定坤担任技术负责人,字节大模型团队的负责人朱文佳担任业务负责人。
王鹏认为,在目前的竞争格局中,字节跳动已经成为全球AI领域的重要参与者之一。其人工智能业务的发展前景广阔,有望在未来几年内继续保持快速增长。在人工智能业务上,字节的优势在于其强大的技术实力、丰富的数据资源和广泛的应用场景;而劣势则可能在于其在某些领域的专业人才相对不足以及面临激烈的市场竞争。
字节“扣子”上线 AI聊天机器人升温前面分享了,小智 AI 如何接入 LLM:
低延迟小智AI服务端搭建-LLM篇
服务端统一采用 OpenAI 格式调用,虽然这是目前的最优解,能够兼容不同厂商的大模型,并通过 MCP 接入各种外部工具。
不过,缺陷也很明显:如果 LLM 的指令遵循不 OK,就会经常一本正经地胡说八道。
实测了以上 LLM,只有 deepseek-v3 和 glm-4-flash 能够 90% 以上成功调用 MCP,无论怎么刁难它。
没错,就这个免费的 glm-4-flash,在工具调用方面,相当出色!且延时低,非常适合拿来测试。
以上,所有 LLM,陪聊还行。
但凡要发挥点生产力,最好是接入 Agent (智能体)!
而提到 Agent,自然绕不开Coze/扣子。
因此,本文,来聊:
如何将Coze/扣子通过 API 形式,接入小智 AI。
https://www. coze.cn/
Coze/扣子 是字节出品的智能体搭建工具,相信关注笔者的朋友都不陌生。
Coze/扣子 极大降低了普通人使用AI的门槛。
如下,搭建一个陪伴型女友智能体,只需简单几步操作即可:
测试没问题后,点击右上角发布,注意勾选下方 API:
下面,我们重点聊聊如何调用 Coze 的 API。
API 文档: https://www. coze.cn/open/docs/devel oper_guides
个人免费版只有 100 次免费额度,勉强够测试用,因此要想使用 Coze 的 API,需付费到个人进阶版。
Coze 为了配合前端降低大家使用AI的门槛,后端做了大量工作,为此专门设计了一套独立的 API。
这套 API 不兼容 OpenAI 格式,因此要接入小智 AI 的服务端,需进行一番适配。
step 1: 申请访问令牌
前往:https://www.coze.cn/open/oauth/pats
添加新令牌,注意有效期,现在最多只有一个月了:
step 2: 获取 bot_id
智能体的搭建页面,URL 中 bot 参数后的数字就是bot_id。
例如 https://www.coze.cn/space/123/bot/7,bot_id 为。
会话(Conversation)是 Coze 中一个特有的概念:
所有的聊天必须在会话中进行,所以须先创建会话。
python 示例代码如下:
headers = {
'Authorization': 'Bearer pat_xxx',
} def create_conversation():
url = 'https://api.coze.cn/v1/conversation/create' data = { 'bot_id': '752' } response = requests.post(url, headers=headers, data=data) if response.status_code == 200: print(response.json()) conversation_id = response.json()['data']['id'] print(f'Conversation created with id: {conversation_id}')
非流式接口(stream: false),是异步的,它不会立即返回 LLM 的回复,而是:
先返回一个状态,再查询是否完成,最后获取结果。
因此,一次对话,需要三次请求:
step 1: 发起会话请求:只会返回一个 chatId
def send_nonstream():
# 不包含模型处理结果,只返回状态 url = 'https://api.coze.cn/v3/chat' params = {'conversation_id': ''} data = { 'bot_id': '752', 'user_id': '123', 'stream': False, 'additional_messages': [{'role': 'user', 'content': '你好', 'content_type': 'text'}], } response = requests.post(url, headers=headers, params=params, json=data) if response.status_code == 200: print(response.json()) data = response.json()['data'] chat_id = data['id'] print(f'Message sent with id: {chat_id}')
step 2: 查询是否完成:等待 status === ‘completed’
def chat_retrieve():
# 查看对话详情 url = 'https://api.coze.cn/v3/chat/retrieve' params = {'conversation_id': '', 'chat_id': ''} response = requests.get(url, headers=headers, params=params) if response.status_code == 200: print(response.json()) data = response.json()['data'] status = data['status'] # in_progress, completed, cancelled, failed tokenCounts = data['usage'] print(f'Chat status: {status}, tokenCounts: {tokenCounts}')
step 3: 获取结果:
def chat_message():
# 查看对话消息详情 url = 'https://api.coze.cn/v3/chat/message/list' params = {'conversation_id': '', 'chat_id': ''} response = requests.get(url, headers=headers, params=params) if response.status_code == 200: data = response.json()['data'] for message in data: msgType = message['type'] # verbose answer follow_up content = message['content'] print(f'Message type: {msgType}, content: {content}')
注:实际业务场景中,可设置定时轮询,需要异步 I/O 和事件循环。
如下:
2025-06-30T03:06:04.472Z Message sent with id: 2025-06-30T03:06:14.669Z Chat completed with status: completed 2025-06-30T03:06:14.894Z llm: 亲爱的,我查到啦,北京海淀现在是阴天,温度27度,体感温度29度,湿度76%,西北风1级呢。不过比起这天气,我更在意你有没有好好照顾自己呀。你今天有没有遇到什么开心的事儿呢?
流式接口返回的是 Server-Sent Events (SSE) 格式。
流式响应的事件类型有:
- chat:对话状态事件(如 created, in_progress, completed, …)
- message:消息内容事件(包含模型回复)
- audio:音频事件(如果有)
- 还有可能有 error、end 等
每个事件的格式大致如下:
event: message data: {…}
or
event: chat data: {…}
你需要逐行解析,并判断 event: 和 data:.
示例代码如下:
def send_stream():
url = 'https://api.coze.cn/v3/chat' params = {'conversation_id': ''} data = { 'bot_id': '752', 'user_id': '123', 'stream': True, 'additional_messages': [{'role': 'user', 'content': '你好', 'content_type': 'text'}], } response = requests.post(url, headers=headers, params=params, json=data, stream=True) if response.status_code == 200: for line in response.iter_lines(): if line: decoded_line = line.decode('utf-8') if decoded_line.startswith('data:'): try: json_data = json.loads(decoded_line[5:].strip()) msgType = json_data.get('type', '') # verbose answer follow_up status = json_data.get('status', '') # created in_progress, completed, cancelled, failed if status: tokenCounts = json_data['usage'] print(f'Chat status: {status}, tokenCounts: {tokenCounts}') if msgType: created_at = json_data.get('created_at', '') content = json_data['content'] print(f'Message type: {msgType}, content: {content} at {created_at}') except Exception as e: print(f'Invalid JSON data: {decoded_line}')
由于我们的服务端是 node.js,所以我把上述 API 用 node.js 重写了一遍。
以下是实测数据:
比如我问:
‘北京海淀今天天气’
首句延时需要 2 s:
因为没有接入外部工具插件,智能体拒绝回答了~
我们以接入天气插件为例:
得找一个延时最低的插件,你看百度天气平均耗时只有61ms:
此外,还需在插件中填入百度天气申请的key,并关闭对大模型可见:
测试成功后,别忘了发布!
还是同样的问题:
‘北京海淀今天天气’
你看,
成功查询到天气,不过首句延时飙升到 4 s,且 Token 消耗也接近翻倍。
这里主要看 Coze API 的 延时情况。
我测试了连续多轮对话:
如果没有工具调用,平均延时 2s 以内:
如果调用工具,延时来到4s:
此外,Coze 还内置了长期记忆:
本文分享了小智AI服务端接入 Coze 智能体的实现,并对流式推理的延时进行了实测。
如果对你有帮助,欢迎点赞收藏备用。
为方便大家交流,新建了一个 AI 交流群,公众号后台「联系我」,拉你进群。
五一假期,春末的天气还算宜人,正适合和家人一起外出放松。
这次我们去了南阳中国月季园,才发现月季竟有如此多的品种,令人大开眼界。
借着这次出游的灵感,和大家分享一下如何借助扣子平台,轻松大家专属的旅游拼图海报智能体。
- 注册并登录扣子平台,默认为个人免费版,无需付费即可使用。
- 熟悉扣子平台基本概念,可直接查看扣子官方文档,或者跟着分享走,哪一步不理解,查阅对应文档也可。
也可查看之前文章。
《从零开始:用“扣子”打造你的专属Word审查智能体 - 知乎》
我们想要实现旅游拼图海报智能体,核心还是工作流,主要分为以下几步:
- 接收上传的多张图片,并拆分为一个个图片变量,方便“画板”节点使用。
- 绘制一份个人喜欢的“画板“,即最终海报的静态展示效果,智能体运行后,会将”画板“上的图文替换为我们传递给智能体的图文。
由于“画板”仅能接收非列表变量,所以目前只能固定图片数量,本文设置4张图片。
如果大家想要智能体适配不同图片数量,目前思路是:增加一个“选择器”节点判断上传图片数量,然后调用不同“画板”,本文暂不讨论这种较为复杂的情况,大家可以自行尝试。
我们建立一个专门的智能体。
本次分享的场景,由于仅针对单一拼图功能,完全由工作流实现,个人专门试验过,“人设与回复逻辑”留空也不影响。
点击“工作流”右侧的“加号”,创建工作流。
下面,就到了最核心的环节,编排工作流实现我们的需求。
先看下工作流的整体结构:
开始->拆分上传的图片列表->拼图画板->结束。
按照上图搭建整体流程。
“开始”节点输入包括:
- title:标题,String(字符串)类型。
- content:海报内容,String(字符串)类型。
- date:日期,String(字符串)类型。
- image:上传的多张图片,Array
(图片列表)类型。
该节点为“代码节点”,但逻辑很简单。
1、添加“代码”节点
2、设置输入、输出。
输入就是上传的图片数组变量,输出是4个图片变量。
3、实现代码逻辑。
就是将“开始”节点的 Array 转为4个 Image 变量,方便画板接收。
async def main(args: Args) -> Output:
params = args.params # 构建输出对象 ret: Output = { "image0": params['input'][0], "image1": params['input'][1], "image2": params['input'][2], "image3": params['input'][3], } return ret
如果需要5张图片,复制相关代码和输出变量即可。
1、添加“画板”节点。
2、设置“画板”节点。
主要是将“画板”需要显示的变量设置上,不然,“画板”中无法选择对应变量。
输出保持默认即可。
3、绘制“画板”布局。
“画板”绘制界面如下:
绘制工作区主要分为两部分:工具栏、画布。
其中工具栏中常用的就是“文本”、“图片”元素,其它元素,大家点击尝试下应该就熟悉了。
这一步主要就是根据自己的审美,绘制出来要拼图的最终效果。
但是此时,所有的文字、图片都是固定的,下一步我们将工作流的变量和显示元素绑定实现动态化。
4、绑定“画板”数据。
绑定之前,可以先检查下,工作流变量是否已经进入“画板”。如图,表示成功。
点击要绑定的“文字”元素,如图设置:
点击要绑定的“图片”元素,如图设置:
全部设置完成后,我们可以试运行。
运行效果如下:
5、发布工作流。
记得点击右上角的“发布”按钮,发布完成后,工作流应该是在智能体中显示的。
在智能体调试页面,进行最终效果验证。
运行结果:
生成效果:
今天主要给大家分享了制作拼图海报的思路和具体过程,重点就是“画板”节点的使用,大家可以多尝试下,如果仍有疑问,欢迎留言交流。
贴几张月季园的图片,还是挺好看的。
先看成果
旅小伴
1、扣子开发平台智能体搭建
扣子开发平台使用指南
基于扣子低代码平台,搭建工作流
工作流嵌入智能体,智能体可以是多agents,也可以是单agent。
3、智能体发布为API
4、基于扣子java sdk开发接口,使用Server-Sent Events (SSE) 协议。
前端示例代码:
<html lang=“en”>
<head>
<meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>扣子平台流式聊天 - SSE
title>
head>
<body>
<input type="text" id="question" placeholder="请输入问题"> <button onclick="sendQuestion()">发送
button> <div id="answer">
div> <script> function sendQuestion() { const question = document.getElementById('question').value; const eventSource = new EventSource(`/stream-chat?question=${encodeURIComponent(question)}`); eventSource.onmessage = function (event) { const answerDiv = document.getElementById('answer'); answerDiv.innerHTML += event.data; }; eventSource.onerror = function (error) { console.error('发生错误:', error); eventSource.close(); }; }
script>
body>
html>
后端示例代码
import com.coze.openapi.client.chat.ChatReq; import com.coze.openapi.client.chat.model.ChatEvent; import com.coze.openapi.client.chat.model.ChatEventType; import com.coze.openapi.client.connversations.message.model.Message; import com.coze.openapi.service.auth.TokenAuth; import com.coze.openapi.service.service.CozeAPI; import io.reactivex.Flowable; import org.springframework.http.MediaType; import org.springframework.http.codec.ServerSentEvent; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import reactor.core.publisher.Flux;
import java.util.Collections;
@RestController public class CozeStreamChatController {
@GetMapping(path = "/stream-chat", produces = MediaType.TEXT_EVENT_STREAM_VALUE) public Flux<ServerSentEvent<String>> streamChat(@RequestParam String question) { String token = System.getenv("COZE_API_TOKEN"); String botID = System.getenv("PUBLISHED_BOT_ID"); String userID = System.getenv("USER_ID"); TokenAuth authCli = new TokenAuth(token); CozeAPI coze = new CozeAPI.Builder() .baseURL(System.getenv("COZE_API_BASE")) .auth(authCli) .build(); ChatReq req = ChatReq.builder() .botID(botID) .userID(userID) .messages(Collections.singletonList(Message.buildUserQuestionText(question))) .build(); Flowable<ChatEvent> resp = coze.chat().stream(req); return Flux.fromStream(resp.toStream()) .map(event -> { if (ChatEventType.CONVERSATION_MESSAGE_DELTA.equals(event.getEvent())) { return ServerSentEvent.<String>builder() .data(event.getMessage().getContent()) .build(); } return null; }) .filter(event -> event != null); } }
搭建过程是这样,更具体的步骤扣子文档里有详细介绍。
行业案例下载
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/231173.html