├── .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 | --------------------------------------------------------------------------------