上一篇 下一篇 分享链接 返回 返回顶部

从零上线 Coze 智能助手:部署流程与源码实战指南

发布人:慈云数据-客服中心 发布时间:15小时前 阅读量:5

Coze 部署完整教程|附源码

随着 AI 应用开发的普及,越来越多的开发者开始关注如何快速搭建一个可用、可扩展、可上线的智能体应用。Coze(扣子)作为一款面向 AI Bot / Agent 开发的平台,提供了流程编排、插件调用、知识库、工作流、多渠道发布等能力,非常适合用来构建客服机器人、知识问答助手、企业内部工具、内容生成助手以及自动化工作流应用。

本文将以“从零到上线”为目标,系统讲解 Coze 应用的创建、配置、接口调用、后端封装、前端页面部署以及服务器上线流程,并提供一套可直接运行的示例源码,帮助你快速完成 Coze 项目的部署。


一、Coze 是什么?

Coze 是一个 AI Bot / Agent 开发平台,开发者可以在平台内创建智能体,并通过提示词、知识库、插件、工作流等方式增强其能力。相比传统方式直接调用大模型 API,Coze 的优势在于:

  • 可视化配置智能体:无需大量代码即可完成角色设定、对话能力配置;
  • 支持知识库问答:可以上传文档,让机器人基于指定资料回答问题;
  • 支持工作流编排:通过流程节点实现复杂任务自动化;
  • 支持插件调用:可接入第三方 API,例如天气、搜索、数据库、业务系统等;
  • 支持 API 调用:方便开发者将 Coze 智能体集成到自己的网站、App 或企业系统中;
  • 支持多渠道发布:如网页、飞书、微信公众号、Discord 等。

对于开发者来说,Coze 不只是一个聊天机器人平台,更像是一个低代码 AI 应用开发平台。


二、本文实现目标

本文将完成一个简单但完整的 Coze 部署案例:构建一个网页聊天助手,前端用户输入问题,后端调用 Coze API,最终将 AI 回复展示在页面上。

整体架构如下:

用户浏览器
   ↓
前端页面 Vue / HTML
   ↓
后端服务 Node.js / Express
   ↓
Coze API
   ↓
Coze 智能体回复

本文示例包含以下内容:

  1. 创建 Coze 智能体;
  2. 获取 Bot ID 和 API Token;
  3. 编写 Node.js 后端接口;
  4. 编写前端聊天页面;
  5. 本地运行测试;
  6. 使用 PM2 部署到服务器;
  7. 使用 Nginx 配置反向代理;
  8. 提供完整源码示例。

三、准备工作

在正式部署之前,你需要准备以下环境。

1. Coze 账号

你需要先注册并登录 Coze 平台。

国内用户通常可以使用扣子平台:

https://www.coze.cn/

海外用户可以使用国际版 Coze:

https://www.coze.com/

不同版本的 API 地址、鉴权方式可能略有差异,实际使用时请以官方文档为准。

2. Node.js 环境

本文后端使用 Node.js 和 Express。

建议版本:

node -v
# 推荐 v18.x 或以上

npm -v
# 推荐 9.x 或以上

如果服务器没有安装 Node.js,可以使用以下命令安装。

Ubuntu 示例:

curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs

验证安装:

node -v
npm -v

3. 服务器环境

如果只是本地测试,可以暂时不准备服务器。

如果需要正式部署,建议准备:

  • 一台 Linux 云服务器;
  • 一个已备案或可访问的域名;
  • Nginx;
  • PM2;
  • SSL 证书,推荐使用 Let’s Encrypt。

四、创建 Coze 智能体

登录 Coze 后,按照以下步骤创建 Bot。

1. 新建 Bot

进入 Coze 工作台,点击“创建 Bot”或“新建智能体”。

你可以填写如下信息:

Bot 名称:网站智能客服助手
Bot 描述:用于回答用户关于网站、产品、服务的问题

创建完成后,进入 Bot 编辑页面。


2. 配置角色设定

在提示词或角色设定中,可以写入如下内容:

你是一个专业、友好、耐心的网站客服助手。
你的任务是帮助用户解答关于产品、服务、价格、使用方法等方面的问题。
回答时要求:
1. 使用简洁清晰的中文;
2. 如果用户问题不明确,需要主动追问;
3. 如果涉及无法确认的信息,不要编造,应提示用户联系人工客服;
4. 回答应保持礼貌,不得出现攻击性语言。

