Skip to content
Merged

1 #87

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
d04ea3f
fix: #78 辩论默认折叠只显示3条+展开更多
jiangmuran Apr 9, 2026
89ce3c0
Merge remote-tracking branch 'origin/yxz'
jiangmuran Apr 9, 2026
60bb0a8
Merge remote-tracking branch 'origin/yxz'
jiangmuran Apr 9, 2026
cf6ffd6
refactor: 分析页右栏改为全步骤垂直时间线
jiangmuran Apr 9, 2026
8ae7e0c
fix: 移除未使用的AGENTS/currentStep/isPending
jiangmuran Apr 9, 2026
7321939
fix: 移除未使用的CheckCircleOutlinedIcon
jiangmuran Apr 9, 2026
42a1660
docs: README重写 — Topic Star #1, 在线体验链接, 技术深度展示
jiangmuran Apr 9, 2026
fa618bc
docs: README加三大自训练模型+评论画像引擎+队伍介绍升级
jiangmuran Apr 9, 2026
3af152c
feat: /admin 管理员统计面板
jiangmuran Apr 9, 2026
97dd5ec
feat: 使用追踪系统 + Admin面板升级
jiangmuran Apr 9, 2026
71499c7
fix: Admin刷新不再重载页面+30秒自动刷新
jiangmuran Apr 9, 2026
fbe9b4f
fix: Admin数据全是0 — token/耗时正确写入+stream端点也记日志
jiangmuran Apr 9, 2026
f7cda83
feat: 用户条款+隐私协议页面
jiangmuran Apr 9, 2026
951e0e1
Merge pull request #81 from jiangmuran/feat/legal-pages
jiangmuran Apr 9, 2026
46de9de
Merge remote-tracking branch 'origin/yxz'
jiangmuran Apr 9, 2026
fffffbc
fix: 封面识别JSON解析失败 — 增强4级fallback+打日志
jiangmuran Apr 9, 2026
7032a0c
security: 安全审计修复 — 6个HIGH+CRITICAL漏洞
jiangmuran Apr 9, 2026
8af8331
fix: 5个功能性bug修复
jiangmuran Apr 9, 2026
20c23ac
fix: 白皮书返回卡在红色overlay — 改用pageshow事件处理bfcache
jiangmuran Apr 9, 2026
be83e98
fix: 封面识别失败 — prompt精简+JSON平铺+字段兼容
jiangmuran Apr 9, 2026
e3f6154
fix: 手机端点击蓝框 — 去掉tap-highlight+focus outline,保留focus-visible给键盘用户
jiangmuran Apr 9, 2026
0dcec61
feat: 公益声明弹窗 + 全站联系方式展示
jiangmuran Apr 13, 2026
6932298
feat: /app 子路径部署适配 + 前端性能优化
FlashingChen2024 Apr 14, 2026
c24aeb1
Merge branch 'main' of https://github.com/jiangmuran/noterx into code…
FlashingChen2024 Apr 14, 2026
27ef85b
fix: 修正 .env.example 与代码默认值不一致的问题
FlashingChen2024 Apr 15, 2026
355b87a
fix: .env.example not correct
jiangmuran Apr 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 31 additions & 16 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,24 @@ OPENAI_API_KEY=
# OPENAI_BASE_URL=https://api.mimo-v2.com/v1
OPENAI_BASE_URL=https://api.xiaomimimo.com/v1
# 显式声明兼容小米网关(可选;或设 LLM_MODEL=mimo-v2-omni / BASE_URL 含 xiaomimimo、mimo-v2)
# OPENAI_COMPAT=mimoj
# 模型名(与所用接口一致)。OpenAI:gpt-4o;小米:mimo-v2-omni
# OPENAI_COMPAT=mimo
# 模型名(与所用接口一致)。OpenAI:gpt-4o;小米:mimo-v2-omni;Orchestrator 默认读此值覆盖 Agent 模型
LLM_MODEL=mimo-v2-omni
# 多模态(快识 / OCR / 部分分析均依赖此模型,须为支持图像的 omni 类)
# 三级模型名(base_agent 模块级默认值;未设时分别回退到以下默认)
# LLM_MODEL_FAST=mimo-v2-flash
# LLM_MODEL_PRO=mimo-v2-pro
# LLM_MODEL_OMNI=mimo-v2-omni
# OCR 模型输出 token 上限(默认 2048;快识路径取 max(env, override) 再 clamp 至 8192)
# LLM_OCR_MAX_TOKENS=2048
# 通用 Agent 输出 token 上限(base_agent 默认 2048;video_analyzer 默认 1024)
# LLM_MAX_COMPLETION_TOKENS=2048
# LLM 采样温度(base_agent 默认 0;screenshot_api/video_analyzer 默认 0.3)
# LLM_TEMPERATURE=0
# 结果可复现种子(非空时传入;部分网关/模型可能不支持)
# LLM_SEED=
# 网关不支持 response_format=json_object 时可设 1
# LLM_SKIP_JSON_RESPONSE_FORMAT=1

