# 079Project **Repository Path**: mumu2009/079-project ## Basic Information - **Project Name**: 079Project - **Description**: a GNN-based ai model,based on nodejs - **Primary Language**: NodeJS - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-10-31 - **Last Updated**: 2025-11-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 079Project 集中化的 `main.cjs` 是一个基于GNN并经过向量化的神经模型 > 当前仓库仍处在实验阶段,接口和行为可能随时调整。如果遇到问题或希望反馈,请联系 3873636760@qq.com。 > > 注意,之前的1.0.0-5.0.0都是不能运行的,如果需要使用请使用6.0.0版本 --- ## 核心能力 - **统一运行时**:单文件 `main.cjs` 负责存储、图谱、学习、推理以及 HTTP 网关。 - **多副本控制器集群**:内置 A/B/C 三个控制器实例,实现在线服务、热备和验证三种角色,并支持轮换学习。 - **图谱存储**:优先使用 LMDB,无法打开时自动回落到 JSON 文件映射,确保离线环境可运行。 - **机器人语料管线**:支持 `robots/` 目录 TXT 文件与 `lemma.csv` 词形映射,提供预加载与在线 `/robots/ingest` 接口。 - **在线检索回退**:`OnlineResearcher` 先查远程接口(可配置),失败时回退至本地图谱扩散建议。 - **快照与回滚**:支持持久化图谱与 KVM 状态至 `snapshots/`,便于实验对比和快速恢复。 --- ## 环境准备 - Node.js ≥ 18(建议使用最新 LTS 或 Node 24,可稳定运行当前依赖)。 - Windows 环境默认使用 PowerShell (`pwsh.exe`);Linux/Mac 仅需替换命令终端即可。 - 安装依赖: ```powershell npm install ``` > 如果缺失某些依赖,可使用 `node tools_install.js main.cjs` 自动安装后再启动。 --- ## 运行方式 ```powershell node main.cjs [选项] ``` 常用选项: | 参数 | 环境变量 | 默认 | 说明 | | -------------------- | -------------------- | ------------------------ | ---------------------- | | `--base-dir=` | `AI_BASE_DIR` | `runtime_store/` | JSON 回落与运行时缓存目录 | | `--lmdb-dir=` | `LMDB_DIR` | `./lmdb` | LMDB 数据库根目录 | | `--port=` | `CONTROLLER_PORT` | `5080` | HTTP 网关端口 | | `--study-port=` | `AI_STUDY_PORT` | `5081` | 预留学习端口(当前未开放) | | `--robots-dir=` | `AI_ROBOTS_DIR` | `./robots` | 机器人语料目录 | | `--lemma-csv=` | `AI_LEMMA_CSV` | `./lemma.csv` | 词形还原映射表 | | `--robots-limit=` | `AI_ROBOTS_LIMIT` | `200` | 启动时预加载的机器人文档数;`0` 表示跳过 | | `--robots-autoload=` | `AI_ROBOTS_AUTOLOAD` | `true` | 控制是否自动预热机器人语料 | | `--redis-url=` | `REDIS_URL` | `redis://127.0.0.1:6379` | Redis 同步通道(可选) | | `--channel=` | `AI_REDIS_CHANNEL` | `AI-model-workspace` | Redis 发布/订阅频道 | | `--search-endpoint=` | `AI_SEARCH_ENDPOINT` | 空 | 外部检索 API(可选) | 示例: ```powershell node main.cjs --robots-limit=5000 --robots-dir=robots --lemma-csv=lemma.csv ``` 启动后关键日志: - `[LMDB] Falling back...`:LMDB 打开失败时的提示,自动回落到 JSON 存储。 - `[Bootstrap] Preloading ... robots documents...`:机器人语料预热进度。 - `[Gateway] listening on 5080`:HTTP 服务已启动。 --- ## HTTP 接口 所有接口均由 `GatewayServer` 通过 Express 暴露,默认前缀为 `/`。 ### 主要路由 - `POST /api/chat` - 请求体:`{ text?: string, message?: string, tokens?: string[], words?: string[], vocab?: string[], sessionId?: string }` - 自动复用 `message/words/vocab` 字段,并在缺失时回退到 `text` 的分词。 - 响应包含模因图谱激活向量、种子、会话 ID 与当前模型参数。 - `POST /api/array/chat` - 构建 Spark 多层阵列请求,可选 `options.perturbations`、`options.multiLayer` 控制扰动与层级。 - `GET /robots/list` - 返回机器人语料目录中的 TXT 文件列表。 - `POST /robots/ingest` - 请求体支持 `limit`、`offset`、`shuffle`、`files` 等字段。 - 返回逐文档的入库详情,可在服务运行中按需再灌注语料。 - `POST /api/corpus/ingest` - 用于自定义文档入库,需包含 `text` 或 `tokens`。 - `POST /api/corpus/forget` - 支持根据 `olderThan`(时间戳)与 `limit` 清理过期 meme。 - `POST /api/corpus/online` - 对接在线检索;当远程请求失败时自动回退到本地图谱扩散。 - `GET /api/snapshots` - 罗列 `snapshots/` 中的快照文件。 - 配套 `POST /api/snapshots/create`、`POST /api/snapshots/restore/:id`、`DELETE /api/snapshots/:id` 管理快照生命周期。 - `GET /api/system/status` - 返回进程运行指标、控制器健康状态、Redis 连接信息等。 - `GET /api/shards` - 查看 Spark 分片最近的请求相似度与响应记录。 静态页面:`/`、`/index.html`、`/indexmain.html`、`/chat_straight.html`、`/monitor.html` 由网关读取 `public/` 下的 HTML 文件返回,无需依赖旧版 `express.static`。 --- ## 数据目录 - `robots/`:机器人语料,预期为 UTF-8 TXT 文件。系统按段落划分并跳过过短内容。 - `lemma.csv`:词形映射表,可扩展多语言词形,还原后参与建图。 - `lmdb/`:默认 LMDB 存储目录,当不可用时同目录下生成 `*.json` 文件作为替代。 - `runtime_store/`:运行期快照、缓存等临时文件。 - `snapshots/`:`SnapshotManager` 导出的 JSON 快照。 --- ## 常见问题 1. **LMDB 报错并回落** - 日志出现 `[LMDB] Falling back to JSON store for ...` 时表示无法打开 LMDB,可检查: - 是否缺少 `node-gyp`/`lmdb` 的编译依赖。 - 路径权限、磁盘空间是否充足。 - 如果无需 LMDB,可忽略该日志,系统会使用 JSON 映射继续运行。 2. **机器人语料预热后返回空结果** - 确保语料中含有足够长的段落(默认最短 12 字符)。 - 预热完成后可通过 `POST /robots/ingest` 再次尝试灌注。 - `RuntimeState.processInput` 会优先使用前端传入的 `tokens/words/vocab` 字段,确保前端正确传值。 3. **回复只出现固定词** - 现有逻辑会过滤与输入无关的高频节点,只保留与种子 meme 互联的词;若仍出现异常,可检查语料是否包含足够多样的词或重新 ingest。 4. **自定义激活/转移函数** - 仅当 `activationType` 或 `transferType` 设置为 `custom` 时,系统才会编译 `activationCustom`、`transferCustom`。未使用自定义逻辑时保持空字符串即可。 --- ## 开发建议 - `main.cjs` 超过 2000 行,建议使用编辑器的折叠与符号导航快速定位模块。 - 新增实验逻辑时首选扩展类(如 `RuntimeState`、`SparkArray`),避免在顶层直接修改流程。 - 使用 `node main.cjs --robots-autoload=false` 可跳过预热,加速调试周期。 - 调整令牌化策略时修改 `tokenize()`,当前实现保留 `a-z0-9_-` 与 CJK(`-` 内其他符号会被过滤)。 --- ## 许可证 本项目遵循 LGPL-3.0 许可证,详情参阅仓库中的 `LICENSE` 文件。 --- © Phoenix 079Project