diff --git a/README.md b/README.md index ac1aba6..2d6149f 100644 --- a/README.md +++ b/README.md @@ -1,167 +1,161 @@ -

- Midway Logo -

- -

cool-admin(midway版)一个很酷的后台权限管理系统,开源免费,模块化、插件化、极速开发CRUD,方便快速构建迭代后台管理系统,支持serverless、docker、普通服务器等多种方式部署 -到 官网 进一步了解。 -

- GitHub license - GitHub tag - GitHub tag -

+# 后端项目架构分析报告 ## 技术栈 -- 后端:**`node.js` `midway.js` `koa.js` `typescript`** -- 前端:**`vue.js` `element-plus` `jsx` `pinia` `vue-router`** -- 数据库:**`mysql` `postgresql` `sqlite`** +- **框架**: Midway.js 3.x (基于Node.js的企业级框架) +- **数据库**: MySQL + TypeORM +- **缓存**: Redis +- **AI集成**: LangChain +- **WebSocket**: Socket.IO +- **TypeScript**: 全栈TypeScript支持 -如果你是前端,后端的这些技术选型对你是特别友好的,前端开发者可以较快速地上手。 -如果你是后端,Typescript 的语法又跟 java、php 等特别类似,一切看起来也是那么得熟悉。 +## 系统架构 -如果你想使用java版本后端,请移步[cool-admin-java](https://cool-js.com/admin/java/introduce.html) - -#### 官网 - -[https://cool-js.com](https://cool-js.com) - - -## 演示 - -[AI极速编码](https://cool-js.com/ai/introduce.html) - -[https://show.cool-admin.com](https://show.cool-admin.com) - -- 账户:admin -- 密码:123456 - -Admin Home - - -#### 项目前端 - -[https://github.com/cool-team-official/cool-admin-vue](https://github.com/cool-team-official/cool-admin-vue) - -## 微信群 - -Admin Wechat - -## 运行 - -#### 修改数据库配置,配置文件位于`src/config/config.local.ts` - -以Mysql为例,其他数据库请参考[数据库配置文档](https://cool-js.com/admin/node/quick.html#%E6%95%B0%E6%8D%AE%E5%BA%93%E9%85%8D%E7%BD%AE) - -Mysql(`>=5.7版本`),建议 8.0,node 版本(`>=16.x`),建议 18.x,首次启动会自动初始化并导入数据 - -```ts -// mysql,驱动已经内置,无需安装 -typeorm: { - dataSource: { - default: { - type: 'mysql', - host: '127.0.0.1', - port: 3306, - username: 'root', - password: '123456', - database: 'cool', - // 自动建表 注意:线上部署的时候不要使用,有可能导致数据丢失 - synchronize: true, - // 打印日志 - logging: false, - // 字符集 - charset: 'utf8mb4', - // 是否开启缓存 - cache: true, - // 实体路径 - entities: ['**/modules/*/entity'], - }, - }, - }, +### 1. 目录结构 ``` -#### 安装依赖并运行 - -```bash -$ npm i -$ npm run dev -$ open http://localhost:8001/ +src/ +├── config/ # 配置文件 +├── modules/ # 业务模块 +├── comm/ # 通用工具 +└── plugins/ # 插件系统 ``` -注: `npm i`如果安装失败可以尝试使用[cnpm](https://developer.aliyun.com/mirror/NPM?from=tnpm),或者切换您的镜像源,推荐使用[pnpm](https://pnpm.io/) +### 2. 核心模块 +- 基础服务 (base) +- 用户管理 (user) +- 任务调度 (task) +- 消息服务 (chat) +- 文件处理 (space) +- 订单系统 (order) -## CURD(快速增删改查) +### 3. 中间件集成 +- 跨域处理 (@midwayjs/cross-domain) +- 文件上传 (@midwayjs/upload) +- 数据验证 (@midwayjs/validate) +- 静态文件服务 (@midwayjs/static-file) +- 视图渲染 (@midwayjs/view-ejs) -大部分的后台管理系统,或者 API 服务都是对数据进行管理,所以可以看到大量的 CRUD 场景(增删改查),cool-admin 对此进行了大量地封装,让这块的编码量变得极其地少。 +## 数据层设计 -#### 新建一个数据表 +1. **数据库设计** + - TypeORM实体映射 + - 数据库连接池 + - 事务管理 + - 软删除支持 -`src/modules/demo/entity/goods.ts`,项目启动数据库会自动创建该表,无需手动创建 +2. **缓存策略** + - Redis缓存集成 + - 多级缓存架构 + - 缓存失效策略 -```ts -import { BaseEntity } from '@cool-midway/core'; -import { Column, Entity, Index } from 'typeorm'; +3. **文件存储** + - 本地文件存储 + - 支持云存储扩展 + - 文件处理中间件 -/** - * 商品 - */ -@Entity('demo_app_goods') -export class DemoAppGoodsEntity extends BaseEntity { - @Column({ comment: '标题' }) - title: string; +## API设计 - @Column({ comment: '图片' }) - pic: string; +1. **REST API** + - 标准HTTP方法 + - 统一响应格式 + - 版本控制 + - 参数验证 - @Column({ comment: '价格', type: 'decimal', precision: 5, scale: 2 }) - price: number; -} -``` +2. **WebSocket** + - 实时消息推送 + - 房间管理 + - 心跳检测 + - 断线重连 -#### 编写 api 接口 +3. **AI服务集成** + - LangChain框架集成 + - OpenAI API对接 + - ChromaDB向量数据库 -`src/modules/demo/controller/app/goods.ts`,快速编写 6 个 api 接口 +## 安全特性 -```ts -import { CoolController, BaseController } from '@cool-midway/core'; -import { DemoAppGoodsEntity } from '../../entity/goods'; +1. **认证授权** + - JWT认证 + - 权限管理 + - 角色控制 + - 访问控制列表 -/** - * 商品 - */ -@CoolController({ - api: ['add', 'delete', 'update', 'info', 'list', 'page'], - entity: DemoAppGoodsEntity, -}) -export class DemoAppGoodsController extends BaseController { - /** - * 其他接口 - */ - @Get('/other') - async other() { - return this.ok('hello, cool-admin!!!'); - } -} -``` +2. **数据安全** + - 参数验证 + - SQL注入防护 + - XSS防护 + - CSRF防护 -这样我们就完成了 6 个接口的编写,对应的接口如下: +3. **系统安全** + - 请求限流 + - 日志审计 + - 敏感信息加密 + - IP黑名单 -- `POST /app/demo/goods/add` 新增 -- `POST /app/demo/goods/delete` 删除 -- `POST /app/demo/goods/update` 更新 -- `GET /app/demo/goods/info` 单个信息 -- `POST /app/demo/goods/list` 列表信息 -- `POST /app/demo/goods/page` 分页查询(包含模糊查询、字段全匹配等) +## 性能优化 -### 部署 +1. **数据库优化** + - 连接池管理 + - 查询优化 + - 索引优化 + - 缓存策略 -[部署教程](https://cool-js.com/admin/node/other/deploy.html) +2. **应用优化** + - 异步处理 + - 并发控制 + - 内存管理 + - 响应压缩 -### 内置指令 +## 运维特性 -- 使用 `npm run lint` 来做代码风格检查。 +1. **部署方案** + - PM2进程管理 + - Docker容器化 + - 环境配置 + - 负载均衡 -[midway]: https://midwayjs.org +2. **监控系统** + - 性能监控 + - 错误追踪 + - 日志收集 + - 告警机制 -### 低价服务器 +## 待优化点 -[阿里云、腾讯云、华为云低价云服务器,不限新老](https://cool-js.com/ad/server.html) +1. **架构优化** + - 服务拆分 + - 微服务改造 + - 队列系统 + - 分布式架构 + +2. **性能提升** + - 缓存策略优化 + - 数据库性能 + - 并发处理 + - 响应时间 + +3. **可维护性** + - 单元测试覆盖 + - 文档完善 + - 代码规范 + - 错误处理 + +## 建议改进 + +1. **技术升级** + - 引入消息队列 + - 完善监控系统 + - 优化日志体系 + - 增强安全机制 + +2. **架构改进** + - 服务解耦 + - API网关 + - 服务发现 + - 容器编排 + +3. **开发流程** + - 自动化测试 + - CI/CD完善 + - 代码审查 + - 版本管理 \ No newline at end of file diff --git a/src/modules/flow/nodes/llm/config.ts b/src/modules/flow/nodes/llm/config.ts index 81f52b5..d7e3c3e 100644 --- a/src/modules/flow/nodes/llm/config.ts +++ b/src/modules/flow/nodes/llm/config.ts @@ -171,4 +171,45 @@ export const ConfigLLM: { [key in LLMModelType]?: any } = { }, ], }, + // deepseek + deepseek: { + // 通用配置 + comm: { + apiKey: 'API密钥', + baseURL: 'https://api.deepseek.com/v1', + }, + // 专有配置 + options: [ + { + field: 'model', + title: 'Deepseek', + select: [ + 'deepseek-chat', + 'deepseek-coder', + 'deepseek-chat-v1', + ], + default: 'deepseek-chat', + }, + { + field: 'temperature', + type: 'number', + title: '温度', + default: 0.7, + enable: true, + max: 1, + min: 0.1, + supports: [], + }, + { + field: 'maxTokens', + type: 'number', + title: '最大token', + default: 2048, + enable: true, + max: 8192, + min: 1, + supports: [], + }, + ], + }, }; diff --git a/src/modules/flow/nodes/llm/model.ts b/src/modules/flow/nodes/llm/model.ts index ac0e71f..36beff4 100644 --- a/src/modules/flow/nodes/llm/model.ts +++ b/src/modules/flow/nodes/llm/model.ts @@ -4,6 +4,7 @@ import { ChatZhipuAI } from '@langchain/community/chat_models/zhipuai'; import { Provide } from '@midwayjs/core'; import { ChatOpenAI } from '@langchain/openai'; import { ChatOllama } from '@langchain/community/chat_models/ollama'; +import { ChatDeepseek } from './models/deepseek'; /** * 模型类型 @@ -19,6 +20,8 @@ export const CommModel = { zhipu: ChatZhipuAI, // ollama 本地大模型 ollama: ChatOllama, + // deepseek + deepseek: ChatDeepseek, }; // LLM类型键 @@ -34,9 +37,7 @@ export class NodeLLMModel { * @param name * @returns */ - async getModel( - name: string - ): Promise { + async getModel(name: string) { return CommModel[name]; } } diff --git a/src/modules/flow/nodes/llm/models/deepseek.ts b/src/modules/flow/nodes/llm/models/deepseek.ts new file mode 100644 index 0000000..dd5f7df --- /dev/null +++ b/src/modules/flow/nodes/llm/models/deepseek.ts @@ -0,0 +1,83 @@ +import { BaseChatModel } from "@langchain/core/language_models/chat_models"; +import { BaseChatModelParams } from "@langchain/core/language_models/chat_models"; +import { BaseMessage, AIMessage } from "@langchain/core/messages"; +import { CallbackManagerForLLMRun } from "@langchain/core/callbacks/manager"; +import { ChatCompletionResponse } from "./types"; + +/** + * Deepseek模型参数接口 + */ +export interface DeepseekInput extends BaseChatModelParams { + apiKey: string; + baseURL?: string; + temperature?: number; + maxTokens?: number; + modelName?: string; +} + +/** + * Deepseek聊天模型实现 + */ +export class ChatDeepseek extends BaseChatModel { + apiKey: string; + baseURL: string; + temperature: number; + maxTokens: number; + modelName: string; + + constructor(fields?: Partial) { + super(fields ?? {}); + + this.apiKey = fields?.apiKey ?? ""; + this.baseURL = fields?.baseURL ?? "https://api.deepseek.com/v1"; + this.temperature = fields?.temperature ?? 0.7; + this.maxTokens = fields?.maxTokens ?? 2048; + this.modelName = fields?.modelName ?? "deepseek-chat"; + } + + /** + * 生成聊天补全 + */ + async _generate( + messages: BaseMessage[], + options: this["ParsedCallOptions"], + runManager?: CallbackManagerForLLMRun + ) { + const response = await fetch(`${this.baseURL}/chat/completions`, { + method: "POST", + headers: { + "Content-Type": "application/json", + "Authorization": `Bearer ${this.apiKey}`, + }, + body: JSON.stringify({ + model: this.modelName, + messages: messages.map(message => ({ + role: message._getType() === "human" ? "user" : "assistant", + content: message.content, + })), + temperature: this.temperature, + max_tokens: this.maxTokens, + stream: false, + }), + }); + + if (!response.ok) { + throw new Error(`Deepseek API 请求失败: ${response.statusText}`); + } + + const data = await response.json() as ChatCompletionResponse; + const text = data.choices[0].message.content; + + return { + generations: [{ + text, + message: new AIMessage(text), + }], + }; + } + + /** 获取默认参数 */ + _llmType(): string { + return "deepseek"; + } +} \ No newline at end of file diff --git a/src/modules/flow/nodes/llm/models/types.ts b/src/modules/flow/nodes/llm/models/types.ts new file mode 100644 index 0000000..df854f4 --- /dev/null +++ b/src/modules/flow/nodes/llm/models/types.ts @@ -0,0 +1,19 @@ +export interface ChatCompletionResponse { + id: string; + object: string; + created: number; + model: string; + choices: { + message: { + role: string; + content: string; + }; + finish_reason: string; + index: number; + }[]; + usage: { + prompt_tokens: number; + completion_tokens: number; + total_tokens: number; + }; +} \ No newline at end of file