# MiMo 视频理解(video_url):采样帧率,官方示例多为 2;过高增加 token 与耗时
# MIMO_VIDEO_FPS=2
# 视频解码分辨率策略:default | max(见平台「视频理解」文档)
Expand All @@ -38,20 +51,19 @@ LLM_MODEL=mimo-v2-omni
# DEBATE_LLM_TIMEOUT_SEC=90
# 综合裁判超时(秒)
# JUDGE_LLM_TIMEOUT_SEC=180
# 多模态封面长边像素上限(缩小后 JPEG 再送模型)
# 多模态封面长边像素上限(缩小后 JPEG 再送模型;默认 1280,范围 [256, 4096]
# VISION_MAX_EDGE=1280
# JPEG 压缩质量(默认 85,范围 [60, 95])
# VISION_JPEG_QUALITY=85

# 快识:输出 token 上限(JSON 较短;代码默认 2048 且限制在 256~8192,过大易被网关拒绝)
# 快识:图片 JSON 输出 token 上限(代码默认 2048 且限制在 256~8192,过大易被网关拒绝)
# QUICK_RECOGNIZE_MAX_COMPLETION_TOKENS=2048
# 快识:正文补全 OCR 第二次调用的 token 上限(默认 512)
# 快识 OCR 兜底(默认 2048;JSON 易被截断时可调到 4096)
# 快识 OCR 兜底 token 上限(代码默认 2048 且限制在 512~8192;JSON 易被截断时可调到 4096)
# QUICK_RECOGNIZE_OCR_MAX_TOKENS=2048
# 快识:长边像素上限(超过才压 JPEG;默认 1280;偏小更快、極小字可能略损
# 快识:长边像素上限(超过才压 JPEG;默认 1280;偏小更快、极小字可能略损
# QUICK_RECOGNIZE_MAX_EDGE=1280
# QUICK_RECOGNIZE_JPEG_QUALITY=90
# 网关不支持 response_format=json_object 时可设 1
# LLM_SKIP_JSON_RESPONSE_FORMAT=1
# 快识 JPEG 压缩质量(默认 92)
# QUICK_RECOGNIZE_JPEG_QUALITY=92

# Anthropic 配置(LLM_PROVIDER=anthropic 时需要)
ANTHROPIC_API_KEY=sk-ant-your-anthropic-key-here
Expand Down Expand Up @@ -88,12 +100,12 @@ TEMP_VIDEO_SIGNING_KEY=change-me-to-a-long-random-secret
# 临时视频链接有效期(秒,默认 900 = 15 分钟)
TEMP_VIDEO_TTL_SECONDS=900

# 可选:临时视频落盘目录
# 可选:临时视频落盘目录(默认 backend/data/temp_videos)
# TEMP_VIDEO_DIR=backend/data/temp_videos