这段提示词非常重要,它决定了智能体的基本行为风格。


3. 配置知识库

如果你希望机器人基于特定资料回答问题,可以添加知识库。

例如上传以下资料:

  • 产品介绍文档;
  • 常见问题 FAQ;
  • 价格说明;
  • 售后服务说明;
  • 公司介绍;
  • 使用手册。

知识库配置建议:

  • 文档内容尽量结构清晰;
  • 标题、段落、列表层级明确;
  • 避免过多无关内容;
  • 对常见问题单独整理成 FAQ;
  • 定期更新知识库。

例如 FAQ 文档可以写成:

# 常见问题

## 产品支持试用吗?

支持。用户可以申请 7 天免费试用,试用期间可以体验基础功能。

## 如何联系客服?

用户可以通过官网在线客服、邮箱或电话联系我们。

## 是否支持开发票?

支持。企业用户可在付款后申请电子发票。

4. 测试 Bot 效果

在 Coze 编辑页面右侧通常会有测试窗口。你可以输入几个问题测试效果,例如:

你们的产品支持免费试用吗?
如果我想开发票,应该怎么操作?
我忘记密码了怎么办?

如果回答效果不好,可以继续调整提示词、知识库和工作流配置。


五、获取 Coze API 信息

要通过自己的后端调用 Coze,需要获取以下信息:

  • API Token;
  • Bot ID;
  • User ID;
  • API Endpoint。

1. 获取 API Token

一般可以在 Coze 平台的开发者设置、API 管理或个人令牌页面生成访问令牌。

示例格式类似:

pat_xxxxxxxxxxxxxxxxxxxxxxxxx

注意:API Token 属于敏感信息,不能写在前端代码中,也不能提交到 GitHub。


2. 获取 Bot ID

进入 Bot 设置页面,通常可以看到 Bot ID。

示例:

bot_id = 7420000000000000000

3. API 地址说明

不同版本 API 地址可能不同,示例中使用如下形式:

https://api.coze.cn/v3/chat

国际版可能类似:

https://api.coze.com/v3/chat

实际部署时请根据你使用的平台版本调整。


六、项目目录结构

下面是本文示例项目的目录结构:

coze-chat-demo/
├── server/
│   ├── app.js
│   ├── package.json
│   └── .env
└── web/
    ├── index.html
    ├── style.css
    └── main.js

其中:

  • server 是 Node.js 后端;
  • web 是前端静态页面;
  • .env 用来保存环境变量;
  • app.js 负责调用 Coze API;
  • index.html 是聊天页面。

七、后端源码

1. 初始化后端项目

进入项目目录:

mkdir coze-chat-demo
cd coze-chat-demo

mkdir server
cd server

npm init -y

安装依赖:

npm install express cors dotenv axios

如果需要生产环境部署,也可以安装 PM2:

npm install pm2 -g

2. package.json

创建或修改 server/package.json

{
  "name": "coze-chat-server",
  "version": "1.0.0",
  "description": "Coze chat backend demo",
  "main": "app.js",
  "scripts": {
    "start": "node app.js",
    "dev": "node app.js"
  },
  "dependencies": {
    "axios": "^1.6.8",
    "cors": "^2.8.5",
    "dotenv": "^16.4.5",
    "express": "^4.18.3"
  }
}

3. 配置环境变量

server 目录下创建 .env 文件:

PORT=3000

COZE_API_URL=https://api.coze.cn/v3/chat
COZE_API_TOKEN=你的_COZE_API_TOKEN
COZE_BOT_ID=你的_BOT_ID
COZE_USER_ID=web_user_001

说明:

  • PORT:后端服务端口;
  • COZE_API_URL:Coze API 地址;
  • COZE_API_TOKEN:你的访问令牌;
  • COZE_BOT_ID:你的 Bot ID;
  • COZE_USER_ID:用户标识,可以根据业务动态生成。

请注意,.env 文件不要提交到公开代码仓库。


4. app.js 后端接口源码

创建 server/app.js

const express = require("express");
const cors = require("cors");
const dotenv = require("dotenv");
const axios = require("axios");

dotenv.config();

const app = express();

app.use(cors());
app.use(express.json());

const PORT = process.env.PORT || 3000;
const COZE_API_URL = process.env.COZE_API_URL;
const COZE_API_TOKEN = process.env.COZE_API_TOKEN;
const COZE_BOT_ID = process.env.COZE_BOT_ID;
const COZE_USER_ID = process.env.COZE_USER_ID || "default_user";

