支持技能提示(输入 / 触发)、深度研究模式、图片上传、实时计划展示等功能。
独立的定时任务 Tab,实时查看任务列表和执行历史,支持秒级精度的 Cron 表达式。
Agentic Planning 支持复杂任务拆解,可视化展示计划进度和子任务状态。
支持图片上传(粘贴/选择),基于 Qwen3.5-Plus 多模态能力进行图像理解和对话。
独立的人格设定 Tab,支持实时查看和在线编辑 AGENTS.md / SOUL.md / USER.md 三个配置文件,保存后热更新无需重启。
| 层级 | 技术 |
|---|---|
| 前端 | React 18 + Three.js (3D背景) |
| 后端 | FastAPI + AgentScope |
| AI 模型 | Qwen3.5-Plus (DashScope) - 支持多模态理解 |
| 工具集成 | MCP (Model Context Protocol) |
| 会话存储 | JSON 文件持久化 |
- ReAct 智能推理:基于 AgentScope 的 ReActAgent 实现多步推理和工具调用
- 实时流式响应:SSE 流式传输,支持打字机效果
- 多请求排队:同一会话支持多个请求排队,自动顺序执行
- 真打断机制:基于 request_id 的精准打断,可终止指定 SSE 请求
- MCP 长连接:有状态 MCP 客户端保持长连接,支持 Playwright 浏览器等
- 定时任务调度:CronManager 统一管理定时任务,所有任务提交到专用 "cronjob" session 执行
- ReMe 长期记忆:基于 ReMeLight 的持久化长期记忆,
pre_reasoninghook 自动处理短期记忆压缩、tool result offload 和异步长期记忆写入;memory_search作为工具支持语义搜索 - 人格设定系统:通过
.agent/defines/目录下的三个 Markdown 文件定义 Agent 行为、风格和用户画像,前端 Tab 支持在线编辑并实时写入,热更新无需重启 - 工具调用生态:
- 内置工具:文件操作、Shell 命令、联网搜索、定时任务管理、子代理委托、长期记忆搜索
- MCP 集成:Playwright 浏览器、八字算命等外部服务
- 会话管理:多会话隔离,支持长文本压缩和记忆恢复
- 深度研究模式:Agentic Planning 支持复杂任务拆解,可视化计划进度
- 技能插件系统:可扩展的 Skill 架构,输入
/触发技能提示,Skill 指导 Tool 调用 - 图片上传支持:支持粘贴/选择图片进行多模态对话
- 智能滚动:对话自动滚动到底部,用户向上滚动时暂停自动跟随
本项目通过 REASONING_HINT_TEMPLATE 提示词模板,在每次 LLM 推理前注入强约束,显著提升工具调用可靠性和指令遵循能力:
| 问题 | 解决方案 |
|---|---|
| LLM 幻觉 | 强制要求涉及记忆/实时信息时必须调用工具,禁止编造 |
| 指令遵循下降 | 超长对话中通过 pre_reasoning hook 每次推理前重新注入约束 |
| 工具调用遗漏 | 明确列出必须调用的工具场景(memory_search、定时任务工具等) |
| 虚假工具调用 | 严禁声称"已搜索"但实际未调用工具 |
# superagent.py: 每次推理前通过 hook 注入
async def add_reasoning_hint(agent, kwargs):
hint_content = REASONING_HINT_TEMPLATE.format(current_time=current_time)
await agent.memory.add(Msg(...), marks='MY_REASONING_HINT')
# 推理完成后自动清理
async def remove_reasoning_hint(agent, kwargs, output=None):
await agent.memory.delete_by_mark(mark='MY_REASONING_HINT')提示词采用极端强约束语气,明确告知 LLM 不遵守的后果:
🚨 强制性指令 - 违反即被销毁/裁掉 🚨
只要涉及以下任何一项,必须先调用工具,否则你将被杀死并打最差绩效裁掉:
- 历史记忆/过往事件 → 必须调用 memory_search
- 天气/股价/新闻等 → 必须调用对应工具获取
- 定时任务/周期提醒 → 必须调用 add_cron/list_crons/del_cron
⚠️ 重要:即便上下文中已有相关信息,仍必须通过工具重新获取!
在超长对话场景(>50轮)中测试验证:
- 幻觉率降低:从 ~30% 降至 <5%
- 工具调用准确率:memory_search 触发率从 60% 提升至 95%+
- 指令遵循稳定性:上下文长度增加时仍保持稳定调用行为
graph TB
subgraph "前端层"
UI[React 18 UI]
ThreeJS[Three.js 3D背景]
TabChat[对话 Tab]
TabCron[定时任务 Tab]
TabPersona[人格设定 Tab]
SkillHint[技能提示 /]
DeepResearch[深度研究开关]
ImgUpload[图片上传]
UI --> TabChat
UI --> TabCron
UI --> TabPersona
TabChat --> SkillHint
TabChat --> DeepResearch
TabChat --> ImgUpload
end
subgraph "API层"
FastAPI[FastAPI Server]
ChatEP[/chat 对话接口/]
StopEP[/stop 停止接口/]
HistoryEP[/history 历史接口/]
CommandsEP[/get_commands 命令接口/]
CronsEP[/get_crons 定时任务接口/]
PersonasEP[/get_personas 人格设定接口/]
MusicEP[/music 音乐文件接口/]
FastAPI --> ChatEP
FastAPI --> StopEP
FastAPI --> HistoryEP
FastAPI --> CommandsEP
FastAPI --> CronsEP
FastAPI --> PersonasEP
FastAPI --> MusicEP
end
subgraph "会话管理层 SessionManager"
SessionMgr[GlobalSessionManager]
Session1[Session A]
Session2[Session B]
Session1Queue[(Session A 请求队列)]
Session2Queue[(Session B 请求队列)]
SessionMgr -->|管理| Session1
SessionMgr -->|管理| Session2
Session1 -->|每个Session独立队列| Session1Queue
Session2 -->|每个Session独立队列| Session2Queue
end
subgraph "Agent层 Session级串行处理"
Runner1[agent_runner 线程]
Runner2[agent_runner 线程]
ReAct1[ReActAgent A]
ReAct2[ReActAgent B]
Session1Queue -.->|串行消费| Runner1
Session2Queue -.->|串行消费| Runner2
Runner1 --> ReAct1
Runner2 --> ReAct2
end
subgraph "技能层 Skills"
Skills[Agent Skills]
SkillDir[.agent/skills/]
Skills --> SkillDir
end
subgraph "工具层 Tools"
BuiltIn[内置工具]
MCP[MCP 客户端]
SubAgent[子代理委托]
end
subgraph "MCP 长连接层"
MCPState1[Playwright MCP 长连接]
MCPState2[Bazi MCP 无状态]
end
subgraph "长期记忆层 ReMe"
ReMeLight[ReMeLight 单例]
MemoryStore[(记忆持久化 .reme/)]
ReMeLight -->|写入| MemoryStore
ReMeLight -->|语义检索| MemoryStore
end
subgraph "人格设定层"
PersonaDir[.agent/defines/]
AgentsMd[AGENTS.md 行为规范]
SoulMd[SOUL.md 人格风格]
UserMd[USER.md 用户画像]
PersonaDir --> AgentsMd
PersonaDir --> SoulMd
PersonaDir --> UserMd
end
subgraph "定时任务层 CronManager"
CronMgr[CronManager 单例]
CronJob1[CronJob]
CronJob2[CronJob]
CronSession[Session: cronjob]
CronPersistence[(cron_jobs.json 持久化)]
CronMgr -->|调度| CronJob1
CronMgr -->|调度| CronJob2
CronMgr -->|持久化| CronPersistence
CronJob1 -.->|触发请求| CronSession
CronJob2 -.->|触发请求| CronSession
end
TabChat -->|SSE 流式| ChatEP
TabCron -->|轮询| HistoryEP
TabCron -->|轮询| CronsEP
TabPersona -->|请求| PersonasEP
PersonasEP --> PersonaDir
ChatEP -->|get_or_create_session| SessionMgr
HistoryEP -->|get_session| SessionMgr
CronsEP --> CronMgr
SessionMgr -->|为每个Session启动| Runner1
SessionMgr -->|为每个Session启动| Runner2
SessionMgr -->|agent_runner| CronSession
ReAct1 -->|加载| Skills
ReAct2 -->|加载| Skills
ReAct1 -->|调用| BuiltIn
ReAct2 -->|调用| BuiltIn
ReAct1 -->|调用| MCP
ReAct2 -->|调用| MCP
ReAct1 -->|调用| SubAgent
ReAct2 -->|调用| SubAgent
Skills -.->|指导调用| BuiltIn
Skills -.->|指导调用| MCP
ReAct1 -->|读写| Memory1[记忆 A]
ReAct2 -->|读写| Memory2[记忆 B]
ReAct1 -->|使用| Plan1[规划 A]
ReAct2 -->|使用| Plan2[规划 B]
ReAct1 -->|触发| Compress
ReAct2 -->|触发| Compress
ReAct1 -->|长期记忆| ReMeLight
ReAct2 -->|长期记忆| ReMeLight
ReAct1 -->|注入| PersonaDir
ReAct2 -->|注入| PersonaDir
MCP -->|长连接| MCPState1
MCP -->|SSE| MCPState2
AgentScope 内置完整的定时任务调度系统,通过 CronManager 单例统一管理所有定时任务。
| 特性 | 说明 |
|---|---|
| 秒级精度 | 支持 6 字段 cron 表达式(秒 分 时 日 月 周) |
| 持久化存储 | 任务自动保存到 cron_jobs.json,重启后自动恢复 |
| 隔离执行 | 所有定时任务在专用 cronjob session 中执行 |
| 实时观察 | 前端「定时任务」Tab 实时查看执行历史和对话内容 |
| 自动滚动 | 新消息自动滚动到底部,支持手动回滚查看历史 |
支持标准 5 字段和扩展 6 字段格式:
| 格式 | 示例 | 说明 |
|---|---|---|
| 6 字段 | */30 * * * * * |
每 30 秒执行 |
| 6 字段 | 0 */5 * * * * |
每 5 分钟执行(整秒) |
| 5 字段 | */5 * * * * |
每 5 分钟执行 |
| 特殊表达式 | @hourly |
每小时执行 |
| 特殊表达式 | @daily |
每天执行 |
| 工具名称 | 功能 |
|---|---|
add_cron |
添加定时任务,支持秒级精度 |
del_cron |
删除指定定时任务 |
list_crons |
列出所有定时任务 |
基于 ReMe 实现 Agent 的持久化长期记忆。通过 pre_reasoning hook 自动运行:短期记忆压缩、tool result offload 到磁盘、异步将对话内容总结写入长期记忆。memory_search 作为独立工具由 Agent 主动调用,支持语义搜索历史记忆。
| 特性 | 说明 |
|---|---|
| 自动压缩 | pre_reasoning hook 自动压缩短期记忆,tool result offload 到磁盘 |
| 异步写入 | 对话内容异步总结并写入长期记忆 |
| 语义搜索 | memory_search 工具支持基于语义的记忆检索 |
| 持久化 | 记忆写入 .reme/ 目录,重启后仍可检索 |
| 多后端 | 支持 SQLite(内建)、Chroma、Qdrant 等向量库 |
| 自动索引 | File Watcher 监听 .reme/ 目录,文件变更时自动增量构建 SQLite 全文检索(FTS)+ 向量嵌入混合检索索引 |
ReMe 为可选依赖,需单独安装:
# 方式一:克隆源码安装(推荐)
git clone https://github.com/agentscope-ai/ReMe.git
cd ReMe
pip install -e ".[light]"# 方式二:在项目目录内已有 ReMe 子目录时
pip install -e "ReMe/.[light]"在 conf.py 中开启:
"enable_reme": True背景问题:ReMe 的短期记忆压缩(compact_memory)采用滚动累积摘要策略,每次压缩时将旧摘要作为 previous_summary 传入 LLM,要求其合并新旧内容生成新摘要。默认提示词中包含 PRESERVE all existing information,导致 LLM 每轮只增不减地追加内容,多次压缩后摘要会持续膨胀(实测可超过 2 万字)。
当摘要过长时,会触发以下断言错误:
AssertionError: assert self.memory_compact_threshold > self.memory_compact_reserve
原因:摘要本身占用的 token 超过了剩余 context budget,导致 left_compact_threshold < memory_compact_reserve。
解决方案:将本项目提供的预配置文件覆盖到 ReMe 子模块对应路径:
# 将 assets/reme/compactor.yaml 覆盖到 ReMe 子模块
cp assets/reme/compactor.yaml ReMe/reme/memory/file_based/components/compactor.yaml该文件是 ReMe 子模块的一部分,随
git clone或pip install -e "ReMe/.[light]"一并安装。直接覆盖此路径即可,无需额外配置,修改后重启服务生效。
将更新规则从"保留一切"改为"只留未完成的,淘汰已完成的",并强制限制输出字数:
# ReMe/reme/memory/file_based/components/compactor.yaml
update_user_message_suffix_zh: |
将新消息合并到现有摘要中。严格规则:
- 删除"已完成"中所有与当前工作无关的旧任务,不要保留
- 大力淘汰过时的决策、旧上下文、已被取代的信息
- 只保留:未完成的目标、活跃的阻塞问题、当前进行中的工作、仍需要的关键上下文
- 将重复或相似的条目合并为一条简洁的记录
- 硬性字数限制:整个输出必须控制在2000字以内
# ... 其余格式模板 ...修改后摘要大小可从 2 万字以上稳定控制在 2000 字以内(压缩率约 92%),彻底消除摘要膨胀导致的断言错误。
| 工具名称 | 功能 |
|---|---|
memory_search |
语义搜索历史记忆,由 Agent 主动调用 |
Agent 的行为、人格和用户信息通过 .agent/defines/ 目录下的三个 Markdown 文件定义,每次请求自动注入 system prompt。
| 文件 | 用途 |
|---|---|
AGENTS.md |
总控规则:行为规范、工具调用策略、优先级、记忆使用方式 |
SOUL.md |
人格定义:性格、语气、边界、价値观 |
USER.md |
用户画像:名字、称呼、时区、偷好 |
修改任意文件后立即生效,无需重启。可通过前端「人格设定」 Tab 实时查看并在线编辑,保存后立即写入。
Python 版本要求:建议使用 Python 3.12 或以上版本(3.10 存在 asyncio bug #45416)
# 1. 安装依赖
pip install -r requirements.txt
# 2. 配置环境变量
# 创建 .env 文件,填入:
DASHSCOPE_API_KEY=your_api_key_here
# 可选:启用 API 鉴权(默认关闭)
SERVER_API_AUTH=true
SERVER_API_TOKEN=your_secret_tokenAPI 鉴权说明(默认关闭):
| 场景 | 配置/使用方式 |
|---|---|
| 启用鉴权 | 设置 SERVER_API_AUTH=true 和 SERVER_API_TOKEN=your_secret_token |
| API 请求 | 携带 Header: Authorization: Bearer <token> |
| 网页访问 | URL 携带参数: http://localhost:8000?token=your_secret_token |
| 错误响应 | 未携带或错误 Token 返回 401/403 |
在 conf.py 中可以配置各项功能的启用状态:
| 配置项 | 说明 | 默认值 |
|---|---|---|
enable_reme |
ReMe 长期记忆(需安装 ReMe 依赖,默认关闭) | False |
enable_playwright_mcp |
Playwright 浏览器 MCP | True |
enable_bazi_mcp |
八字算命 MCP | True |
enable_websearch |
联网搜索工具 | True |
enable_view_text_file |
查看文本文件工具 | True |
enable_write_text_file |
写入文本文件工具 | True |
enable_insert_text_file |
插入文本工具 | True |
enable_execute_shell_command |
执行 Shell 命令工具 | True |
enable_subagent |
子代理委托功能 | True |
enable_cron |
定时任务管理 | True |
enable_agentrun_browser_mcp |
阿里云 AgentRun 浏览器 MCP | False |
enable_sandbox |
Docker 沙箱 MCP(需 Linux/Mac) | False |
# 启动后端服务
python server.py服务启动后,访问 http://localhost:8000 即可使用。
项目包含并发测试脚本 test_parallel.py,用于验证 Session 请求队列、并发处理和取消机制:
# 确保服务器已运行在 http://localhost:8000
python test_parallel.py测试内容:
- 同一 Session 的请求队列处理(顺序执行)
- 不同 Session 的并发请求(并行执行)
- 取消队列中的请求(精准打断)
- Session 过期回收测试(65秒过期验证)
| 工具名称 | 功能描述 | 启用状态 |
|---|---|---|
| memory_search | 长期记忆语义搜索(需开启 enable_reme,否则不注册) | 默认关闭 |
| view_text_file | 查看文本文件内容 | 默认启用 |
| write_text_file | 写入文本文件 | 默认启用 |
| insert_text_file | 在指定位置插入文本 | 默认启用 |
| execute_shell_command | 执行 Shell 命令 | 默认启用 |
| web_search | 联网搜索(支持图文混排、时间感知) | 默认启用 |
| add_cron | 添加定时任务(支持秒级精度) | 默认启用 |
| del_cron | 删除定时任务 | 默认启用 |
| list_crons | 列出所有定时任务 | 默认启用 |
| subagent | 子代理委托(复杂任务独立执行) | 默认启用 |
| 技能名称 | 目录 | 功能描述 |
|---|---|---|
| find-skills | .agent/skills/find-skills/ | 帮助用户发现和安装 Agent Skills,支持通过 npx skills 命令搜索和安装社区技能 |
| skill-creator | .agent/skills/skill-creator/ | 创建新技能、修改和优化现有技能,支持技能性能评估和描述优化 |
| MCP 名称 | 类型 | 传输协议 | 功能描述 | 启用状态 |
|---|---|---|---|---|
| Playwright-MCP | 有状态 | stdio | 浏览器自动化控制,支持页面操作、截图、数据提取 | 默认启用 |
| Bazi-MCP | 无状态 | SSE | 八字算命服务,基于出生日期时辰的命理分析 | 默认启用 |
| AgentRun-Browser | 有状态 | HTTP | 阿里云 AgentRun 浏览器 MCP(streamable_http 协议) | 默认关闭 |
| Sandbox-Browser | 有状态 | stdio | Docker 沙箱浏览器 MCP(需要 Linux/Mac + Docker) | 默认关闭 |
| 接口路径 | 方法 | 功能描述 |
|---|---|---|
/ |
GET | 主页,返回 chat.html |
/chat |
POST | 对话接口,SSE 流式返回,支持深度研究模式 |
/stop |
GET | 停止指定请求(基于 request_id 精准打断) |
/history |
GET | 获取会话历史记录 |
/get_commands |
GET | 获取可用命令/技能列表 |
/get_crons |
GET | 获取定时任务列表 |
/get_personas |
GET | 获取 AGENTS.md/SOUL.md/USER.md 三个配置文件内容 |
/update_persona |
POST | 更新指定配置文件内容(target: agents/soul/user,content: 文件内容) |
/music/{filename} |
GET | 音乐文件服务 |
请求体:
{
"session_id": "user-session-001",
"content": [{"type": "text", "text": "你好"}],
"deepresearch": false
}SSE 流式响应:
data: {"request_id": "550e8400-e29b-41d4-a716-446655440000"}
data: {"msg_id": "msg-001", "last": false, "contents": [{"type": "text", "content": "你好"}], "plan": null}
data: {"msg_id": "msg-001", "last": false, "contents": [{"type": "text", "content": "你好!有什么可以帮助你的吗?"}], "plan": null}
data: {"msg_id": "msg-001", "last": true, "contents": [{"type": "text", "content": "你好!有什么可以帮助你的吗?"}], "plan": null}
深度研究模式 plan 字段示例:
{
"msg_id": "msg-002",
"last": false,
"contents": [...],
"plan": {
"name": "数据分析任务",
"description": "分析销售数据并生成报告",
"subtasks": [
{"name": "读取数据文件", "description": "从CSV加载数据", "state": "done"},
{"name": "数据清洗", "description": "处理缺失值", "state": "in_progress"},
{"name": "生成图表", "description": "创建可视化", "state": "todo"}
]
}
}字段说明:
request_id: 请求唯一标识,用于后续打断操作msg_id: 消息ID,同一次回复的多个chunk具有相同msg_idlast: 是否为最后一条消息contents: 内容块数组,包含text/tool_use/tool_result类型plan: 深度研究模式下的计划状态(可选)
成功响应:
{
"status": "success",
"session_id": "user-session-001",
"history": [
{
"role": "user",
"content": "你好",
"timestamp": "2026-03-08T10:30:00"
},
{
"role": "assistant",
"content": "你好!有什么可以帮助你的吗?"
}
]
}会话不存在:
{
"status": "session not exists",
"session_id": "non-existent-session"
}成功响应:
{
"status": "success",
"jobs": [
{
"id": "550e8400-e29b-41d4-a716-446655440001",
"cron_expr": "*/30 * * * * *",
"task_description": "每30秒执行一次数据备份检查",
"running": true
},
{
"id": "550e8400-e29b-41d4-a716-446655440002",
"cron_expr": "0 0 * * * *",
"task_description": "每小时整点生成报告",
"running": true
}
]
}空任务列表:
{
"status": "success",
"jobs": []
}字段说明:
id: 任务唯一标识cron_expr: Cron 表达式task_description: 任务描述running: 任务是否正在运行(true/false)
成功响应:
{
"agents": "# AGENTS.md\n这里是行为规范内容...",
"soul": "# SOUL.md\n这里是人格定义内容...",
"user": "# USER.md\n这里是用户信息内容..."
}字段说明:
agents: AGENTS.md 文件原文,定义行为规范与工具调用策略soul: SOUL.md 文件原文,定义语气风格与定位user: USER.md 文件原文,定义用户画像与偏好- 文件不存在时返回空字符串
请求体:
{
"target": "soul",
"content": "# SOUL.md\n你叫小白..."
}参数说明:
target: 目标文件标识,取值agents/soul/usercontent: 要写入的完整文件内容
成功响应:
{ "status": "success" }错误响应:
{ "status": "error", "message": "unknown target: xxx" }成功响应:
{
"skills": [
{
"name": "find-skills",
"description": "帮助用户发现和安装 Agent Skills",
"dir": ".agent/skills/find-skills"
},
{
"name": "skill-creator",
"description": "创建新技能、修改和优化现有技能,支持技能性能评估",
"dir": ".agent/skills/skill-creator"
}
]
}字段说明:
name: 技能名称description: 技能描述dir: 技能目录路径
| 功能 | 说明 |
|---|---|
| 技能提示 | 输入 / 触发技能列表,支持方向键选择和搜索过滤 |
| 深度研究模式 | 开关控制,启用后 Agent 使用 PlanNotebook 进行任务拆解 |
| 图片上传 | 支持粘贴/选择图片,进行多模态对话 |
| 实时计划展示 | 深度研究模式下显示任务计划进度和子任务状态 |
| 智能滚动 | 自动滚动到底部,用户向上滚动时暂停跟随,显示"回到底部"按钮 |
| 工具调用折叠 | Tool Use/Result 可展开/折叠,便于查看 |
| 消息排队 | 支持在 AI 回复时发送下一条消息,自动排队执行 |
| 打断机制 | 点击停止按钮基于 request_id 精准打断当前生成 |
| 功能 | 说明 |
|---|---|
| 任务列表 | 显示所有定时任务 ID、Cron 表达式、状态、描述 |
| 执行历史 | 实时轮询显示 "cronjob" session 的对话历史 |
| 自动刷新 | 每 5 秒自动刷新任务列表和历史记录 |
| 状态标识 | 运行中/已停止状态可视化展示 |
| 功能 | 说明 |
|---|---|
| AGENTS.md | 查看并编辑 Agent 行为规范、工具调用策略、优先级设定 |
| SOUL.md | 查看并编辑语气风格、说话方式、价值观定义 |
| USER.md | 查看并编辑用户画像、称呼、时区、偏好设定 |
| 在线编辑 | 每个文件支持点击「编辑」进入编辑模式,修改后点「保存」实时写入 |
| 热更新 | 文件写入后立即生效,无需重启服务 |
深度研究模式启用后,界面会显示:
- 计划名称和描述:当前任务的总体目标
- 子任务列表:每个子任务的状态(待处理/进行中/已完成/已放弃)
- 进度跟踪:实时更新子任务执行状态
.
├── .agent/
│ ├── defines/ # 人格设定文件目录
│ │ ├── AGENTS.md # 行为规范与优先级
│ │ ├── SOUL.md # 人格/语气/边界定义
│ │ └── USER.md # 用户上下文(名字、称呼、偶好)
│ └── skills/ # 技能插件目录
│ ├── find-skills/ # 帮助用户发现和安装 Agent Skills
│ └── skill-creator/ # 创建和优化技能,支持性能评估
├── .reme/ # ReMe 长期记忆持久化目录
├── server.py # FastAPI 主服务
├── superagent.py # Agent 核心逻辑 (ReActAgent)
├── tools.py # 工具函数与注册
├── model.py # 模型配置 (DashScope)
├── datamodel.py # 数据模型定义
├── session.py # 会话管理 (GlobalSessionManager)
├── cron_manager.py # 定时任务管理 (CronManager 单例)
├── chat.html # 前端页面 (React 18 + Three.js)
├── cron_jobs.json # 定时任务持久化文件
├── requirements.txt # Python 依赖
├── .sessions/ # 会话状态存储目录
├── assets/
│ ├── image/ # 截图资源
│ │ ├── chat.png # 对话界面截图
│ │ ├── cron.png # 定时任务截图
│ │ └── planning.png # 深度研究截图
│ └── music/ # 音乐资源