# === 视频口播转写(OpenAI 兼容 /audio/transcriptions,非 TTS)===
# 需本机安装 ffmpeg。只要填了 OPENAI_WHISPER_BASE_URL,就必须填 OPENAI_WHISPER_API_KEY(勿用 MiMo Key)。
# 默认开启(代码默认值为 1);可显式关闭
# 默认开启(代码默认值为 1);快识路径默认关闭(VIDEO_STT_ENABLED=0);可显式开关
# VIDEO_STT_ENABLED=0
# VIDEO_STT_ENABLED=1
#
Expand All @@ -111,10 +123,13 @@ TEMP_VIDEO_TTL_SECONDS=900
# WHISPER_MODEL=FunAudioLLM/SenseVoiceSmall
# 硅基部分模型可不传 language:VIDEO_STT_LANGUAGE= (空)
#
# VIDEO_STT_MAX_AUDIO_SECONDS=600
# 长视频分段转写(秒),默认 480;调小更稳但请求次数更多
# 音频总时长上限(秒,默认 3600,范围 [60, 14400])
# VIDEO_STT_MAX_AUDIO_SECONDS=3600
# 长视频分段转写(秒,默认 480,范围 [30, 1200]);调小更稳但请求次数更多
# VIDEO_STT_SEGMENT_SECONDS=480
# STT HTTP 超时(秒,默认 240,范围 [60, 600])
# VIDEO_STT_TIMEOUT_SEC=240
# 转写语言(默认 zh;显式设空串则不传 language 参数)
# VIDEO_STT_LANGUAGE=zh
# 优先请求 verbose_json(带 segments);网关不支持会自动回退
# 优先请求 verbose_json(带 segments);网关不支持会自动回退(默认 1)
# VIDEO_STT_PREFER_VERBOSE_JSON=1
205 changes: 91 additions & 114 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,152 +1,129 @@
# 💊 薯医 NoteRx
<div align="center">

**AI驱动的小红书笔记诊断平台 —— 用数据告诉你,你的笔记为什么没火。**
# 薯医 NoteRx

> 你的笔记,值得被看见。
### Multi-Agent Collaborative Diagnosis Engine for Xiaohongshu

## 产品简介
**Topic Star 榜单 #1** | 874 真实笔记训练 | 5 AI 专家三轮辩论 | 在线可用

薯医(NoteRx)是一个面向小红书创作者的 AI 笔记诊断工具。用户可通过 **文字粘贴**、**截图上传(OCR 自动识别)** 或 **小红书链接导入** 三种方式提交笔记,平台通过 **多 Agent 辩论架构** 和 **真实数据 Baseline 对比**,从内容、视觉、增长策略、用户反应四个维度生成全面的诊断报告。
<br>