if (!COZE_API_URL || !COZE_API_TOKEN || !COZE_BOT_ID) {
  console.error("缺少 Coze API 配置,请检查 .env 文件");
  process.exit(1);
}

app.get("/", (req, res) => {
  res.send("Coze Chat Server is running.");
});

app.post("/api/chat", async (req, res) => {
  try {
    const { message, userId } = req.body;

    if (!message || typeof message !== "string") {
      return res.status(400).json({
        success: false,
        message: "message 不能为空"
      });
    }

    const requestBody = {
      bot_id: COZE_BOT_ID,
      user_id: userId || COZE_USER_ID,
      stream: false,
      additional_messages: [
        {
          role: "user",
          content: message,
          content_type: "text"
        }
      ]
    };

    const response = await axios.post(COZE_API_URL, requestBody, {
      headers: {
        Authorization: `Bearer ${COZE_API_TOKEN}`,
        "Content-Type": "application/json"
      },
      timeout: 30000
    });

    const data = response.data;

    return res.json({
      success: true,
      data
    });
  } catch (error) {
    console.error("调用 Coze API 失败:", error.response?.data || error.message);

    return res.status(500).json({
      success: false,
      message: "调用 Coze API 失败",
      error: error.response?.data || error.message
    });
  }
});

app.listen(PORT, () => {
  console.log(`Coze Chat Server started at http://localhost:${PORT}`);
});

这个接口的作用是:

  1. 接收前端传来的用户消息;
  2. 组装 Coze API 请求参数;
  3. 将请求发送给 Coze;
  4. 把 Coze 返回结果转发给前端。

八、前端源码

接下来编写一个简单的聊天页面。

1. 创建前端目录

回到项目根目录:

cd ..
mkdir web
cd web

2. index.html

创建 web/index.html




  
  
  Coze 智能聊天助手
  


  

Coze 智能聊天助手

基于 Coze API 构建的网页聊天机器人

AI
你好,我是智能助手,有什么可以帮你?

3. style.css

创建 web/style.css

* {
  box-sizing: border-box;
}

