├── .gitignore
├── CHANGELOG.md
├── LICENSE
├── conf
├── nginx
│ ├── conf.d
│ │ └── geek-agent.conf
│ └── nginx.conf
├── mysql
│ └── my.cnf
└── config.toml
├── README.md
├── docker-compose.yaml
└── data
└── mysql
└── init.d
└── geekai_agent-v1.0.1.sql
/.gitignore:
--------------------------------------------------------------------------------
1 | data/mysql/data
2 | .idea
3 | logs
4 | certs
5 |
6 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # 更新日志
2 |
3 | ## v1.0.0
4 |
5 | 初始版本,实现了最基本的功能,包括:
6 |
7 | * 前端 Web 框架和后端 API 框架搭建
8 | * 实现登录、注册功能
9 | * 实现通用大模型的 AI 对话功能,支持流式输出
10 | * 支持 Coze 智能体接入
11 | * 支持用户通过购买卡密来兑换积分
12 | * 完善的运营管理后台功能,可自由添加大模型 API,各种智能体,用户管理,系统设置,智能体管理,兑换码管理,调用日志等功能。
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2025 GeekMaser
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/conf/nginx/conf.d/geek-agent.conf:
--------------------------------------------------------------------------------
1 | server {
2 | listen 8080;
3 |
4 | # 日志地址
5 | access_log /var/log/access.log;
6 | error_log /var/log/error.log;
7 |
8 | index index.html;
9 | root /var/www/app/dist; # 这里改成前端静态页面的地址
10 |
11 | location / {
12 | try_files $uri $uri/ /index.html;
13 |
14 | # 后端 API 的转发
15 | location /api/ {
16 | proxy_http_version 1.1;
17 | # 禁止缓冲
18 | proxy_buffering off;
19 | proxy_cache off;
20 | # 长链接
21 | proxy_set_header Connection '';
22 | proxy_connect_timeout 300s;
23 | proxy_read_timeout 300s;
24 | proxy_send_timeout 12s;
25 | proxy_set_header Host $host;
26 | proxy_set_header X-Real-IP $remote_addr;
27 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
28 | proxy_pass http://geek-agent-api:6789;
29 | }
30 |
31 | # 静态资源转发
32 | location /static/ {
33 | proxy_pass http://geek-agent-api:6789;
34 | }
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/conf/nginx/nginx.conf:
--------------------------------------------------------------------------------
1 | user www-data;
2 | worker_processes auto;
3 | pid /run/nginx.pid;
4 | include /etc/nginx/modules-enabled/*.conf;
5 |
6 | events {
7 | worker_connections 768;
8 | # multi_accept on;
9 | }
10 |
11 | http {
12 |
13 | ##
14 | # Basic Settings
15 | ##
16 |
17 | sendfile on;
18 | tcp_nopush on;
19 | types_hash_max_size 2048;
20 | # server_tokens off;
21 | client_max_body_size 100M;
22 |
23 | # server_names_hash_bucket_size 64;
24 | # server_name_in_redirect off;
25 |
26 | include /etc/nginx/mime.types;
27 | default_type application/octet-stream;
28 |
29 | ##
30 | # SSL Settings
31 | ##
32 |
33 | ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
34 | ssl_prefer_server_ciphers on;
35 |
36 | ##
37 | # Logging Settings
38 | ##
39 |
40 | access_log /var/log/nginx/access.log;
41 | error_log /var/log/nginx/error.log;
42 |
43 | ##
44 | # Gzip Settings
45 | ##
46 |
47 | gzip on;
48 | gzip_min_length 1k;
49 | gzip_vary on;
50 | gzip_proxied any;
51 | gzip_comp_level 6;
52 | gzip_buffers 16 8k;
53 | gzip_http_version 1.1;
54 | gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
55 |
56 | include /etc/nginx/conf.d/*.conf;
57 | include /etc/nginx/sites-enabled/*;
58 | }
--------------------------------------------------------------------------------
/conf/mysql/my.cnf:
--------------------------------------------------------------------------------
1 | #
2 | # The MySQL database server configuration file.
3 | #
4 | # One can use all long options that the program supports.
5 | # Run program with --help to get a list of available options and with
6 | # --print-defaults to see which it would actually understand and use.
7 | #
8 | # For explanations see
9 | # http://dev.mysql.com/doc/mysql/en/server-system-variables.html
10 |
11 | # Here is entries for some specific programs
12 | # The following values assume you have at least 32M ram
13 |
14 | [mysqld]
15 | #
16 | # * Basic Settings
17 | #
18 | #user = mysql
19 | # pid-file = /var/run/mysqld/mysqld.pid
20 | # socket = /var/run/mysqld/mysqld.sock
21 | # port = 3306
22 | # datadir = /var/lib/mysql
23 |
24 |
25 | # If MySQL is running as a replication slave, this should be
26 | # changed. Ref https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_tmpdir
27 | # tmpdir = /tmp
28 | #
29 | # Instead of skip-networking the default is now to listen only on
30 | # localhost which is more compatible and is not less secure.
31 | bind-address = 0.0.0.0
32 | mysqlx-bind-address = 0.0.0.0
33 |
34 | performance_schema_max_table_instances=400
35 | # 缓存
36 | table_definition_cache=400
37 | # 关闭监控
38 | performance_schema=off
39 | # 打开表的缓存
40 | table_open_cache=64
41 | # InnoDB缓冲池大小调整操作的块大小
42 | innodb_buffer_pool_chunk_size=64M
43 | # InnoDB 存储引擎的表数据和索引数据的最大内存缓冲区大小
44 | innodb_buffer_pool_size=64M
45 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## GeekAI-Agent
2 |
3 | GeekAI-Agent 是一款专注于 AI 对话的智能体平台,支持大模型 API 接入,支持 Coze ,Dify
4 | ,阿里百炼应用等智能体一键导入。自带后台管理和支付系统,支持用户积分充值,积分消费日志,支持用户管理,应用管理,系统设置等必备运营功能,让你的智能体能轻松变现。
5 |
6 | 你是否有过这样的困扰,你利用 Coze ,Dify 等智能体平台,开发了一个非常好用的智能体,比如它可以一键生成上万字的毕业论文,或者它可以实现自动从提取视频文案,然后使用
7 | AI 重写脚本,再根据新的视频文案生成视频......
8 |
9 | 它是如此的牛逼💯,以至于你想分享给更多的人使用,实现商业变现。但是你又不想直接把你的智能体工作流分享出去,因为这涉及到你的知识产权。而
10 | Coze 和 Dify 这种智能体平台虽然允许你分享应用给其他人用,但是他们并没有提供比较好的变现渠道。
11 | 此时也许你会想,有没有一个工具,既可以让用户使用你的智能体,又不暴露你的工作流,同时还允许你向用户收费?
12 |
13 | 如果你有这样的困扰的话,那么 GeekAI-Agent 就是你的最佳选择! 😬🎉💯
14 |
15 | GeekAI-Agent 是一款专注于 AI 对话的智能体平台,支持大模型 API 接入,支持 Coze ,Dify
16 | 等智能体一键导入。自带后台管理和支付系统,支持用户积分充值,积分消费日志,支持用户管理,应用管理,系统设置等必备运营功能,让你的智能体能轻松变现。
17 |
18 | ## 功能简介
19 |
20 | - ✅ 支持大模型 API 接入,接入即可进行大模型基础对话功能。
21 | - ✅ 支持 Coze 智能体一键导入,轻松实现 Coze 智能体变现。
22 | - ✅ 后台管理功能,用户管理,应用管理,系统设置等必备运营功能。
23 | - ✅ 卡密功能,支持使用兑换码给用户充值积分,轻松实现发卡功能。
24 | - ✅ 用户积分消费日志,每一次使用都有记录,方便用户查询。
25 | - ✅ 支持大模型和Coze识图,文件上传功能。
26 | - 🟩 支持 Dify 智能体一键导入,轻松实现 Dify 智能体变现(待完成)。
27 | - 🟩 普通大模型支持函数和插件,支持 AI 对话时调用插件进行绘图,搜索(待完成)。
28 | - 🟩 阿里云百炼应用(AI智能体)接入(待完成)。
29 | - 🟩 移动端功能。
30 |
31 | ## 文档地址
32 |
33 | [GeekAI-Agent 文档](https://docs.geekai.me/agent/)
34 |
35 | ## 演示地址
36 |
37 | * 前端:[https://agent.geekai.me ](https://agent.geekai.me),账号 18888888888/12345678
38 | * 管理后台: [https://agent.geekai.me/#/admin](https://agent.geekai.me/#/admin),账号 admin/amin123
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/conf/config.toml:
--------------------------------------------------------------------------------
1 | Listen = "0.0.0.0:6789"
2 | MysqlDns = "root:mhSCk0NheGhmtsha@tcp(geekai-agent-mysql:3306)/geekai_agent?charset=utf8mb4&collation=utf8mb4_unicode_ci&parseTime=True&loc=Local"
3 |
4 | [Session]
5 | SecretKey = "m0cjm3gsuw9jk73np1ni7r42koilybjcndlycjdmq7za3pbqn7w12fyok5pqh6q5"
6 | MaxAge = 8640000
7 |
8 | [AdminSession]
9 | SecretKey = "wr1uzwz2meai4z9j0e0tsyf6x523ui6zpnyaim4x2x37meakv13349llqpipyk40"
10 | MaxAge = 8640000
11 |
12 | [Redis]
13 | Host = "geekai-agent-redis"
14 | Port = 6379
15 | Password = "mhSCk0NheGhmtsha"
16 | DB = 0
17 |
18 | [ApiConfig]
19 | ApiURL = "https://sapi.geekai.me"
20 | AppId = ""
21 | Token = ""
22 |
23 | [SMS]
24 | Active = "Bao"
25 | [SMS.Ali]
26 | AccessKey = ""
27 | AccessSecret = ""
28 | Product = "Dysmsapi"
29 | Domain = "dysmsapi.aliyuncs.com"
30 | Sign = "飞行的蜗牛"
31 | CodeTempId = "SMS_281460317"
32 | [SMS.Bao]
33 | Username = ""
34 | Password = ""
35 | Domain = "api.smsbao.com"
36 | Sign = "【极客学长】"
37 | CodeTemplate = "您的验证码是{code}。5分钟有效,若非本人操作,请忽略本短信。"
38 |
39 | [OSS]
40 | Active = "Local"
41 | [OSS.Local]
42 | BasePath = "./static/upload"
43 | BaseURL = "/static/upload"
44 | [OSS.QiNiu]
45 | Zone = "z2"
46 | # 下面密钥信息请到 https://portal.qiniu.com/developer/user/key 获取
47 | AccessKey = ""
48 | AccessSecret = ""
49 | Bucket = "" # 七牛云的存储空间名称
50 | Domain = "" # 空间绑定的域名
51 | [OSS.Minio] # Minio 搭建的配置请参考:https://docs.geekai.me/plus/config/oss.html#搭建-minio-存储服务
52 | Endpoint = "ip:9000"
53 | AccessKey = ""
54 | AccessSecret = ""
55 | Bucket = ""
56 | UseSSL = false
57 | Domain = "http://ip:9000"
58 | [OSS.AliYun]
59 | Endpoint = "oss-cn-hangzhou.aliyuncs.com"
60 | # 阿里云API服务密钥信息请到 https://ram.console.aliyun.com/profile/access-keys 获取
61 | AccessKey = ""
62 | AccessSecret = ""
63 | Bucket = ""
64 | Domain = ""
65 |
66 | [SmtpConfig]
67 | UseTls = true
68 | Host = "smtp.163.com"
69 | Port = 465
70 | AppName = "GeekAI-Agent"
71 | From = ""
72 | Password = ""
73 |
--------------------------------------------------------------------------------
/docker-compose.yaml:
--------------------------------------------------------------------------------
1 | services:
2 | # MySQL 服务
3 | geekai-mysql:
4 | image: registry.cn-shenzhen.aliyuncs.com/geekmaster/mysql:8.0.33
5 | container_name: geekai-agent-mysql
6 | command: --default-authentication-plugin=mysql_native_password
7 | restart: always
8 | environment:
9 | - MYSQL_ROOT_PASSWORD=mhSCk0NheGhmtsha
10 | ports:
11 | - "3308:3306"
12 | volumes:
13 | - ./conf/mysql/my.cnf:/etc/mysql/my.cnf
14 | - ./data/mysql/data:/var/lib/mysql
15 | - ./logs/mysql:/var/log/mysql
16 | - ./data/mysql/init.d:/docker-entrypoint-initdb.d/
17 | healthcheck:
18 | test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
19 | interval: 5s
20 | timeout: 10s
21 | retries: 10
22 |
23 | # Redis 服务
24 | geekai-redis:
25 | image: registry.cn-shenzhen.aliyuncs.com/geekmaster/redis:6.0.6
26 | container_name: geekai-agent-redis
27 | command: redis-server --requirepass mhSCk0NheGhmtsha
28 | restart: always
29 | volumes:
30 | - ./data/redis:/data
31 | ports:
32 | - "6381:6379"
33 | healthcheck:
34 | test: ["CMD", "redis-cli", "ping"]
35 | interval: 3s
36 | timeout: 10s
37 | retries: 5
38 |
39 | geek-agent-api:
40 | image: registry.cn-shenzhen.aliyuncs.com/geekmaster/geek-agent-api:v1.0.1-amd64
41 | container_name: geek-agent-api
42 | restart: always
43 | ports:
44 | - "6789:6789"
45 | volumes:
46 | - /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime
47 | - ./conf/config.toml:/var/www/app/config.toml
48 | - ./logs:/var/www/app/logs
49 | environment:
50 | - LOG_LEVEL=info
51 | - CONFIG_FILE=config.toml
52 |
53 | # 前端应用
54 | geek-agent-web:
55 | image: registry.cn-shenzhen.aliyuncs.com/geekmaster/geek-agent-web:v1.0.1-amd64
56 | container_name: geek-agent-web
57 | restart: always
58 | depends_on:
59 | - geek-agent-api
60 | ports:
61 | - "8081:8080"
62 | volumes:
63 | - ./logs/nginx:/var/log/nginx
64 | - ./conf/nginx/conf.d:/etc/nginx/conf.d
65 | - ./conf/nginx/nginx.conf:/etc/nginx/nginx.conf
66 |
--------------------------------------------------------------------------------
/data/mysql/init.d/geekai_agent-v1.0.1.sql:
--------------------------------------------------------------------------------
1 | -- phpMyAdmin SQL Dump
2 | -- version 5.2.1
3 | -- https://www.phpmyadmin.net/
4 | --
5 | -- 主机: 127.0.0.1
6 | -- 生成日期: 2025-03-27 11:24:04
7 | -- 服务器版本: 8.0.33
8 | -- PHP 版本: 8.1.2-1ubuntu2.20
9 |
10 | SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
11 | START TRANSACTION;
12 | SET time_zone = "+00:00";
13 |
14 |
15 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
16 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
17 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
18 | /*!40101 SET NAMES utf8mb4 */;
19 |
20 | --
21 | -- 数据库: `geekai_agent`
22 | --
23 | CREATE DATABASE IF NOT EXISTS `geekai_agent` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
24 | USE `geekai_agent`;
25 |
26 | -- --------------------------------------------------------
27 |
28 | --
29 | -- 表的结构 `geekai_admin_users`
30 | --
31 |
32 | DROP TABLE IF EXISTS `geekai_admin_users`;
33 | CREATE TABLE `geekai_admin_users` (
34 | `id` int NOT NULL,
35 | `username` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户名',
36 | `password` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '密码',
37 | `salt` char(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '密码盐',
38 | `status` tinyint(1) NOT NULL COMMENT '当前状态',
39 | `last_login_at` int NOT NULL COMMENT '最后登录时间',
40 | `last_login_ip` char(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '最后登录 IP',
41 | `created_at` datetime NOT NULL COMMENT '创建时间',
42 | `updated_at` datetime NOT NULL COMMENT '更新时间'
43 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='系统用户' ROW_FORMAT=DYNAMIC;
44 |
45 | --
46 | -- 转存表中的数据 `geekai_admin_users`
47 | --
48 |
49 | INSERT INTO `geekai_admin_users` (`id`, `username`, `password`, `salt`, `status`, `last_login_at`, `last_login_ip`, `created_at`, `updated_at`) VALUES
50 | (1, 'admin', '6d17e80c87d209efb84ca4b2e0824f549d09fac8b2e1cc698de5bb5e1d75dfd0', 'mmrql75o', 1, 1740450502, '127.0.0.1', '2024-03-11 16:30:20', '2025-02-25 10:28:22');
51 |
52 | -- --------------------------------------------------------
53 |
54 | --
55 | -- 表的结构 `geekai_apps`
56 | --
57 |
58 | DROP TABLE IF EXISTS `geekai_apps`;
59 | CREATE TABLE `geekai_apps` (
60 | `id` int NOT NULL,
61 | `name` varchar(30) DEFAULT NULL COMMENT '名称',
62 | `type` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'openai' COMMENT 'openai,dify,coze',
63 | `enabled` tinyint(1) DEFAULT NULL COMMENT '是否启用',
64 | `configs` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '智能体配置参数',
65 | `score` int NOT NULL DEFAULT '0' COMMENT '单次对话消耗积分',
66 | `icon` varchar(255) DEFAULT NULL COMMENT '应用图标',
67 | `summary` varchar(255) DEFAULT NULL COMMENT '应用简介',
68 | `created_at` datetime NOT NULL,
69 | `updated_at` datetime NOT NULL
70 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='OpenAI API ';
71 |
72 | -- --------------------------------------------------------
73 |
74 | --
75 | -- 表的结构 `geekai_chat_items`
76 | --
77 |
78 | DROP TABLE IF EXISTS `geekai_chat_items`;
79 | CREATE TABLE `geekai_chat_items` (
80 | `id` int NOT NULL,
81 | `chat_id` char(40) NOT NULL COMMENT '会话 ID',
82 | `conversation_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '会话ID(coze/dify)',
83 | `user_id` int NOT NULL COMMENT '用户 ID',
84 | `app_id` int NOT NULL COMMENT '智能体ID',
85 | `title` varchar(100) NOT NULL COMMENT '会话标题',
86 | `icon` varchar(255) NOT NULL COMMENT '图标地址',
87 | `created_at` datetime NOT NULL COMMENT '创建时间',
88 | `updated_at` datetime NOT NULL COMMENT '更新时间'
89 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户会话列表';
90 |
91 | -- --------------------------------------------------------
92 |
93 | --
94 | -- 表的结构 `geekai_chat_messages`
95 | --
96 |
97 | DROP TABLE IF EXISTS `geekai_chat_messages`;
98 | CREATE TABLE `geekai_chat_messages` (
99 | `id` bigint NOT NULL,
100 | `user_id` int NOT NULL COMMENT '用户 ID',
101 | `chat_id` char(40) NOT NULL COMMENT '会话 ID',
102 | `role` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'user or ai',
103 | `icon` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '角色图标',
104 | `app_id` int NOT NULL COMMENT '智能体ID',
105 | `content` text NOT NULL COMMENT '聊天内容',
106 | `tokens` smallint NOT NULL COMMENT '耗费 token 数量',
107 | `use_context` tinyint(1) NOT NULL COMMENT '是否允许作为上下文语料',
108 | `created_at` datetime NOT NULL,
109 | `updated_at` datetime NOT NULL
110 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='聊天信息';
111 |
112 | -- --------------------------------------------------------
113 |
114 | --
115 | -- 表的结构 `geekai_configs`
116 | --
117 |
118 | DROP TABLE IF EXISTS `geekai_configs`;
119 | CREATE TABLE `geekai_configs` (
120 | `id` int NOT NULL,
121 | `marker` varchar(20) NOT NULL COMMENT '标识',
122 | `config_json` text NOT NULL
123 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
124 |
125 | --
126 | -- 转存表中的数据 `geekai_configs`
127 | --
128 |
129 | INSERT INTO `geekai_configs` (`id`, `marker`, `config_json`) VALUES
130 | (1, 'system', '{\"title\":\"GeekAI 智能体\",\"slogan\":\"使用AI智能体,开启工作效率倍增时代。\",\"admin_title\":\"GeekAgent 控制台\",\"logo\":\"/images/logo.png\",\"init_score\":100,\"daily_score\":10,\"invite_score\":100,\"enabled_register\":true,\"wechat_card_url\":\"/images/wx.png\",\"email_white_list\":[\"163.com\",\"pvc123.com\"],\"app_id\":1,\"bot_avatar\":\"/images/avatar/assistant.png\",\"user_avatar\":\"/images/avatar/user.png\",\"license\":{\"name\":\"\",\"license\":\"\",\"mid\":\"\",\"active_at\":0,\"expired_at\":0,\"configs\":{\"user_num\":0,\"de_copy\":false}}}'),
131 | (3, 'notice', '{\"license\":{\"name\":\"\",\"license\":\"\",\"mid\":\"\",\"active_at\":0,\"expired_at\":0,\"configs\":{\"user_num\":0,\"de_copy\":false}},\"content\":\"## Geek-Agent v1.0.1 更新日志\\n- **新增功能:** 在管理后台新增了应用复制功能。\\n- **功能优化:** 聊天输入框实现 Ctrl + Enter 换行。\\n- **功能优化:** 优化聊天对话信息数据结构,兼容 Coze 工作流调试信息输出。\\n- **功能优化:** 优化镜像打包脚本,web 端单独打包。\\n- **功能新增:** 新增本地文件上传支持。\\n- **功能新增:** 管理后台新增网站公告管理。\\n- **功能新增:** 允许管理员关闭前端注册功能,只允许通过管理后台添加用户。\\n- **功能新增:** 实现大模型 API 和 Coze API 的终止生成的功能。\\n- **功能新增:** 在聊天页面显示网站公告。\\n- **功能新增:** 支持 DeekSeek 推理模型官方原生API,不需要 oneAPI 转发。\\n- **功能优化:** 使用 Coze 官方的 GO-SDK 来替换自己手撸的 Coze SDK。\\n- **功能新增:** 支持 Coze 的图片和文件上传,支持 OpenAI 大模型的图片上传。\\n\\n\\n项目介绍:[https://docs.geekai.me](https://docs.geekai.me/agent/)\\n部署教程:[https://docs.geekai.me/agent/install.html](https://docs.geekai.me/agent/install.html)\\n\\n注意:当前站点仅为 \\u003ca style=\\\"color: #F56C6C\\\" href=\\\"https://github.com/yangjian102621/geekai-agent\\\" target=\\\"_blank\\\"\\u003eGeek-Agent\\u003c/a\\u003e 的演示项目,单纯就是给大家体验项目功能使用。\\n 如果觉得好用你就花几分钟自己部署一套,没有API KEY 的同学可以去下面几个推荐的中转站购买:\\n\\n1、\\u003ca href=\\\"https://api.geekai.pro\\\" target=\\\"_blank\\\"\\n style=\\\"font-size: 20px;color:#F56C6C\\\"\\u003ehttps://api.geekai.pro\\u003c/a\\u003e\\n2、\\u003ca href=\\\"https://api.geekai.me\\\" target=\\\"_blank\\\"\\n style=\\\"font-size: 20px;color:#F56C6C\\\"\\u003ehttps://api.geekai.me\\u003c/a\\u003e\\n\\n支持MidJourney,OpenAI,Claude,DeepSeek,以及国内各个厂家的大模型,现在有超级优惠,价格远低于官方。\",\"updated\":true}');
132 |
133 | -- --------------------------------------------------------
134 |
135 | --
136 | -- 表的结构 `geekai_files`
137 | --
138 |
139 | DROP TABLE IF EXISTS `geekai_files`;
140 | CREATE TABLE `geekai_files` (
141 | `id` int NOT NULL,
142 | `user_id` int NOT NULL COMMENT '用户 ID',
143 | `name` varchar(100) NOT NULL COMMENT '文件名',
144 | `obj_key` varchar(100) DEFAULT NULL COMMENT '文件标识',
145 | `url` varchar(255) NOT NULL COMMENT '文件地址',
146 | `ext` varchar(10) NOT NULL COMMENT '文件后缀',
147 | `size` bigint NOT NULL DEFAULT '0' COMMENT '文件大小',
148 | `created_at` datetime NOT NULL COMMENT '创建时间'
149 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户文件表';
150 |
151 | -- --------------------------------------------------------
152 |
153 | --
154 | -- 表的结构 `geekai_products`
155 | --
156 |
157 | DROP TABLE IF EXISTS `geekai_products`;
158 | CREATE TABLE `geekai_products` (
159 | `id` int NOT NULL,
160 | `name` varchar(30) NOT NULL COMMENT '名称',
161 | `price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '价格',
162 | `discount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '优惠金额',
163 | `days` smallint NOT NULL DEFAULT '0' COMMENT '延长天数',
164 | `power` int NOT NULL DEFAULT '0' COMMENT '增加算力值',
165 | `enabled` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否启动',
166 | `sales` int NOT NULL DEFAULT '0' COMMENT '销量',
167 | `sort_num` tinyint NOT NULL DEFAULT '0' COMMENT '排序',
168 | `created_at` datetime NOT NULL,
169 | `updated_at` datetime NOT NULL,
170 | `app_url` varchar(255) DEFAULT NULL COMMENT 'App跳转地址',
171 | `url` varchar(255) DEFAULT NULL COMMENT '跳转地址'
172 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='会员套餐表';
173 |
174 | --
175 | -- 转存表中的数据 `geekai_products`
176 | --
177 |
178 | INSERT INTO `geekai_products` (`id`, `name`, `price`, `discount`, `days`, `power`, `enabled`, `sales`, `sort_num`, `created_at`, `updated_at`, `app_url`, `url`) VALUES
179 | (5, '100次点卡', 9.99, 6.99, 0, 100, 1, 0, 0, '2023-08-28 10:55:08', '2024-10-23 18:12:29', NULL, NULL),
180 | (6, '200次点卡', 19.90, 15.99, 0, 200, 1, 0, 0, '1970-01-01 08:00:00', '2024-10-23 18:12:36', NULL, NULL);
181 |
182 | -- --------------------------------------------------------
183 |
184 | --
185 | -- 表的结构 `geekai_redeems`
186 | --
187 |
188 | DROP TABLE IF EXISTS `geekai_redeems`;
189 | CREATE TABLE `geekai_redeems` (
190 | `id` int NOT NULL,
191 | `user_id` int NOT NULL COMMENT '用户 ID',
192 | `name` varchar(30) NOT NULL COMMENT '兑换码名称',
193 | `amount` int NOT NULL COMMENT '额度',
194 | `code` varchar(100) NOT NULL COMMENT '兑换码',
195 | `enabled` tinyint(1) NOT NULL COMMENT '是否启用',
196 | `created_at` datetime NOT NULL,
197 | `redeemed_at` int NOT NULL COMMENT '兑换时间'
198 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='兑换码';
199 |
200 | -- --------------------------------------------------------
201 |
202 | --
203 | -- 表的结构 `geekai_score_logs`
204 | --
205 |
206 | DROP TABLE IF EXISTS `geekai_score_logs`;
207 | CREATE TABLE `geekai_score_logs` (
208 | `id` int NOT NULL,
209 | `user_id` int NOT NULL COMMENT '用户ID',
210 | `username` varchar(30) NOT NULL COMMENT '用户名',
211 | `type` tinyint(1) NOT NULL COMMENT '类型(1:充值,2:消费,3:退费)',
212 | `amount` smallint NOT NULL COMMENT '算力数值',
213 | `balance` int NOT NULL COMMENT '余额',
214 | `subject` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '主题',
215 | `remark` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '备注',
216 | `mark` tinyint(1) NOT NULL COMMENT '资金类型(0:支出,1:收入)',
217 | `created_at` datetime NOT NULL COMMENT '创建时间'
218 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户积分消费日志';
219 |
220 | -- --------------------------------------------------------
221 |
222 | --
223 | -- 表的结构 `geekai_users`
224 | --
225 |
226 | DROP TABLE IF EXISTS `geekai_users`;
227 | CREATE TABLE `geekai_users` (
228 | `id` int NOT NULL,
229 | `username` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户名',
230 | `mobile` char(11) DEFAULT NULL COMMENT '手机号',
231 | `email` varchar(50) DEFAULT NULL COMMENT '邮箱地址',
232 | `nickname` varchar(30) NOT NULL COMMENT '昵称',
233 | `password` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '密码',
234 | `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '头像',
235 | `salt` char(12) NOT NULL COMMENT '密码盐',
236 | `scores` int NOT NULL DEFAULT '0' COMMENT '剩余积分',
237 | `expired_time` int NOT NULL COMMENT '用户过期时间',
238 | `status` tinyint(1) NOT NULL COMMENT '当前状态',
239 | `last_login_at` int NOT NULL COMMENT '最后登录时间',
240 | `vip` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否会员',
241 | `last_login_ip` char(16) NOT NULL COMMENT '最后登录 IP',
242 | `openid` varchar(100) DEFAULT NULL COMMENT '第三方登录账号ID',
243 | `platform` varchar(30) DEFAULT NULL COMMENT '登录平台',
244 | `created_at` datetime NOT NULL,
245 | `updated_at` datetime NOT NULL
246 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户表';
247 |
248 | --
249 | -- 转存表中的数据 `geekai_users`
250 | --
251 |
252 | INSERT INTO `geekai_users` (`id`, `username`, `mobile`, `email`, `nickname`, `password`, `avatar`, `salt`, `scores`, `expired_time`, `status`, `last_login_at`, `vip`, `last_login_ip`, `openid`, `platform`, `created_at`, `updated_at`) VALUES
253 | (4, '18888888888', '18888888888', 'abc123@qq.com', '极客学长', 'c4a1188178c48afab68735ded98b71eb05b14f2990edf3bb98c4d94e5fd470b4', '/static/upload/2025/3/1742545587542812.png', 'nnubmo94', 3157, 0, 1, 1742703112, 0, '127.0.0.1', '', '', '2024-11-22 12:12:53', '2025-03-23 12:11:52'),
254 | (53, 'yangjian@pvc123.com', '', 'yangjian@pvc123.com', '用户@758924', 'f4604f8d48a43a5ebb72230a4c1309a6024dbce0aa4176539db24f56b4b9ae27', '/images/avatar/user.png', 'v4tv1ouv', 100, 0, 1, 0, 0, '', '', '', '2025-03-19 15:45:04', '2025-03-19 15:45:04');
255 |
256 | -- --------------------------------------------------------
257 |
258 | --
259 | -- 表的结构 `geekai_user_login_logs`
260 | --
261 |
262 | DROP TABLE IF EXISTS `geekai_user_login_logs`;
263 | CREATE TABLE `geekai_user_login_logs` (
264 | `id` int NOT NULL,
265 | `user_id` int NOT NULL COMMENT '用户ID',
266 | `username` varchar(30) NOT NULL COMMENT '用户名',
267 | `login_ip` char(16) NOT NULL COMMENT '登录IP',
268 | `login_address` varchar(30) NOT NULL COMMENT '登录地址',
269 | `created_at` datetime NOT NULL,
270 | `updated_at` datetime NOT NULL
271 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户登录日志';
272 |
273 | --
274 | -- 转储表的索引
275 | --
276 |
277 | --
278 | -- 表的索引 `geekai_admin_users`
279 | --
280 | ALTER TABLE `geekai_admin_users`
281 | ADD PRIMARY KEY (`id`) USING BTREE,
282 | ADD UNIQUE KEY `username` (`username`) USING BTREE;
283 |
284 | --
285 | -- 表的索引 `geekai_apps`
286 | --
287 | ALTER TABLE `geekai_apps`
288 | ADD PRIMARY KEY (`id`);
289 |
290 | --
291 | -- 表的索引 `geekai_chat_items`
292 | --
293 | ALTER TABLE `geekai_chat_items`
294 | ADD PRIMARY KEY (`id`),
295 | ADD UNIQUE KEY `chat_id` (`chat_id`);
296 |
297 | --
298 | -- 表的索引 `geekai_chat_messages`
299 | --
300 | ALTER TABLE `geekai_chat_messages`
301 | ADD PRIMARY KEY (`id`),
302 | ADD KEY `chat_id` (`chat_id`);
303 |
304 | --
305 | -- 表的索引 `geekai_configs`
306 | --
307 | ALTER TABLE `geekai_configs`
308 | ADD PRIMARY KEY (`id`),
309 | ADD UNIQUE KEY `marker` (`marker`);
310 |
311 | --
312 | -- 表的索引 `geekai_files`
313 | --
314 | ALTER TABLE `geekai_files`
315 | ADD PRIMARY KEY (`id`);
316 |
317 | --
318 | -- 表的索引 `geekai_products`
319 | --
320 | ALTER TABLE `geekai_products`
321 | ADD PRIMARY KEY (`id`);
322 |
323 | --
324 | -- 表的索引 `geekai_redeems`
325 | --
326 | ALTER TABLE `geekai_redeems`
327 | ADD PRIMARY KEY (`id`),
328 | ADD UNIQUE KEY `code` (`code`);
329 |
330 | --
331 | -- 表的索引 `geekai_score_logs`
332 | --
333 | ALTER TABLE `geekai_score_logs`
334 | ADD PRIMARY KEY (`id`);
335 |
336 | --
337 | -- 表的索引 `geekai_users`
338 | --
339 | ALTER TABLE `geekai_users`
340 | ADD PRIMARY KEY (`id`),
341 | ADD UNIQUE KEY `username` (`username`);
342 |
343 | --
344 | -- 表的索引 `geekai_user_login_logs`
345 | --
346 | ALTER TABLE `geekai_user_login_logs`
347 | ADD PRIMARY KEY (`id`);
348 |
349 | --
350 | -- 在导出的表使用AUTO_INCREMENT
351 | --
352 |
353 | --
354 | -- 使用表AUTO_INCREMENT `geekai_admin_users`
355 | --
356 | ALTER TABLE `geekai_admin_users`
357 | MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=137;
358 |
359 | --
360 | -- 使用表AUTO_INCREMENT `geekai_apps`
361 | --
362 | ALTER TABLE `geekai_apps`
363 | MODIFY `id` int NOT NULL AUTO_INCREMENT;
364 |
365 | --
366 | -- 使用表AUTO_INCREMENT `geekai_chat_items`
367 | --
368 | ALTER TABLE `geekai_chat_items`
369 | MODIFY `id` int NOT NULL AUTO_INCREMENT;
370 |
371 | --
372 | -- 使用表AUTO_INCREMENT `geekai_chat_messages`
373 | --
374 | ALTER TABLE `geekai_chat_messages`
375 | MODIFY `id` bigint NOT NULL AUTO_INCREMENT;
376 |
377 | --
378 | -- 使用表AUTO_INCREMENT `geekai_configs`
379 | --
380 | ALTER TABLE `geekai_configs`
381 | MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;
382 |
383 | --
384 | -- 使用表AUTO_INCREMENT `geekai_files`
385 | --
386 | ALTER TABLE `geekai_files`
387 | MODIFY `id` int NOT NULL AUTO_INCREMENT;
388 |
389 | --
390 | -- 使用表AUTO_INCREMENT `geekai_products`
391 | --
392 | ALTER TABLE `geekai_products`
393 | MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7;
394 |
395 | --
396 | -- 使用表AUTO_INCREMENT `geekai_redeems`
397 | --
398 | ALTER TABLE `geekai_redeems`
399 | MODIFY `id` int NOT NULL AUTO_INCREMENT;
400 |
401 | --
402 | -- 使用表AUTO_INCREMENT `geekai_score_logs`
403 | --
404 | ALTER TABLE `geekai_score_logs`
405 | MODIFY `id` int NOT NULL AUTO_INCREMENT;
406 |
407 | --
408 | -- 使用表AUTO_INCREMENT `geekai_users`
409 | --
410 | ALTER TABLE `geekai_users`
411 | MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=54;
412 |
413 | --
414 | -- 使用表AUTO_INCREMENT `geekai_user_login_logs`
415 | --
416 | ALTER TABLE `geekai_user_login_logs`
417 | MODIFY `id` int NOT NULL AUTO_INCREMENT;
418 | COMMIT;
419 |
420 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
421 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
422 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
423 |
--------------------------------------------------------------------------------