### 核心特色
[**立即在线体验**](https://noterx.muran.tech) &nbsp;&nbsp;|&nbsp;&nbsp; [研究白皮书](https://noterx.muran.tech/) &nbsp;&nbsp;|&nbsp;&nbsp; [技术架构](#技术架构)

- **多 Agent 辩论诊断**:5 个 AI 专家(内容分析师、视觉诊断师、增长策略师、用户模拟器、综合裁判)并行诊断,互相质疑,给出更全面准确的诊断
- **量化 Baseline 对比**:基于数千条小红书笔记数据建立评价基线,用数据而非玄学给建议
- **AI 模拟评论区**:预测真实用户看到笔记后的反应
- **一键优化建议**:AI 生成优化标题、改写正文和封面方向建议,可一键复制
- **辩论时间线**:可视化展示 Agent 之间的赞同、反驳和补充过程
- **可分享诊断卡片**:一键导出精美诊断报告卡片,本身就是社交内容
- **三种输入方式**:文字粘贴 / 截图 OCR / 小红书链接导入
- **6 大垂类支持**:美食、穿搭、科技、旅行、美妆、健身
<br>

### 免责声明
> 上传你的小红书笔记截图,5 位 AI 专家会像医生会诊一样,三轮辩论后给出量化诊断报告、可执行的优化方案、模拟评论区预测,以及一键生成的高分改写。

本平台提供的诊断报告由 AI 多 Agent 协作生成,仅供参考,不构成任何运营承诺。
</div>

## 技术架构
---

```
前端 (React + TypeScript + Vite + Tailwind CSS + ECharts)
API Gateway (FastAPI + Pydantic)
┌──────────────────────────────────────────────┐
│ 多模态解析层 │
│ 文本分析(jieba) | 图像分析(OpenCV) | OCR(LLM) │
│ 构图分析 | 色彩和谐度 | 视觉复杂度 │
└──────────────────┬───────────────────────────┘
Baseline 对比引擎 (SQLite)
┌──────────────────────────────────────────────┐
│ 多 Agent 编排引擎 (GPT-4o / Claude) │
│ │
│ Round 1: 四Agent并行诊断 │
│ 内容Agent | 视觉Agent | 增长Agent | 用户Agent │
│ ↓ │
│ Round 2: Agent 辩论 (赞同/反驳/补充) │
│ ↓ │
│ Round 3: 综合裁判Agent → 最终报告 + 优化建议 │
└──────────────────────────────────────────────┘
```
## 为什么是薯医

## 快速开始
| | 传统工具 | 薯医 NoteRx |
|---|---|---|
| **评分依据** | 主观经验 / 单模型打分 | 874 条真实笔记回归分析 → 5 品类差异化权重 |
| **诊断方式** | 单次 GPT 调用 | 5 Agent 并行诊断 → 交叉质疑辩论 → 裁判综合 |
| **建议质量** | "提升标题吸引力" | "标题「XX」→改为「5分钟搞定!这道菜我妈做了20年」→加数字+情感+悬念" |
| **评论预测** | 无 | AI 模拟真实评论区(含吵架/质疑/楼中楼) |
| **优化闭环** | 给建议,用户自己改 | 自动生成 3 个高分改写方案 + 即时重新评分 |
| **数据支撑** | 无 | Spearman 相关 · 线性回归 · K-Means 聚类 · LLM 深度分析 |

### 环境要求
## 在线体验

- Node.js >= 18
- Python >= 3.9
- OpenAI API Key (GPT-4o) 或 Anthropic API Key (Claude)
**https://noterx.muran.tech**

### 安装与运行
1. 打开链接 → 拖入小红书笔记截图(支持多张拼接)
2. AI 自动识别标题、正文、分类(< 30s)
3. 点击"开始诊断" → 观看 5 位 AI 专家实时辩论
4. 获取完整报告:评分 · 雷达图 · 优化方案 · 模拟评论区 · 分享卡片

```bash
# 1. 克隆项目
git clone https://github.com/your-repo/noterx.git
cd noterx
手机电脑均可使用,无需注册。

# 2. 配置环境变量
cp .env.example backend/.env
# 编辑 backend/.env,填入你的 API Key
## 核心技术

# 3. 安装依赖 + 初始化数据库(一键)
make install && make data
### 三大自训练模型

# 4. 一键启动
./start.sh
```
| 模型 | 训练数据 | 能力 |
|---|---|---|
| **Model A — 量化预测引擎** | 874 条真实笔记 · 回归分析 | 5 品类差异化权重 · 5 维度即时评分 · < 50ms 无 LLM 调用 |
| **Baseline Knowledge Graph — 基线知识图谱** | 874 笔记 + 2465 评论 · K-Means 聚类 | 品类爆款线 · 互动中位数 · 标签分布 · 发布时段热力图 |
| **Comment Persona Engine — 评论画像引擎** | 2465 条真实评论 · LLM 分类 | 6 种用户画像(种草型/经验型/质疑型/凑热闹型/求助型/吐槽型)· 情绪分布 · 点赞预估 |

访问 `http://localhost:5173` 开始使用。
### 四阶段诊断引擎

### 手动启动
```
Stage 1 Stage 2 Stage 3 Stage 4
数据驱动基线训练 → Model A 智能初评 → 多智能体深度辩论 → AI 优化闭环

874 笔记 + 2465 评论 5 维度即时打分 4 Agent 并行诊断 自动生成 3 个优化方案
Spearman / 回归 / 聚类 < 50ms 无 LLM 交叉质疑 · 补充论据 即时重新评分
5 品类差异化权重 品类差异化基线 裁判 Agent 综合裁定 最高分方案推荐
```

```bash
# 后端
cd backend
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --reload --port 8000

# 前端(新终端)
cd frontend
npm install
npm run dev
### Multi-Agent 辩论架构

```
Round 1: 并行诊断 Round 2: 交叉辩论 Round 3: 综合裁判

[内容分析师] ─┐ 内容 ←→ 视觉 ┌─→ 最终评分
[视觉诊断师] ─┤→ 独立诊断 + 评分 视觉 ←→ 增长 质疑/反驳 ├─→ 优化标题 + 正文
[增长策略师] ─┤ 增长 ←→ 用户 赞同/补充 ├─→ 封面方向建议
[用户模拟器] ─┘ 用户 ←→ 内容 └─→ 模拟评论区
```

### Makefile 快捷命令
### 技术栈

| 命令 | 作用 |
|------|------|
| `make install` | 安装前后端所有依赖 |
| `make data` | 初始化数据库 + 种子数据 + 计算 baseline |
| `make test` | 运行后端 pytest 测试 |
| `make ci` | 完整 CI 流程(前端构建 + 后端测试) |
| 层 | 技术 |
|---|---|
| **前端** | React 19 · TypeScript · MUI v9 · Framer Motion · ECharts · Vite |
| **后端** | FastAPI · asyncio · SSE 流式推送 · SQLite |
| **AI** | MiMo-v2-Pro(诊断)· MiMo-v2-Omni(多模态视觉)· MiMo-v2-Flash(快速任务) |
| **分析** | jieba 分词 · OpenCV 图像分析 · OCR 文字提取 · 视频首帧/听写 |
| **研究** | Spearman 相关 · 线性回归 · K-Means 聚类 · PCA 可视化 |

## 项目结构
## 产品功能

```
noterx/
├── frontend/ # React 前端
│ └── src/
│ ├── components/ # UI 组件(Toast、ErrorBoundary、RadarChart 等)
│ ├── pages/ # 页面(首页/诊断动画/报告)
│ └── utils/ # API 工具、类型和 fallback 数据
├── backend/ # Python 后端
│ ├── app/
│ │ ├── api/ # FastAPI 路由(diagnose、baseline、link 解析)
│ │ ├── agents/ # 多 Agent 模块 + 编排器
│ │ │ └── prompts/ # Agent System Prompt + 辩论 Prompt
│ │ ├── analysis/ # 多模态分析(文本/图像/OCR/构图)
│ │ ├── baseline/ # Baseline 对比引擎
│ │ ├── models/ # Pydantic 数据模型
│ │ └── utils/ # 工具模块(链接解析器等)
│ ├── data/ # SQLite 数据库(gitignore)
│ └── tests/ # 后端单元测试
├── scripts/ # 数据初始化脚本
├── docs/ # 项目文档
├── .github/workflows/ # GitHub Actions CI
├── Makefile # 开发快捷命令
└── start.sh # 一键启动脚本
```
- **多模态输入**:截图拖入 / Ctrl+V 粘贴 / 视频上传,AI 自动识别标题、正文、分类
- **实时诊断动画**:11 步时间线 + 辩论实况气泡 + Agent 状态跟踪
- **五维雷达评分**:内容质量 · 视觉表现 · 增长策略 · 互动潜力 · 综合评分
- **AI 模拟评论区**:真实 XHS 风格(含吵架/质疑/楼中楼),预估点赞数
- **迭代优化引擎**:一键生成 3 个高分改写方案,自动评分 + 最高分推荐
- **基线对比**:与同品类数千条笔记对比(标题字数 / 标签数 / 爆款率)
- **分享卡片**:一键生成带品牌水印的诊断卡片,支持系统分享到微信/小红书
- **诊断历史**:本地 IndexedDB 存储,隐私安全

## 快速开始

## API 接口
```bash
# 克隆
git clone https://github.com/jiangmuran/noterx.git && cd noterx

# 配置
cp .env.example backend/.env # 编辑填入 API Key

| 方法 | 路径 | 说明 |
|------|------|------|
| `POST` | `/api/diagnose` | 笔记诊断(multipart/form-data) |
| `GET` | `/api/baseline/{category}` | 获取垂类 baseline 数据 |
| `POST` | `/api/parse-link` | 解析小红书分享链接 |
| `GET` | `/api/health` | 健康检查(含数据库状态) |
# 一键安装 + 启动
make install && make data && ./start.sh
```

访问 `http://localhost:5173`

## 团队

**PageOne** — 五个13岁的创作者,用AI解决自己的问题。
**PageOne** — 全场唯一中学生队伍。四个 13 岁的初中生,从零完成数据采集、模型训练、全栈开发到生产部署,48 小时交付完整产品。

姜睦然 · 杨曦哲 · 陈宇夏 · 吕思彤

## License

Apache License 2.0

---

*小红书黑客松巅峰赛作品 #小红书黑客松巅峰赛*
<div align="center">

**[立即体验 →](https://noterx.muran.tech)**

*小红书黑客松巅峰赛 · Topic Star #1*

</div>
4 changes: 4 additions & 0 deletions backend/app/agents/orchestrator.py
Original file line number Diff line number Diff line change
Expand Up @@ -406,6 +406,10 @@ async def _judge_task():
stable_scores=stable_scores,
)
result["model_a_pre_score"] = model_a_score
result["_usage"] = {
"total_tokens": round1_tokens + debate_tokens + judge_tokens,
"duration_sec": round(total_time, 1),
}
return result

async def _run_debate(
Expand Down
Loading
Loading