body {
  margin: 0;
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Microsoft YaHei", sans-serif;
  background: linear-gradient(135deg, #eef2ff, #f8fafc);
  color: #1f2937;
}

.chat-container {
  width: 100%;
  max-width: 860px;
  height: 100vh;
  margin: 0 auto;
  display: flex;
  flex-direction: column;
  background: #ffffff;
  box-shadow: 0 10px 40px rgba(15, 23, 42, 0.12);
}

.chat-header {
  padding: 20px 24px;
  background: #2563eb;
  color: #ffffff;
}

.chat-header h1 {
  margin: 0;
  font-size: 22px;
}

.chat-header p {
  margin: 6px 0 0;
  opacity: 0.9;
  font-size: 14px;
}

.chat-messages {
  flex: 1;
  overflow-y: auto;
  padding: 24px;
  background: #f8fafc;
}

.message {
  display: flex;
  gap: 12px;
  margin-bottom: 18px;
  align-items: flex-start;
}

.message.user {
  flex-direction: row-reverse;
}

.avatar {
  width: 36px;
  height: 36px;
  border-radius: 50%;
  flex-shrink: 0;
  background: #2563eb;
  color: #ffffff;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 13px;
  font-weight: bold;
}

.message.user .avatar {
  background: #16a34a;
}

.bubble {
  max-width: 72%;
  padding: 12px 14px;
  border-radius: 12px;
  background: #ffffff;
  line-height: 1.7;
  font-size: 15px;
  white-space: pre-wrap;
  box-shadow: 0 2px 8px rgba(15, 23, 42, 0.08);
}

.message.user .bubble {
  background: #dcfce7;
}

.chat-input-area {
  display: flex;
  gap: 12px;
  padding: 16px;
  border-top: 1px solid #e5e7eb;
  background: #ffffff;
}

textarea {
  flex: 1;
  resize: none;
  border: 1px solid #d1d5db;
  border-radius: 10px;
  padding: 12px;
  font-size: 15px;
  outline: none;
  font-family: inherit;
}

textarea:focus {
  border-color: #2563eb;
}

button {
  width: 92px;
  border: none;
  border-radius: 10px;
  background: #2563eb;
  color: #ffffff;
  font-size: 15px;
  cursor: pointer;
}

button:hover {
  background: #1d4ed8;
}

button:disabled {
  background: #94a3b8;
  cursor: not-allowed;
}

4. main.js

创建 web/main.js

const chatMessages = document.getElementById("chatMessages");
const messageInput = document.getElementById("messageInput");
const sendBtn = document.getElementById("sendBtn");

const API_URL = "http://localhost:3000/api/chat";

function appendMessage(role, content) {
  const messageEl = document.createElement("div");
  messageEl.className = `message ${role}`;

  const avatarEl = document.createElement("div");
  avatarEl.className = "avatar";
  avatarEl.textContent = role === "user" ? "我" : "AI";

  const bubbleEl = document.createElement("div");
  bubbleEl.className = "bubble";
  bubbleEl.textContent = content;

  messageEl.appendChild(avatarEl);
  messageEl.appendChild(bubbleEl);

  chatMessages.appendChild(messageEl);
  chatMessages.scrollTop = chatMessages.scrollHeight;
}

function extractCozeAnswer(data) {
  /**
   * 注意:
   * Coze API 返回结构可能因版本不同而变化。
   * 这里做一个兼容性解析,你可以根据实际返回结果调整。
   */
  if (!data) return "";

  if (typeof data === "string") return data;

  if (data.messages && Array.isArray(data.messages)) {
    const answer = data.messages.find(item => item.role === "assistant");
    if (answer) return answer.content || "";
  }

  if (data.data && data.data.messages && Array.isArray(data.data.messages)) {
    const answer = data.data.messages.find(item => item.role === "assistant");
    if (answer) return answer.content || "";
  }

  if (data.data && data.data.answer) {
    return data.data.answer;
  }

  return JSON.stringify(data, null, 2);
}

async function sendMessage() {
  const text = messageInput.value.trim();

  if (!text) return;

  appendMessage("user", text);
  messageInput.value = "";
  sendBtn.disabled = true;
  sendBtn.textContent = "发送中";

  appendMessage("bot", "正在思考中...");

  try {
    const response = await fetch(API_URL, {
      method: "POST",
      headers: {
        "Content-Type": "application/json"
      },
      body: JSON.stringify({
        message: text,
        userId: "web_user_" + Date.now()
      })
    });

    const result = await response.json();

    const lastBotBubble = chatMessages.querySelector(".message.bot:last-child .bubble");

    if (!result.success) {
      lastBotBubble.textContent = result.message || "请求失败";
      return;
    }

    const answer = extractCozeAnswer(result.data);
    lastBotBubble.textContent = answer || "未获取到有效回复,请检查接口返回结构。";
  } catch (error) {
    const lastBotBubble = chatMessages.querySelector(".message.bot:last-child .bubble");
    lastBotBubble.textContent = "网络请求失败,请稍后重试。";
    console.error(error);
  } finally {
    sendBtn.disabled = false;
    sendBtn.textContent = "发送";
  }
}

sendBtn.addEventListener("click", sendMessage);

messageInput.addEventListener("keydown", event => {
  if (event.ctrlKey && event.key === "Enter") {
    sendMessage();
  }
});

这里需要注意,API_URL 在本地测试时使用:

const API_URL = "http://localhost:3000/api/chat";

如果部署到线上,建议改成:

const API_URL = "/api/chat";

然后通过 Nginx 将 /api 转发到后端服务。


九、本地运行测试

1. 启动后端服务

进入 server 目录:

cd coze-chat-demo/server
npm install
npm start

如果配置正确,终端会输出:

Coze Chat Server started at http://localhost:3000

访问:

http://localhost:3000

如果看到:

Coze Chat Server is running.

说明后端启动成功。


2. 启动前端页面

前端是静态页面,可以直接用浏览器打开 web/index.html

更推荐使用本地静态服务器,例如:

cd coze-chat-demo/web
npx serve .

或者使用 VS Code 的 Live Server 插件。

打开页面后,输入问题,例如:

你能介绍一下你们的产品吗?

如果配置无误,页面会显示 Coze 返回的回答。


十、处理 Coze 异步会话返回问题

部分 Coze API 的调用流程不是一次请求直接返回完整答案,而是:

  1. 创建会话或发起 Chat;
  2. 获取 Chat ID;
  3. 轮询查询 Chat 状态;
  4. 获取最终消息列表。

如果你使用的接口返回类似:

{
  "data": {
    "id": "chat_xxx",
    "conversation_id": "xxx",
    "status": "in_progress"
  }
}

那么说明你需要继续调用查询接口获取最终回复。

后端逻辑可以改成:

POST /v3/chat
    ↓
GET /v3/chat/retrieve
    ↓
GET /v3/chat/message/list

示例伪代码如下:

async function waitForChatComplete(chatId, conversationId) {
  for (let i = 0; i < 20; i++) {
    const statusRes = await axios.get("https://api.coze.cn/v3/chat/retrieve", {
      headers: {
        Authorization: `Bearer ${COZE_API_TOKEN}`
      },
      params: {
        chat_id: chatId,
        conversation_id: conversationId
      }
    });

    const status = statusRes.data?.data?.status;

    if (status === "completed") {
      return true;
    }

    if (status === "failed") {
      throw new Error("Coze chat failed");
    }

    await new Promise(resolve => setTimeout(resolve, 1000));
  }

  throw new Error("Coze chat timeout");
}

由于 Coze API 版本会更新,实际接口参数请以官方文档为准。部署时一定要先打印完整返回值,根据真实结构提取答案。


十一、服务器部署

下面以 Ubuntu 服务器为例。

1. 上传项目

可以使用 Git:

git clone https://你的仓库地址/coze-chat-demo.git
cd coze-chat-demo

也可以用 scp 上传:

scp -r coze-chat-demo root@你的服务器IP:/www/

2. 安装后端依赖

cd /www/coze-chat-demo/server
npm install

配置 .env

vim .env

写入:

PORT=3000
COZE_API_URL=https://api.coze.cn/v3/chat
COZE_API_TOKEN=你的真实Token
COZE_BOT_ID=你的真实BotID
COZE_USER_ID=prod_user

3. 使用 PM2 启动服务

安装 PM2:

npm install pm2 -g

启动:

pm2 start app.js --name coze-chat-server

查看状态:

pm2 list

查看日志:

pm2 logs coze-chat-server

设置开机自启:

pm2 startup
pm2 save

十二、Nginx 部署前端与反向代理

1. 安装 Nginx

sudo apt update
sudo apt install nginx -y

2. 配置站点

假设项目路径为:

/www/coze-chat-demo/web

域名为:

chat.example.com

创建 Nginx 配置:

sudo vim /etc/nginx/sites-available/coze-chat.conf

写入:

server {
    listen 80;
    server_name chat.example.com;

    root /www/coze-chat-demo/web;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }

    location /api/ {
        proxy_pass http://127.0.0.1:3000/api/;
        proxy_http_version 1.1;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_connect_timeout 60s;
        proxy_read_timeout 60s;
        proxy_send_timeout 60s;
    }
}

