企业项目管理、ORK、研发管理与敏捷开发工具平台

网站首页 > 精选文章 正文

如何快速全栈搭建AI智能体?(在线演示+技术方案+私服+源代码)

wudianyun 2025-05-25 15:57:20 精选文章 2 ℃

在线演示

AI智能体搭建演示:
http://yes-ai-agent-demo.yesapi.cn/

YesAI智能体 - 在线文档:
http://ai-agent.yesdev.cn/docs


文档

这是一个完整的AI智能体聊天应用,包含前端和后端服务。后端基于 Node.js、Express、TypeScript 和 Prisma ORM 构建,前端使用 Next.js 和 Ant Design。它提供用户认证、会话管理和与多个 AI 提供商(DeepSeek、通义千问)的集成。

目录

  • 功能特性
  • 技术栈
  • 开发环境设置
  • 生产环境部署使用 Docker 部署Nginx 配置服务器管理命令
  • 环境变量
  • API文档

功能特性

  • 用户认证(注册、登录)
  • 会话管理(创建、重命名、删除)
  • 消息管理
  • 与多个 AI 提供商集成(DeepSeek、通义千问)
  • 支持流式响应
  • (持续迭代升级中)

技术栈

后端

  • 框架: Express.js
  • 语言: TypeScript
  • 数据库: MySQL
  • ORM: Prisma
  • 认证: JWT
  • AI 集成: DeepSeek API, 通义千问 API

前端

  • 框架: Next.js
  • UI 库: Ant Design
  • 语言: TypeScript
  • 状态管理: React Context API

开发环境设置

温馨提示:请先联系我们获取源代码。

  1. 克隆仓库
git clone <repository-url>
cd <repository-name>/server
  1. 安装依赖
# node 版本 18
node -v
v18.20.4

npm install -g pnpm
  1. 配置环境变量

复制 .env.example 文件为 .env 并填写必要的配置:

cp .env.example .env
  1. 数据库迁移
npx prisma migrate dev
  1. 启动开发服务器
pnpm dev

服务器将在 http://localhost:8003 上运行。

生产环境部署

1. 使用部署脚本(推荐)

我们提供了一个简单的部署脚本,可以自动完成所有部署步骤:

# 给脚本执行权限
chmod +x deploy.sh

# 运行部署脚本
./deploy.sh

这个脚本会:

  1. 检查Node.js和pnpm是否安装
  2. 安装项目依赖
  3. 配置环境变量
  4. 构建应用
  5. 使用PM2(如果已安装)或nohup启动应用

2. 常规部署方式

手动部署步骤

服务器使用docker,

# 服务器,提前准备好放置的目录
# 进入你的 服务器
# pwd
/yesapi/www/wwwroot/yes-ai-agent/yes-ai-agent-demo-server.yesapi.cn

# 本地,电脑,先打包发布推送到服务器
./deploy.sh

# 拉取镜像(首次安装)
docker pull node:18-alpine3.21

# 查看
docker image ls | grep node  

# 启动别名
cd /yesapi/www/wwwroot/yes-ai-agent/yes-ai-agent-demo-server.yesapi.cn
docker run -it -d --name yes-ai-agent-demo-server  -p 8003:8003 \
  -v $(pwd):/app \
  -w /app \
  --network docker_app_network \
  node:18-alpine sh

# 进入容器
docker exec -it yes-ai-agent-demo-server /bin/sh

# 容器内的操作
/app # node -v
v18.20.8

# 进行项目初始化(首次安装)
/app # sh ./deploy-server.sh 

# 宿主测试接口
curl http://localhost:8003/api/chat/models
# 外部接口测试
curl http://yes-ai-agent-demo-server.yesapi.cn/api/chat/models

使用 Docker 部署

这种部署方式使用 Node.js 官方 Docker 镜像,适合小型到中型项目,部署过程简单直观。

特别注意:以下方式,卡在了本地构建失败,暂时未采用。

  1. 准备部署文件

参考项目根目录创建 Dockerfile

  1. 构建和运行
# 构建 Docker 镜像
docker build -t yes-ai-chat-server .

# 运行容器
docker run -d \
   --name yes-ai-chat-server \
   -p 8003:8003 \
   -v $(pwd)/.env:/app/.env \
   yes-ai-chat-server

项目已经配置好了 Docker 和 Docker Compose 文件,可以直接使用。

  1. 准备环境变量文件

为后端创建环境变量文件:

