Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d38cbea01a | |||
| 00d074efca | |||
| 055c60aae2 | |||
| 74b95f9f18 | |||
| a3a209da0a | |||
| 7cdccd9bef | |||
| 849fe063eb | |||
| 3417709a79 | |||
| 3f72306e78 | |||
| f06260cf78 | |||
| e1ab11c007 | |||
| 386fa20c84 | |||
| 108a496dab | |||
| 63c597248f |
266
MEMORY.md
266
MEMORY.md
@@ -1,8 +1,58 @@
|
||||
# MEMORY.md - 长期记忆
|
||||
|
||||
## 开发规范
|
||||
## 项目索引
|
||||
|
||||
### 开发测试流程 ⭐⭐⭐
|
||||
详细项目信息请查看 `PROJECTS.md`,包含启动命令、检查方式、端口分配等。
|
||||
|
||||
| 项目 | 仓库 | 端口 | 状态 |
|
||||
|------|------|------|------|
|
||||
| PDF翻译助手 V2 | 本地 | 19000 | ✅ 运行中 |
|
||||
| 碎片信息记录 | 本地 | 19009 | ✅ 运行中 |
|
||||
| ParamHub Python | 本地 | 19010 | ✅ 运行中 |
|
||||
| 项目服务管理面板 | 本地 | 19013 | ✅ 运行中 |
|
||||
| 视觉记录系统 | /coder/vision-record | 19016 | ✅ 运行中 |
|
||||
| AI Chat App | /coder/ai-chat-app | - | 📦 开发中 |
|
||||
| 网页助手插件 | /coder/web-context-extension | - | 📦 已完成 |
|
||||
| 磁盘大文件扫描 | 本地 | - | 📦 已完成 |
|
||||
|
||||
---
|
||||
|
||||
## ParamHub Python - 参数百科系统
|
||||
|
||||
**Git仓库**: http://192.168.2.8:12007/coder/param-hub-python
|
||||
|
||||
### 核心功能架构
|
||||
|
||||
**1. 参数字段配置系统**
|
||||
- 类别层面:基础参数字段(所有子类别共享)
|
||||
- 子类别层面:可添加额外参数字段(extra_fields)
|
||||
- 字段结构:`{key, label, type, description, required, input_style}`
|
||||
- 前端表格列和编辑表单从类别配置动态生成
|
||||
|
||||
**2. 子类别管理**
|
||||
- 内置分类(ai-models、gpus、cpus)支持子类别编辑
|
||||
- 子类别有 `key_features`(关键特性字段)和 `extra_fields`(额外参数)
|
||||
- 智能添加时可选子类别,解析时包含额外字段
|
||||
|
||||
**3. 智能添加/补充解析**
|
||||
- 上传参数截图(规格表、参数页面)而非产品图
|
||||
- AI根据类别字段配置解析参数
|
||||
- 支持多次解析,每次来源记录到 `parse_sources` 数组
|
||||
- 解析来源记录:`{type, timestamp, images, text, updated_fields}`
|
||||
|
||||
**4. 子类别分配**
|
||||
- AI模型:chat、code、reasoning、vision
|
||||
- GPU:datacenter、professional、gaming
|
||||
- CPU:server、desktop、mobile
|
||||
|
||||
**5. 数据字段规范**
|
||||
- 所有参数字段统一为文本类型
|
||||
- 长文本字段(description等)标记 `input_style: 'long'
|
||||
- 发布日期统一格式:YYYY-MM-DD
|
||||
|
||||
---
|
||||
|
||||
## 更新日志
|
||||
|
||||
**必须遵循的工作流程:**
|
||||
|
||||
@@ -166,6 +216,218 @@ server.quit()
|
||||
|
||||
## 更新日志
|
||||
|
||||
- **AI Chat App v3.14.4**:修复API URL拼接问题
|
||||
- 前端自动拼接 `/chat/completions` 到后台配置的 API URL
|
||||
- 解决后台存储 `https://api.xxx/v1` 但前端需要完整 URL 的问题
|
||||
- Git仓库: http://192.168.2.8:12007/coder/ai-chat-app v3.14.4
|
||||
|
||||
- **AI Chat App v3.14.3**:修复普通对话不使用后台配置的LLM
|
||||
- `/api/config` 现根据 `chat_config.llm_config_id` 获取对应的 LLM 配置
|
||||
- 解决原来直接取默认 LLM 配置的问题
|
||||
- 后台管理"对话配置"选择的 LLM 现在在前端生效
|
||||
- Git仓库: http://192.168.2.8:12007/coder/ai-chat-app v3.14.3
|
||||
|
||||
- **AI Chat App v3.14.2**:TTS文本清理优化
|
||||
- 语音播放过滤Markdown特殊字符:标题#、列表-*、代码块、链接、粗体斜体等
|
||||
- 过滤表情符号(emoji)
|
||||
- 过滤引用符号>、分割线等
|
||||
- 清理多余空白,保留纯文本内容
|
||||
- Git仓库: http://192.168.2.8:12007/coder/ai-chat-app v3.14.2
|
||||
|
||||
- **AI Chat App v3.14.1**:TTS流式播放+新对话默认关闭
|
||||
- 新建对话(普通对话和智能体对话)默认关闭语音播放
|
||||
- AI回复边生成边播放(流式TTS),不等完全生成完
|
||||
- 每80字符左右播放一段,智能断句(句子结束符号)
|
||||
- 使用队列机制管理播放,顺序播放各段文本
|
||||
- 切换对话时自动停止当前播放
|
||||
- Git仓库: http://192.168.2.8:12007/coder/ai-chat-app v3.14.1
|
||||
|
||||
- **AI Chat App v3.14.0**:AI回复语音播放功能
|
||||
- 普通对话和智能体对话支持语音播放(Edge TTS)
|
||||
- 对话界面顶部右侧添加语音播放开关按钮(替代原清除按钮)
|
||||
- AI消息操作栏添加播放按钮,点击可播放/停止
|
||||
- 开启后AI回复完成自动播放
|
||||
- 后台管理系统设置添加TTS方案和语音配置
|
||||
- 支持多种中文语音(晓晓、云希等)
|
||||
- API:POST /api/tts(生成语音),GET /api/tts/voices(语音列表)
|
||||
- Git仓库: http://192.168.2.8:12007/coder/ai-chat-app v3.14.0
|
||||
|
||||
- **AI Chat App v3.13.3**:修复用户信息API路由缺失
|
||||
- `/api/user/<int:id>` 只有PUT方法,添加GET方法
|
||||
- 前端初始化可正确获取用户信息(包括头像)
|
||||
- Git仓库: http://192.168.2.8:12007/coder/ai-chat-app v3.13.3
|
||||
|
||||
- **AI Chat App v3.13.2**:修复登录用户跨设备头像不同步
|
||||
- 初始化时从后台 API `/api/user/<id>` 获取最新用户信息(包括头像)
|
||||
- 解决原来只从 localStorage 加载导致换设备头像不更新的问题
|
||||
- 同时更新 localStorage 保持离线可用
|
||||
- Git仓库: http://192.168.2.8:12007/coder/ai-chat-app v3.13.2
|
||||
|
||||
- **AI Chat App v3.13.1**:修复系统设置部分配置项无法保存
|
||||
- init_db 添加兼容逻辑,自动检测并插入缺失的系统配置字段
|
||||
- 解决旧数据库缺少 app_developer、app_update_date、app_technology、app_description 等字段的问题
|
||||
- Git仓库: http://192.168.2.8:12007/coder/ai-chat-app v3.13.1
|
||||
|
||||
- **AI Chat App v3.13.0**:我的页面和关于页面绑定后台系统配置
|
||||
- 版本号、技术基础、开发者、更新日期从后台管理设置生效
|
||||
- 隐私政策、用户协议链接从后台配置读取,点击跳转外部链接
|
||||
- 前端加载后台配置后赋值到 CONFIG.system
|
||||
- 前端加载后台 LLM 配置(api_url、api_key、model)
|
||||
- Git仓库: http://192.168.2.8:12007/coder/ai-chat-app v3.13.0
|
||||
|
||||
- **AI Chat App v3.12.3**:修复发现智能体搜索bug
|
||||
- 搜索功能现在正确过滤基础智能体(basic类别)
|
||||
- filterDiscoverAgents 函数添加 basic 类别处理
|
||||
- Git仓库: http://192.168.2.8:12007/coder/ai-chat-app v3.12.3
|
||||
|
||||
- **AI Chat App v3.12.2**:历史使用记录布局修正
|
||||
- 左边:对话标题
|
||||
- 右边:智能体名字(带样式标签)
|
||||
- 主页最近使用列表同样修正
|
||||
- Git仓库: http://192.168.2.8:12007/coder/ai-chat-app v3.12.2
|
||||
|
||||
- **AI Chat App v3.12.1**:历史使用记录布局调整
|
||||
- 左边:智能体名字(如"代码助手")
|
||||
- 右边:对话标题
|
||||
- 主页最近使用列表同样调整
|
||||
- Git仓库: http://192.168.2.8:12007/coder/ai-chat-app v3.12.1
|
||||
|
||||
- **AI Chat App v3.12.0**:智能体对话标题自动更新+历史显示优化
|
||||
- 智能体对话初始标题改为"新对话",和普通对话一致
|
||||
- 第一次对话和每5次对话自动生成标题(AI总结)
|
||||
- 历史使用界面:左边是对话标题,右边显示智能体类型(工作/学习/生活等)
|
||||
- 主页最近使用列表同样优化显示智能体类型
|
||||
- Git仓库: http://192.168.2.8:12007/coder/ai-chat-app v3.12.0
|
||||
|
||||
- **AI Chat App v3.11.0**:用户头像在对话界面正确显示
|
||||
- 修改消息渲染逻辑,用户头像使用 currentUser.avatar
|
||||
- 普通对话和智能体对话界面都正确显示用户修改的头像
|
||||
- AI 头像使用智能体头像(智能体对话)或默认头像(普通对话)
|
||||
- 支持图片头像和 emoji 头像的渲染
|
||||
- Git仓库: http://192.168.2.8:12007/coder/ai-chat-app v3.11.0
|
||||
|
||||
- **AI Chat App v3.10.4**:智能体对话界面工具栏优化
|
||||
- 智能体对话不显示工具选择按钮(深度思考、联网搜索、更多工具)
|
||||
- 智能体使用的工具由后台管理配置决定
|
||||
- 只保留导航按钮(向上/向下滚动)
|
||||
- Git仓库: http://192.168.2.8:12007/coder/ai-chat-app v3.10.4
|
||||
|
||||
- **AI Chat App v3.10.3**:工具选择状态记忆
|
||||
- 更多工具弹窗过滤掉联网搜索(已有独立按钮)
|
||||
- 所有工具默认未启用状态
|
||||
- 普通对话记住上次工具选择(localStorage 'chatEnabledTools')
|
||||
- 智能体对话记住该智能体的上次选择(localStorage 'agentEnabledTools_{agentId}')
|
||||
- Git仓库: http://192.168.2.8:12007/coder/ai-chat-app v3.10.3
|
||||
|
||||
- **AI Chat App v3.10.2**:添加更多工具按钮,支持多选工具
|
||||
- 工具栏添加"更多工具"按钮
|
||||
- 点击显示工具选择弹窗(从后台配置加载)
|
||||
- 支持多选模式,显示选中数量
|
||||
- Backend 返回 allTools 供前端选择
|
||||
- Git仓库: http://192.168.2.8:12007/coder/ai-chat-app v3.10.2
|
||||
|
||||
- **AI Chat App v3.10.1**:系统设置扩展版本信息配置
|
||||
- 后台管理新增:应用简介、技术基础、开发者、更新日期配置
|
||||
- 后台管理新增:隐私政策链接、用户协议链接配置
|
||||
- 前端"关于"页面和"我的"页面底部显示可配置的信息
|
||||
- Git仓库: http://192.168.2.8:12007/coder/ai-chat-app v3.10.1
|
||||
- **AI Chat App v3.10.0**:用户头像上传功能
|
||||
- Backend 添加头像上传 API(base64 格式)
|
||||
- Backend 新增 avatars 目录存储上传的头像
|
||||
- 前端编辑资料页面添加上传头像按钮
|
||||
- 支持 emoji 预设头像和自定义上传头像
|
||||
- 新增 `renderAvatar()` 函数渲染头像(支持 emoji 和图片)
|
||||
- API:POST /api/user/{id}/avatar,GET /api/avatars/{filename}
|
||||
- Git仓库: http://192.168.2.8:12007/coder/ai-chat-app v3.10.0
|
||||
- **AI Chat App v3.9.2**:修复统计功能
|
||||
- LLM 调用完成后记录统计到 backend
|
||||
- 搜索调用完成后记录统计到 backend
|
||||
- 新增 `logStatsToBackend()` 函数
|
||||
- API:POST /api/admin/stats/log
|
||||
- Git仓库: http://192.168.2.8:12007/coder/ai-chat-app v3.9.2
|
||||
- **AI Chat App v3.9.1**:后台管理添加查看用户对话记录功能
|
||||
- 用户管理页面添加"查看对话"按钮
|
||||
- 显示用户对话列表(标题、智能体、消息数、时间)
|
||||
- 点击查看对话详情(完整消息内容)
|
||||
- 支持删除用户对话记录
|
||||
- API:GET /api/user/{id}/conversations/{conv_id}
|
||||
- Git仓库: http://192.168.2.8:12007/coder/ai-chat-app v3.9.1
|
||||
- **AI Chat App v3.9.0**:完整数据同步到 backend
|
||||
- Backend 新增 `user_agents` 表存储用户智能体配置
|
||||
- 初始化时:已登录用户从 backend 加载对话数据
|
||||
- 初始化时:已登录用户从 backend 加载智能体配置(myAgents、favoriteAgents、pinnedAgents)
|
||||
- 添加/移除/置顶/收藏智能体同步到 backend
|
||||
- API:/api/user/{id}/agents(增删改查)
|
||||
- Git仓库: http://192.168.2.8:12007/coder/ai-chat-app v3.9.0
|
||||
- **AI Chat App v3.8.2**:修复用户数据同步逻辑
|
||||
- 创建新对话时先调用 backend API 获取 ID
|
||||
- 发送消息后同步当前对话到 backend
|
||||
- 登录时保存完整用户数据
|
||||
- Git仓库: http://192.168.2.8:12007/coder/ai-chat-app v3.8.2
|
||||
- **AI Chat App v3.8.1**:修复对话创建同步逻辑
|
||||
- Git仓库: http://192.168.2.8:12007/coder/ai-chat-app v3.8.1
|
||||
- backend 新增 conversations 表存储用户对话数据
|
||||
- 对话创建/更新/删除同步到 backend
|
||||
- 登录后自动从 backend 加载对话数据
|
||||
- 用户资料修改同步到 backend
|
||||
- API:/api/user/{id}/conversations(GET/POST/PUT/DELETE)
|
||||
- Git仓库: http://192.168.2.8:12007/coder/ai-chat-app v3.8.0
|
||||
- **AI Chat App v3.7.1**:隐藏注册页面验证码功能
|
||||
- 暂时跳过验证码验证
|
||||
- Git仓库: http://192.168.2.8:12007/coder/ai-chat-app v3.7.1
|
||||
- **AI Chat App v3.7.0**:后台管理添加用户管理功能
|
||||
- backend 新增 users 表存储用户注册信息
|
||||
- 用户注册登录改为调用 backend API(从 localStorage 改为 SQLite)
|
||||
- 后台管理界面新增用户管理页面
|
||||
- 用户管理支持搜索、编辑、重置密码、删除
|
||||
- 注册添加手机号验证码功能(模拟)
|
||||
- API:/api/register、/api/login、/api/admin/users
|
||||
- Git仓库: http://192.168.2.8:12007/coder/ai-chat-app v3.7.0
|
||||
- **AI Chat App v3.6.3**:修复智能体历史使用记录逻辑
|
||||
- 只显示真正有对话消息的智能体记录(messages.length > 0)
|
||||
- 修复点击打开智能体就记录"使用"的问题
|
||||
- Git仓库: http://192.168.2.8:12007/coder/ai-chat-app v3.6.3
|
||||
|
||||
### 2026-04-27
|
||||
- **ParamHub Python v1.7.1**:子类别管理界面重构
|
||||
- 添加子类别编辑弹框,可视化增删改
|
||||
- 子类别列表以卡片样式显示,hover显示操作按钮
|
||||
- 表单输入关键特性字段(逗号分隔)和标签(字段:显示名)
|
||||
- 替换原来的JSON文本编辑方式,更直观易用
|
||||
- Git仓库: http://192.168.2.8:12007/coder/param-hub-python v1.7.1
|
||||
- **ParamHub Python v1.7.0**:支持子类别配置和关键特性显示
|
||||
- 类别数据结构新增 subcategories 字段
|
||||
- 每个子类别可定义 key_features(关键特性字段)和 feature_labels(标签显示名)
|
||||
- 前端模型页面添加子类别选择器,切换显示不同特性
|
||||
- 表格根据子类别动态显示关键特性列
|
||||
- 后台管理支持编辑子类别配置(JSON格式)
|
||||
- 预设子类别:对话模型、代码模型、推理模型、视觉模型等
|
||||
- Git仓库: http://192.168.2.8:12007/coder/param-hub-python v1.7.0
|
||||
- **ParamHub Python v1.6.0**:后台管理添加大模型接口配置功能
|
||||
- 网站配置页面新增 LLM 配置区域
|
||||
- 支持配置 API 地址、API Key、文本模型、视觉模型
|
||||
- LLM 配置从 config.json 动态读取,无需修改代码
|
||||
- Git仓库: http://192.168.2.8:12007/coder/param-hub-python v1.6.0
|
||||
- **ParamHub Python v1.5.0**:多图上传和智能解析产品参数
|
||||
- 所有类别(模型/GPU/CPU/动态分类)支持上传图片解析
|
||||
- 支持一次上传多张图片
|
||||
- AI智能解析可能识别出多个产品
|
||||
- 新增 `/api/parse-images` API 预览解析结果
|
||||
- 智能添加弹窗支持图片上传和粘贴
|
||||
- 配置 LLM Proxy 视觉模型:Qwen/Qwen2-VL-72B-Instruct
|
||||
- Git仓库: http://192.168.2.8:12007/coder/param-hub-python v1.5.0
|
||||
|
||||
### 2026-04-26
|
||||
- **AI对话系统 v3.1.0**:UI重构 - 历史对话列表页
|
||||
- 首页改为历史对话列表页(而非侧边栏)
|
||||
- 新建对话按钮放在右上角
|
||||
- 历史对话列表支持删除操作
|
||||
- 点击对话进入具体对话页面
|
||||
- 对话页面有返回按钮回到列表
|
||||
- API新增 message_count 字段
|
||||
- API新增 GET /api/conversations/{id} 获取详情
|
||||
- Git仓库: http://192.168.2.8:12007/coder/ai-chat-system v3.1.0
|
||||
|
||||
### 2026-04-24
|
||||
- **Xian Favor v4.6.3**:修复Markdown显示开关切换失效
|
||||
- 改用 data-raw-content 属性存储原始内容
|
||||
|
||||
34
PROJECTS.md
34
PROJECTS.md
@@ -174,7 +174,39 @@ curl -s http://localhost:19010/api/categories
|
||||
|
||||
**Git仓库**: http://192.168.2.8:12007/coder/param-hub-python
|
||||
|
||||
**版本**: v1.2.0
|
||||
**版本**: v1.7.1
|
||||
|
||||
**v1.7.1 子类别管理**:
|
||||
- 可视化子类别增删改界面
|
||||
- 卡片样式显示子类别列表
|
||||
- 表单输入关键特性字段和标签
|
||||
|
||||
**v1.7.0 子类别功能**:
|
||||
- 类别支持配置子类别
|
||||
- 前端动态显示子类别关键特性
|
||||
- 后台管理子类别配置
|
||||
|
||||
**v1.6.0 LLM配置**:
|
||||
- 后台管理配置大模型接口
|
||||
- API地址/Key/模型配置
|
||||
- 文本模型和视觉模型分离配置
|
||||
|
||||
**v1.5.0 多图解析**:
|
||||
- 支持多图上传和智能解析
|
||||
- 可能识别多个产品
|
||||
- 图片解析API预览功能
|
||||
|
||||
**v1.5.0 新功能**:
|
||||
- 多图上传和智能解析:所有类别支持上传图片让AI解析参数
|
||||
- 支持一次上传多张图片,综合分析
|
||||
- 可能识别出多个产品,批量添加
|
||||
- 新增 `/api/parse-images` API 预览解析结果
|
||||
- 智能添加弹窗支持图片上传和粘贴
|
||||
- vision_model 配置支持视觉模型
|
||||
|
||||
**v1.4.0 新功能**:
|
||||
- 图片上传功能:编辑时可上传多张图片
|
||||
- 图片保存到 static/uploads 目录
|
||||
|
||||
**v1.2.0 新功能**:
|
||||
- 网站配置管理:后台可修改网站名称、备案号、页脚文字等
|
||||
|
||||
33
memory/2026-04-26.md
Normal file
33
memory/2026-04-26.md
Normal file
@@ -0,0 +1,33 @@
|
||||
# 2026-04-26 每日事务记录
|
||||
|
||||
## 开发任务
|
||||
|
||||
### AI对话系统 v3.1.0 - UI重构:历史对话列表页
|
||||
|
||||
**需求来源**: 优化用户体验,改进对话管理方式
|
||||
|
||||
**主要改动**:
|
||||
1. 首页改为历史对话列表页(而非侧边栏)
|
||||
2. 新建对话按钮放在右上角
|
||||
3. 历史对话列表支持删除操作
|
||||
4. 点击对话进入具体对话页面
|
||||
5. 对话页面有返回按钮回到列表
|
||||
6. API新增 message_count 字段
|
||||
7. API新增 GET /api/conversations/{id} 获取详情
|
||||
|
||||
**Git仓库**: http://192.168.2.8:12007/coder/ai-chat-system v3.1.0
|
||||
|
||||
---
|
||||
|
||||
## 项目信息
|
||||
|
||||
- 项目名: AI对话系统
|
||||
- 目录: `works/ai-chat-system`
|
||||
- 端口: 19020
|
||||
- Git仓库: http://192.168.2.8:12007/coder/ai-chat-system
|
||||
|
||||
---
|
||||
|
||||
## 备注
|
||||
|
||||
今日只记录了 AI对话系统 v3.1.0 一个版本更新。如有其他事务需要补充,请告知。
|
||||
115
memory/2026-04-27.md
Normal file
115
memory/2026-04-27.md
Normal file
@@ -0,0 +1,115 @@
|
||||
# 2026-04-27 每日事务记录
|
||||
|
||||
## 开发任务
|
||||
|
||||
### ParamHub Python - 多图上传和智能解析功能
|
||||
|
||||
**需求来源**: 用户(openclaw-control-ui)
|
||||
|
||||
**v1.5.0 主要改动**:
|
||||
1. 所有类别(模型/GPU/CPU/动态分类)支持上传图片解析
|
||||
2. 支持一次上传多张图片,AI综合分析
|
||||
3. 可能识别出多个产品参数,批量添加
|
||||
4. 新增 `/api/parse-images` API 预览解析结果
|
||||
5. 智能添加弹窗支持图片上传和粘贴
|
||||
6. 添加 vision_model 配置支持视觉模型
|
||||
|
||||
**遇到的问题**:
|
||||
- 图片上传后报错:f-string花括号转义问题导致API错误
|
||||
- 视觉模型配置问题:需要配置 LLM Proxy 的视觉模型
|
||||
- SiliconFlow 视觉模型名称:Qwen/Qwen2-VL-72B-Instruct
|
||||
|
||||
**解决方案**:
|
||||
- 修复 f-string 格式化问题,使用字符串拼接
|
||||
- 配置 LLM Proxy 添加视觉模型提供商
|
||||
- 添加剪贴板粘贴的错误提示(HTTPS/localhost限制)
|
||||
|
||||
**Git仓库**: http://192.168.2.8:12007/coder/param-hub-python v1.5.0
|
||||
|
||||
---
|
||||
|
||||
### ParamHub Python - 大模型接口配置功能
|
||||
|
||||
**需求来源**: 用户(openclaw-control-ui)
|
||||
|
||||
**v1.6.0 主要改动**:
|
||||
1. 网站配置页面新增 LLM 配置区域
|
||||
2. 支持配置 API 地址、API Key、文本模型、视觉模型
|
||||
3. LLM 配置从 config.json 动态读取,无需修改代码
|
||||
4. 删除硬编码的 LLM_CONFIG 常量
|
||||
5. 新增 `get_llm_config()` 函数动态获取配置
|
||||
|
||||
**配置默认值**:
|
||||
- API地址: http://192.168.2.17:19007/v1
|
||||
- 文本模型: auto
|
||||
- 视觉模型: gpt-4-vision-preview
|
||||
|
||||
**Git仓库**: http://192.168.2.8:12007/coder/param-hub-python v1.6.0
|
||||
|
||||
---
|
||||
|
||||
### ParamHub Python - 子类别功能
|
||||
|
||||
**需求来源**: 用户(openclaw-control-ui)
|
||||
|
||||
**v1.7.0 主要改动**:
|
||||
1. 类别数据结构新增 subcategories 字段
|
||||
2. 每个子类别可定义:
|
||||
- id: 子类别ID
|
||||
- name: 子类别名称
|
||||
- icon: 图标
|
||||
- key_features: 关键特性字段列表
|
||||
- feature_labels: 特性显示标签
|
||||
3. 前端模型页面添加子类别选择器
|
||||
4. 表格根据子类别动态显示关键特性列
|
||||
5. 预设子类别配置:对话模型、代码模型、推理模型、视觉模型等
|
||||
|
||||
**v1.7.1 主要改动**:
|
||||
1. 添加子类别编辑弹框(subcategoryModal)
|
||||
2. 子类别列表可视化显示(卡片样式)
|
||||
3. 支持添加、编辑、删除子类别
|
||||
4. 表单输入关键特性字段(逗号分隔)和标签(字段:显示名)
|
||||
5. 替换原来的JSON文本编辑方式
|
||||
|
||||
**Git仓库**: http://192.168.2.8:12007/coder/param-hub-python v1.7.1
|
||||
|
||||
---
|
||||
|
||||
## 技术要点
|
||||
|
||||
### LLM Proxy 视觉模型配置
|
||||
|
||||
添加了 SiliconFlow Vision 提供商:
|
||||
```json
|
||||
{
|
||||
"id": "siliconflow-vision",
|
||||
"name": "SiliconFlow Vision",
|
||||
"base_url": "https://api.siliconflow.cn/v1",
|
||||
"models": ["Qwen/Qwen2-VL-72B-Instruct"],
|
||||
"vision": true
|
||||
}
|
||||
```
|
||||
|
||||
模型别名配置:
|
||||
- `gpt-4-vision-preview` -> `Qwen/Qwen2-VL-72B-Instruct`
|
||||
|
||||
### 剪贴板粘贴图片的限制
|
||||
|
||||
浏览器剪贴板 API `navigator.clipboard.read()` 有安全限制:
|
||||
- 只在 HTTPS 或 localhost 环境下可用
|
||||
- HTTP 环境下会报错 NotAllowedError
|
||||
|
||||
---
|
||||
|
||||
## 项目信息
|
||||
|
||||
- 项目名: ParamHub Python
|
||||
- 目录: `works/param-hub-python`
|
||||
- 端口: 19010
|
||||
- Git仓库: http://192.168.2.8:12007/coder/param-hub-python
|
||||
|
||||
---
|
||||
|
||||
## 备注
|
||||
|
||||
今日主要完成了 ParamHub Python 的三个版本更新,重点是多图解析功能和子类别管理功能的开发。LLM Proxy 也新增了视觉模型支持,使得图片解析功能可以正常工作。
|
||||
132
memory/2026-04-28.md
Normal file
132
memory/2026-04-28.md
Normal file
@@ -0,0 +1,132 @@
|
||||
# 2026-04-28 每日事务记录
|
||||
|
||||
## 开发任务
|
||||
|
||||
### ParamHub Python - 子类别管理与参数字段配置系统
|
||||
|
||||
**需求来源**: 用户(openclaw-control-ui)
|
||||
|
||||
**版本迭代**(下午开发,v1.7.2 ~ v1.14.0):
|
||||
|
||||
| 版本 | 功能 |
|
||||
|------|------|
|
||||
| v1.7.2 | 修复分类编辑API缺失 - 添加 GET /api/categories/<id> |
|
||||
| v1.8.0 | 智能补充参数功能 - 编辑已有产品时上传参数截图/文本补充缺失字段 |
|
||||
| v1.8.1 | 内置分类子类别管理 - 分类管理中可编辑内置类别的子类别配置 |
|
||||
| v1.8.2 | ID自动生成 - 分类和子类别ID无需手动填写 |
|
||||
| v1.9.0 | 子类别字段和筛选 - 所有数据支持子类别字段,列表可筛选 |
|
||||
| v1.9.1 | 产品子类别分配 - 为模型/GPU/CPU等分配子类别 |
|
||||
| v1.10.0 | 参数字段管理 - 类别和子类别可配置参数列表 |
|
||||
| v1.10.1 | 参数字段配置 - 为所有类别配置14-17个参数字段 |
|
||||
| v1.11.0 | 智能添加字段配置解析 - 根据类别参数字段配置解析数据 |
|
||||
| v1.12.0 | 动态字段显示 - 表格列和编辑表单从类别配置动态生成 |
|
||||
| v1.12.1 | 语法错误修复 - JSON.stringify images字段重复定义 |
|
||||
| v1.12.2 | 发布日期统一 - 所有产品发布日期格式 YYYY-MM-DD |
|
||||
| v1.13.0 | 参数截图+解析来源历史 - 图片改为参数截图,支持多次解析并记录来源 |
|
||||
| v1.14.0 | 字段统一为文本类型 - 长文本字段标记 input_style |
|
||||
|
||||
**核心功能点**:
|
||||
|
||||
1. **参数字段配置系统**
|
||||
- 类别层面:基础参数字段(所有子类别共享)
|
||||
- 子类别层面:可添加额外参数字段
|
||||
- 字段结构:key、label、type、description、required、input_style
|
||||
- 前端动态生成表格列和编辑表单
|
||||
|
||||
2. **子类别管理**
|
||||
- 内置分类(ai-models、gpus、cpus)支持子类别编辑
|
||||
- 子类别有 key_features(关键特性)和 extra_fields(额外参数)
|
||||
- 智能添加时可选子类别,解析时包含额外字段
|
||||
|
||||
3. **智能添加/补充解析**
|
||||
- 上传参数截图(规格表、参数页面)而非产品图
|
||||
- AI根据类别字段配置解析参数
|
||||
- 支持多次解析,每次来源记录到 parse_sources
|
||||
- 解析来源记录:timestamp、images、text、updated_fields
|
||||
|
||||
4. **数据结构**
|
||||
```json
|
||||
{
|
||||
"parse_sources": [{
|
||||
"type": "smart_add",
|
||||
"timestamp": "2026-04-28 22:41:00",
|
||||
"images": ["参数截图URL"],
|
||||
"text": "解析文本",
|
||||
"updated_fields": ["补充的字段"]
|
||||
}],
|
||||
"product_images": [] // 产品展示图(后续功能)
|
||||
}
|
||||
```
|
||||
|
||||
**Git仓库**: http://192.168.2.8:12007/coder/param-hub-python
|
||||
|
||||
---
|
||||
|
||||
### AI Chat App - 用户头像在对话界面显示
|
||||
|
||||
**需求来源**: 用户(huangzhuang_bro)
|
||||
|
||||
**v3.11.0 主要改动**:
|
||||
1. 修改 `renderMessages` 函数中的头像逻辑
|
||||
2. 用户头像使用 `currentUser?.avatar || '👤'`
|
||||
3. AI 头像使用智能体头像 `currentAgent?.avatar || '🤖'`
|
||||
4. 使用 `renderAvatar()` 函数渲染用户头像(支持图片和 emoji)
|
||||
5. 普通对话和智能体对话界面都正确显示用户修改的头像
|
||||
|
||||
**Git仓库**: http://192.168.2.8:12007/coder/ai-chat-app v3.11.0
|
||||
|
||||
---
|
||||
|
||||
### AI Chat App - 智能体对话标题自动更新+历史显示优化
|
||||
|
||||
**需求来源**: 用户(huangzhuang_bro)
|
||||
|
||||
**v3.12.0 主要改动**:
|
||||
1. 智能体对话初始标题改为"新对话"(和普通对话一致)
|
||||
2. 第一次对话和每5次对话自动生成标题(AI总结)
|
||||
3. 历史使用界面:左边显示对话标题,右边显示智能体类型
|
||||
4. 主页最近使用列表同样优化显示智能体类型
|
||||
|
||||
**Git仓库**: http://192.168.2.8:12007/coder/ai-chat-app v3.12.0
|
||||
|
||||
---
|
||||
|
||||
### AI Chat App - 我的页面和关于页面绑定后台系统配置
|
||||
|
||||
**需求来源**: 用户(huangzhuang_bro)
|
||||
|
||||
**v3.13.0 主要改动**:
|
||||
1. 前端加载后台配置后赋值到 CONFIG.system
|
||||
2. 我的页面底部显示版本号、技术基础从后台配置读取
|
||||
3. 关于页面所有信息从后台配置读取
|
||||
4. 隐私政策、用户协议链接从后台配置读取
|
||||
|
||||
**Git仓库**: http://192.168.2.8:12007/coder/ai-chat-app v3.13.0
|
||||
|
||||
---
|
||||
|
||||
### AI Chat App - AI回复语音播放功能(Edge TTS)
|
||||
|
||||
**需求来源**: 用户(huangzhuang_bro)
|
||||
|
||||
**v3.14.0 主要改动**:
|
||||
1. 普通对话和智能体对话界面顶部右侧添加语音播放开关按钮
|
||||
2. AI消息操作栏添加播放按钮,点击播放/停止语音
|
||||
3. 开启后AI回复完成自动播放
|
||||
4. 后台管理系统设置添加TTS配置(方案、语音选择)
|
||||
5. 支持多种中文语音(晓晓、云希、云健等)
|
||||
|
||||
**技术要点**:
|
||||
- 使用 edge-tts 库(免费)生成语音
|
||||
- 后端 API:POST /api/tts,GET /api/tts/voices
|
||||
- 前端使用 Audio 对象播放 MP3 音频
|
||||
|
||||
**Git仓库**: http://192.168.2.8:12007/coder/ai-chat-app v3.14.0
|
||||
|
||||
---
|
||||
|
||||
## 备注
|
||||
|
||||
今日完成了两个项目的重要功能:
|
||||
- **ParamHub Python**: 子类别管理、参数字段配置、智能解析系统(14个版本迭代)
|
||||
- **AI Chat App**: 头像显示、标题机制、语音播放(4个版本迭代)
|
||||
22
memory/2026-04-29.md
Normal file
22
memory/2026-04-29.md
Normal file
@@ -0,0 +1,22 @@
|
||||
# 2026-04-29 每日事务记录
|
||||
|
||||
## 开发任务
|
||||
|
||||
### ParamHub Python - 参数字段统一为文本类型
|
||||
|
||||
**需求来源**: 用户(openclaw-control-ui)
|
||||
|
||||
**v1.14.0 主要改动**:
|
||||
1. 所有参数字段改为文本类型(type: 'text')
|
||||
2. 长文本字段(description、specs)标记 input_style: 'long'
|
||||
3. 普通文本字段标记 input_style: 'normal'
|
||||
4. 前端根据 input_style 显示不同输入控件(textarea vs input)
|
||||
5. 数值字段暂时保持文本存储,后期考虑数值对比功能
|
||||
|
||||
**Git仓库**: http://192.168.2.8:12007/coder/param-hub-python v1.14.0
|
||||
|
||||
---
|
||||
|
||||
## 备注
|
||||
|
||||
上午整理了昨天的会话记录并更新记忆文件。
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"lastSummaryDate": "2026-04-21",
|
||||
"lastSummaryDate": "2026-04-29",
|
||||
"lastChecks": {
|
||||
"memory_created": "2026-04-21T02:24:00Z"
|
||||
"memory_created": "2026-04-21T02:24:00Z",
|
||||
"2026-04-28_summary": "已整理,memory/2026-04-28.md 已存在,记录完整"
|
||||
}
|
||||
}
|
||||
Submodule works/ai-chat updated: daccc625c3...26a76b030d
12
works/ai-chat-app/.gitignore
vendored
Normal file
12
works/ai-chat-app/.gitignore
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
__pycache__/
|
||||
*.pyc
|
||||
*.pyo
|
||||
*.pyd
|
||||
.Python
|
||||
*.so
|
||||
*.egg-info/
|
||||
dist/
|
||||
build/
|
||||
*.db
|
||||
data.db
|
||||
node_modules/
|
||||
1011
works/ai-chat-app/backend/app.py
Normal file
1011
works/ai-chat-app/backend/app.py
Normal file
File diff suppressed because it is too large
Load Diff
2
works/ai-chat-app/backend/requirements.txt
Normal file
2
works/ai-chat-app/backend/requirements.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
flask>=2.0.0
|
||||
flask-cors>=3.0.0
|
||||
4
works/ai-chat-app/backend/start.sh
Executable file
4
works/ai-chat-app/backend/start.sh
Executable file
@@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
cd "$(dirname "$0")"
|
||||
pip install -r requirements.txt -q
|
||||
python app.py
|
||||
@@ -3,7 +3,7 @@
|
||||
"version": "1.0.0",
|
||||
"description": "AI对话助手移动端应用",
|
||||
"scripts": {
|
||||
"dev": "npx http-server -p 19019 -c-1",
|
||||
"dev": "npx http-server -p 19021 -c-1",
|
||||
"build:android": "npx cap sync android",
|
||||
"build:ios": "npx cap sync ios",
|
||||
"open:android": "npx cap open android",
|
||||
|
||||
482
works/ai-chat-app/www/admin.html
Normal file
482
works/ai-chat-app/www/admin.html
Normal file
@@ -0,0 +1,482 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>AI助手 - 后台管理</title>
|
||||
<link rel="stylesheet" href="admin.css?v=3.6.6">
|
||||
<style>
|
||||
:root {
|
||||
--primary: #667eea;
|
||||
--primary-dark: #5a67d8;
|
||||
--bg-color: #f5f7fa;
|
||||
--card-bg: #ffffff;
|
||||
--text-color: #2d3748;
|
||||
--text-light: #718096;
|
||||
--border-color: #e2e8f0;
|
||||
--danger: #e53e3e;
|
||||
--success: #22c55e;
|
||||
--warning: #f59e0b;
|
||||
}
|
||||
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
||||
background: var(--bg-color);
|
||||
color: var(--text-color);
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
/* 登录页面 */
|
||||
.login-page {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 100vh;
|
||||
background: linear-gradient(135deg, var(--primary) 0%, #764ba2 100%);
|
||||
}
|
||||
|
||||
.login-card {
|
||||
background: white;
|
||||
padding: 40px;
|
||||
border-radius: 16px;
|
||||
width: 350px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.login-logo {
|
||||
font-size: 48px;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.login-title {
|
||||
font-size: 24px;
|
||||
font-weight: 600;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.login-input {
|
||||
width: 100%;
|
||||
padding: 12px 16px;
|
||||
border: 2px solid var(--border-color);
|
||||
border-radius: 10px;
|
||||
font-size: 16px;
|
||||
margin-bottom: 16px;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.login-input:focus {
|
||||
border-color: var(--primary);
|
||||
}
|
||||
|
||||
.login-btn {
|
||||
width: 100%;
|
||||
padding: 14px;
|
||||
background: linear-gradient(135deg, var(--primary) 0%, #764ba2 100%);
|
||||
color: white;
|
||||
border: none;
|
||||
border-radius: 10px;
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
cursor: pointer;
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
.login-btn:hover {
|
||||
opacity: 0.9;
|
||||
}
|
||||
|
||||
/* 主页面 */
|
||||
.admin-page {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.admin-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 16px 24px;
|
||||
background: white;
|
||||
border-bottom: 1px solid var(--border-color);
|
||||
}
|
||||
|
||||
.admin-logo {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
font-size: 20px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.admin-logo span {
|
||||
font-size: 28px;
|
||||
}
|
||||
|
||||
.admin-header-right {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 16px;
|
||||
}
|
||||
|
||||
.admin-logout {
|
||||
padding: 8px 16px;
|
||||
background: var(--danger);
|
||||
color: white;
|
||||
border: none;
|
||||
border-radius: 6px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/* 侧边栏 */
|
||||
.admin-container {
|
||||
display: flex;
|
||||
height: calc(100vh - 60px);
|
||||
}
|
||||
|
||||
.admin-sidebar {
|
||||
width: 220px;
|
||||
background: white;
|
||||
border-right: 1px solid var(--border-color);
|
||||
padding: 16px;
|
||||
}
|
||||
|
||||
.sidebar-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
padding: 12px 16px;
|
||||
border-radius: 8px;
|
||||
cursor: pointer;
|
||||
transition: all 0.2s;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.sidebar-item:hover {
|
||||
background: rgba(102, 126, 234, 0.1);
|
||||
}
|
||||
|
||||
.sidebar-item.active {
|
||||
background: linear-gradient(135deg, var(--primary) 0%, #764ba2 100%);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.sidebar-icon {
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
/* 内容区 */
|
||||
.admin-content {
|
||||
flex: 1;
|
||||
padding: 24px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.content-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.content-title {
|
||||
font-size: 24px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.add-btn {
|
||||
padding: 10px 20px;
|
||||
background: var(--primary);
|
||||
color: white;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/* 数据卡片 */
|
||||
.stats-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, 1fr);
|
||||
gap: 16px;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.stat-card {
|
||||
background: white;
|
||||
padding: 20px;
|
||||
border-radius: 12px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.stat-icon {
|
||||
font-size: 32px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.stat-value {
|
||||
font-size: 28px;
|
||||
font-weight: 600;
|
||||
color: var(--primary);
|
||||
}
|
||||
|
||||
.stat-label {
|
||||
font-size: 14px;
|
||||
color: var(--text-light);
|
||||
}
|
||||
|
||||
/* 数据表格 */
|
||||
.data-table {
|
||||
background: white;
|
||||
border-radius: 12px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.data-table table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
.data-table th, .data-table td {
|
||||
padding: 14px 16px;
|
||||
text-align: left;
|
||||
border-bottom: 1px solid var(--border-color);
|
||||
}
|
||||
|
||||
.data-table th {
|
||||
background: var(--bg-color);
|
||||
font-weight: 600;
|
||||
color: var(--text-light);
|
||||
}
|
||||
|
||||
.data-table tr:last-child td {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.data-table tr:hover td {
|
||||
background: rgba(102, 126, 234, 0.05);
|
||||
}
|
||||
|
||||
/* 操作按钮 */
|
||||
.action-btns {
|
||||
display: flex;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.action-btn {
|
||||
padding: 6px 12px;
|
||||
border: none;
|
||||
border-radius: 6px;
|
||||
cursor: pointer;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.action-btn.edit {
|
||||
background: var(--primary);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.action-btn.delete {
|
||||
background: var(--danger);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.action-btn.default {
|
||||
background: var(--success);
|
||||
color: white;
|
||||
}
|
||||
|
||||
/* 默认标记 */
|
||||
.default-badge {
|
||||
padding: 4px 8px;
|
||||
background: var(--success);
|
||||
color: white;
|
||||
border-radius: 4px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
/* 模态框 */
|
||||
.modal {
|
||||
position: fixed;
|
||||
inset: 0;
|
||||
background: rgba(0,0,0,0.5);
|
||||
display: none;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
z-index: 1000;
|
||||
}
|
||||
|
||||
.modal.show {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.modal-content {
|
||||
background: white;
|
||||
padding: 24px;
|
||||
border-radius: 16px;
|
||||
max-width: 500px;
|
||||
width: 90%;
|
||||
max-height: 80vh;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.modal-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.modal-title {
|
||||
font-size: 20px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.modal-close {
|
||||
font-size: 24px;
|
||||
cursor: pointer;
|
||||
color: var(--text-light);
|
||||
}
|
||||
|
||||
.form-group {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.form-label {
|
||||
display: block;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.form-input, .form-select, .form-textarea {
|
||||
width: 100%;
|
||||
padding: 12px;
|
||||
border: 1px solid var(--border-color);
|
||||
border-radius: 8px;
|
||||
font-size: 14px;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.form-input:focus, .form-select:focus, .form-textarea:focus {
|
||||
border-color: var(--primary);
|
||||
}
|
||||
|
||||
.form-textarea {
|
||||
resize: vertical;
|
||||
min-height: 100px;
|
||||
}
|
||||
|
||||
.form-submit {
|
||||
width: 100%;
|
||||
padding: 14px;
|
||||
background: var(--primary);
|
||||
color: white;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
font-size: 16px;
|
||||
cursor: pointer;
|
||||
margin-top: 16px;
|
||||
}
|
||||
|
||||
/* Toast */
|
||||
.toast {
|
||||
position: fixed;
|
||||
top: 80px;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
background: var(--text-color);
|
||||
color: white;
|
||||
padding: 12px 24px;
|
||||
border-radius: 8px;
|
||||
font-size: 14px;
|
||||
opacity: 0;
|
||||
transition: opacity 0.3s;
|
||||
z-index: 2000;
|
||||
}
|
||||
|
||||
.toast.show {
|
||||
opacity: 1;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<!-- 登录页面 -->
|
||||
<div class="login-page" id="loginPage">
|
||||
<div class="login-card">
|
||||
<div class="login-logo">🤖</div>
|
||||
<h1 class="login-title">后台管理系统</h1>
|
||||
<input type="text" class="login-input" id="loginUsername" placeholder="用户名">
|
||||
<input type="password" class="login-input" id="loginPassword" placeholder="密码">
|
||||
<button class="login-btn" id="loginBtn">登录</button>
|
||||
<p style="margin-top: 16px; color: #999; font-size: 12px;">默认: admin / admin123</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 管理页面 -->
|
||||
<div class="admin-page" id="adminPage">
|
||||
<header class="admin-header">
|
||||
<div class="admin-logo">
|
||||
<span>🤖</span>
|
||||
AI助手 - 后台管理
|
||||
</div>
|
||||
<div class="admin-header-right">
|
||||
<span id="adminName">管理员</span>
|
||||
<button class="admin-logout" id="logoutBtn">退出</button>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="admin-container">
|
||||
<aside class="admin-sidebar">
|
||||
<div class="sidebar-item active" data-page="stats">
|
||||
<span class="sidebar-icon">📊</span>
|
||||
<span>统计信息</span>
|
||||
</div>
|
||||
<div class="sidebar-item" data-page="users">
|
||||
<span class="sidebar-icon">👥</span>
|
||||
<span>用户管理</span>
|
||||
</div>
|
||||
<div class="sidebar-item" data-page="llm">
|
||||
<span class="sidebar-icon">🧠</span>
|
||||
<span>大模型配置</span>
|
||||
</div>
|
||||
<div class="sidebar-item" data-page="agents">
|
||||
<span class="sidebar-icon">🤖</span>
|
||||
<span>智能体管理</span>
|
||||
</div>
|
||||
<div class="sidebar-item" data-page="chat">
|
||||
<span class="sidebar-icon">💬</span>
|
||||
<span>对话配置</span>
|
||||
</div>
|
||||
<div class="sidebar-item" data-page="tools">
|
||||
<span class="sidebar-icon">🔧</span>
|
||||
<span>工具配置</span>
|
||||
</div>
|
||||
<div class="sidebar-item" data-page="system">
|
||||
<span class="sidebar-icon">⚙️</span>
|
||||
<span>系统设置</span>
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
<main class="admin-content" id="mainContent">
|
||||
<!-- 内容区动态加载 -->
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Toast -->
|
||||
<div class="toast" id="toast"></div>
|
||||
|
||||
<!-- 模态框 -->
|
||||
<div class="modal" id="modal">
|
||||
<div class="modal-content" id="modalContent">
|
||||
<!-- 动态内容 -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="admin.js?v=3.6.6"></script>
|
||||
</body>
|
||||
</html>
|
||||
1342
works/ai-chat-app/www/admin.js
Normal file
1342
works/ai-chat-app/www/admin.js
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -4,57 +4,16 @@
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
||||
<meta name="theme-color" content="#667eea">
|
||||
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
|
||||
<meta http-equiv="Pragma" content="no-cache">
|
||||
<meta http-equiv="Expires" content="0">
|
||||
<title>AI助手</title>
|
||||
<link rel="stylesheet" href="style.css">
|
||||
<link rel="stylesheet" href="style.css?v=3.5.1">
|
||||
<link rel="manifest" href="manifest.json">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app">
|
||||
<!-- 头部 -->
|
||||
<header class="header">
|
||||
<div class="header-title">
|
||||
<span class="logo">🤖</span>
|
||||
<h1>AI助手</h1>
|
||||
</div>
|
||||
<button class="clear-btn" onclick="clearChat()" title="清空对话">
|
||||
<svg viewBox="0 0 24 24" width="20" height="20">
|
||||
<path fill="currentColor" d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/>
|
||||
</svg>
|
||||
</button>
|
||||
</header>
|
||||
|
||||
<!-- 消息区域 -->
|
||||
<div class="messages-container" id="messagesContainer">
|
||||
<div class="welcome" id="welcome">
|
||||
<div class="welcome-icon">👋</div>
|
||||
<h2>你好!我是AI助手</h2>
|
||||
<p>有什么可以帮助你的吗?</p>
|
||||
<div class="quick-actions">
|
||||
<button onclick="sendQuickMessage('介绍一下你自己')">介绍一下你自己</button>
|
||||
<button onclick="sendQuickMessage('帮我写一段代码')">帮我写代码</button>
|
||||
<button onclick="sendQuickMessage('解释一个概念')">解释概念</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="messages" id="messages"></div>
|
||||
</div>
|
||||
|
||||
<!-- 输入区域 -->
|
||||
<div class="input-area">
|
||||
<textarea
|
||||
id="userInput"
|
||||
placeholder="输入消息..."
|
||||
rows="1"
|
||||
onkeydown="handleKeyDown(event)"
|
||||
oninput="autoResize(this)"
|
||||
></textarea>
|
||||
<button class="send-btn" onclick="sendMessage()" id="sendBtn">
|
||||
<svg viewBox="0 0 24 24" width="24" height="24">
|
||||
<path fill="currentColor" d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="app.js"></script>
|
||||
<div id="app"></div>
|
||||
<script src="marked.min.js?v=3.5.1"></script>
|
||||
<script src="app.js?v=3.5.1"></script>
|
||||
</body>
|
||||
</html>
|
||||
69
works/ai-chat-app/www/marked.min.js
vendored
Normal file
69
works/ai-chat-app/www/marked.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user