启用配置:

sudo ln -s /etc/nginx/sites-available/coze-chat.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

此时访问:

http://chat.example.com

即可打开聊天页面。


十三、配置 HTTPS

生产环境建议启用 HTTPS。

安装 Certbot:

sudo apt install certbot python3-certbot-nginx -y

申请证书:

sudo certbot --nginx -d chat.example.com

按照提示操作即可。

证书自动续期检查:

sudo certbot renew --dry-run

十四、安全注意事项

部署 Coze 项目时,安全问题非常重要。

1. 不要把 Token 暴露到前端

错误示例:

const token = "pat_xxxxx";

如果把 Token 写在前端,任何用户都可以通过浏览器开发者工具看到,从而盗用你的 API 额度。

正确做法是:

  • Token 只保存在后端;
  • 前端只请求自己的后端接口;
  • 后端再调用 Coze API。

2. 增加接口限流

为了防止恶意刷接口,可以使用 express-rate-limit

安装:

npm install express-rate-limit

示例:

const rateLimit = require("express-rate-limit");

const limiter = rateLimit({
  windowMs: 60 * 1000,
  max: 30,
  message: {
    success: false,
    message: "请求过于频繁,请稍后再试"
  }
});

app.use("/api/", limiter);

3. 校验用户输入

后端应限制输入长度:

if (message.length > 2000) {
  return res.status(400).json({
    success: false,
    message: "输入内容过长"
  });
}

这样可以避免异常请求导致成本过高。


4. 日志脱敏

生产环境中不要直接打印用户隐私信息,也不要打印完整 Token。

可以只打印必要错误:

console.error("Coze API error:", error.response?.status, error.response?.data?.msg);

十五、常见问题排查

1. 后端提示缺少配置

如果启动时报错:

缺少 Coze API 配置,请检查 .env 文件

请检查:

  • .env 是否在 server 目录;
  • 变量名是否写错;
  • 是否安装了 dotenv
  • 是否重新启动了服务。