cp .env.production.example .env.production
# 编辑 .env.production 文件,填写实际配置

为前端创建环境变量文件:

cp apps/web/.env.production.example apps/web/.env.production
# 编辑 apps/web/.env.production 文件,填写实际配置
  1. 构建和启动 Docker 容器
# 构建和启动所有服务
docker-compose up -d --build

# 只构建和启动后端服务
docker-compose up -d --build mysql server

# 只构建和启动前端服务
docker-compose up -d --build web
  1. 执行数据库迁移
docker-compose exec server npx prisma migrate deploy

Nginx 配置

为了在生产环境中使用 Nginx 作为反向代理,需要配置前端和后端服务。创建以下配置文件:

后端配置 (api.yourdomain.com)

server {
    listen 80;
    server_name yes-ai-agent-demo-server.yesapi.cn;

    # API 代理
    location / {
        # 处理 OPTIONS 预检请求
        if ($request_method = 'OPTIONS') {
            add_header 'Access-Control-Allow-Origin' 'http://yes-ai-agent-demo.yesapi.cn';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';
            add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type, Accept';
            add_header 'Access-Control-Allow-Credentials' 'true';
            add_header 'Access-Control-Max-Age' 86400;
            add_header Content-Length 0;
            add_header Content-Type text/plain;
            return 204;
        }

        # CORS 响应头(简化重复头)
	# 改为.env里面配置
        # add_header 'Access-Control-Allow-Origin' 'http://yes-ai-agent-demo.yesapi.cn' always;
        add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always;
        add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type, Accept' always;
        add_header 'Access-Control-Allow-Credentials' 'true' always;

        # 安全头(合并到 location 块)
        add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
        add_header X-Content-Type-Options nosniff always;
        add_header X-Frame-Options DENY always;
        add_header X-XSS-Protection "1; mode=block" always;

        # 代理配置(关键修复点)
        proxy_pass http://localhost:8003/api/;  # 末尾添加斜杠 /,确保路径正确传递
        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_set_header X-Forwarded-Proto $scheme;

        # 超时设置
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
    }

    # 日志配置
    access_log /var/log/nginx/yes-ai-agent-demo-server.yesapi.cn.access.log;
    error_log /var/log/nginx/yes-ai-agent-demo-server.yesapi.cn.error.log;
}

环境变量

后端环境变量

以下是后端服务使用的环境变量列表:

变量名

描述

默认值

DATABASE_URL

数据库连接字符串

-

PORT

服务器端口

8003

JWT_SECRET

JWT 签名密钥

-

DASHSCOPE_API_KEY

DeepSeek API 密钥

-

BAILIAN_API_KEY

通义千问 API 密钥

-

CORS_ORIGIN

允许的 CORS 来源

http://localhost:8000

前端环境变量

以下是前端应用使用的环境变量列表:

变量名

描述

默认值

NEXT_PUBLIC_API_URL

后端 API 的基础 URL

http://localhost:8003

Docker Compose 环境变量

以下是 Docker Compose 使用的额外环境变量:

变量名

描述

默认值

MYSQL_ROOT_PASSWORD

MySQL root 用户密码

-

MYSQL_DATABASE

MySQL 数据库名称

ai_chat_db

MYSQL_USER

MySQL 应用用户名

ai_chat_user

MYSQL_PASSWORD

MySQL 应用用户密码

-

API 文档

认证

注册用户

POST /api/users/register

请求体:

{
  "username": "user123",
  "password": "password123"
}

用户登录

POST /api/users/login

请求体:

{
  "username": "user123",
  "password": "password123"
}

会话管理

获取会话列表

GET /api/sessions?userId=123

创建会话

POST /api/sessions

请求体:

{
  "userId": 123,
  "name": "新会话"
}

重命名会话

PATCH /api/sessions/:id

请求体:

{
  "name": "新名称"
}

删除会话

DELETE /api/sessions/:id

消息管理

获取消息列表

GET /api/messages?sessionId=123

发送消息

POST /api/messages

请求体:

{
  "sessionId": 123,
  "role": "user",
  "content": "你好,AI助手"
}

AI 聊天

发送聊天请求

POST /api/chat

请求体:

{
  "messages": [
    {
      "role": "user",
      "content": "你好,AI助手"
    }
  ],
  "model": "deepseek-chat",
  "stream": true
}

获取可用模型

GET /api/chat/models

Tags:

最近发表
标签列表