2. Coze API 返回 401

通常是 Token 错误或过期。

解决方法:

  • 重新生成 API Token;
  • 检查请求头是否包含 Authorization: Bearer xxx
  • 确认使用的是国内版还是国际版 API 地址。

3. Coze API 返回 404

常见原因:

  • API 地址错误;
  • Bot ID 错误;
  • 使用了错误版本的接口;
  • Bot 没有发布或没有开启 API 调用权限。

4. 前端请求失败

如果浏览器控制台显示跨域错误,可以:

  • 后端开启 CORS;
  • 使用 Nginx 反向代理;
  • 前端请求使用相对路径 /api/chat

5. 页面显示原始 JSON

说明返回结构与示例解析逻辑不一致。你可以在后端打印:

console.log(JSON.stringify(response.data, null, 2));

然后根据真实字段修改 extractCozeAnswer 函数。


十六、完整部署流程总结

完整流程可以总结为:

注册 Coze
   ↓
创建 Bot
   ↓
配置提示词和知识库
   ↓
获取 Token 和 Bot ID
   ↓
编写后端接口
   ↓
编写前端页面
   ↓
本地测试
   ↓
上传服务器
   ↓
PM2 启动后端
   ↓
Nginx 部署前端
   ↓
配置 HTTPS
   ↓
正式上线

如果你只是做 Demo,本地部署即可;如果是企业项目,建议重点关注安全、限流、日志、权限、知识库维护和接口成本控制。


十七、源码汇总

为了方便复制,下面给出核心源码清单。

后端 app.js

const express = require("express");
const cors = require("cors");
const dotenv = require("dotenv");
const axios = require("axios");

dotenv.config();

const app = express();

app.use(cors());
app.use(express.json());

const PORT = process.env.PORT || 3000;
const COZE_API_URL = process.env.COZE_API_URL;
const COZE_API_TOKEN = process.env.COZE_API_TOKEN;
const COZE_BOT_ID = process.env.COZE_BOT_ID;
const COZE_USER_ID = process.env.COZE_USER_ID || "default_user";

app.post("/api/chat", async (req, res) => {
  try {
    const { message, userId } = req.body;

    if (!message) {
      return res.status(400).json({
        success: false,
        message: "message 不能为空"
      });
    }

    const response = await axios.post(
      COZE_API_URL,
      {
        bot_id: COZE_BOT_ID,
        user_id: userId || COZE_USER_ID,
        stream: false,
        additional_messages: [
          {
            role: "user",
            content: message,
            content_type: "text"
          }
        ]
      },
      {
        headers: {
          Authorization: `Bearer ${COZE_API_TOKEN}`,
          "Content-Type": "application/json"
        }
      }
    );

    res.json({
      success: true,
      data: response.data
    });
  } catch (error) {
    res.status(500).json({
      success: false,
      message: "调用 Coze API 失败",
      error: error.response?.data || error.message
    });
  }
});

app.listen(PORT, () => {
  console.log(`server running at http://localhost:${PORT}`);
});

前端 main.js

const API_URL = "/api/chat";

async function askCoze(message) {
  const response = await fetch(API_URL, {
    method: "POST",
    headers: {
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      message
    })
  });

  return response.json();
}

十八、结语

通过本文的完整教程,你已经可以完成一个基于 Coze 的网页智能助手部署。从平台侧的 Bot 创建,到后端 API 封装,再到前端页面开发和服务器上线,整个流程已经覆盖了实际项目中最常见的部署场景。

Coze 的优势在于降低了 AI 应用开发门槛,但真正上线一个稳定可用的 AI 应用,仍然需要关注接口安全、并发限制、用户体验、错误处理和知识库维护。建议你在本文 Demo 的基础上继续扩展,例如增加用户登录、历史会话、流式输出、Markdown 渲染、文件上传、人工客服转接、多 Bot 切换等功能。

如果你希望将这个项目进一步产品化,可以优先优化以下方向:

  • 接入流式输出,提升对话体验;
  • 增加数据库保存聊天记录;
  • 对接企业微信、公众号或飞书;
  • 增加后台管理系统;
  • 对用户问题做分类和统计;
  • 定期更新知识库内容;
  • 对异常问题增加人工兜底机制。

至此,一个完整的 Coze 部署项目就完成了。你可以直接复制本文源码进行测试,也可以根据自己的业务场景进行二次开发。

目录结构
全文