{
  "markdown": "# 真选AI (TrueAI) — 新一代 AI 导航，懂你\n\n[![Live](https://img.shields.io/badge/live-shiflowai.cloud-22d3ee)](https://www.shiflowai.cloud)\n[![MCP](https://img.shields.io/badge/MCP-server-blueviolet)](./skills/trueai/SKILL.md)\n[![Skill](https://img.shields.io/badge/agent-skill-orange)](./skills/trueai/SKILL.md)\n[![StructAIWeb](https://img.shields.io/badge/data%20agent-StructAIWeb-orange)](https://github.com/chenyujing1234-netizen/StructAIWeb)\n[![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](./LICENSE)\n\n> 我来帮你省钱，我来帮你省时间。\n> 数据实时、人工评测、无广告。\n> 没有最好的，只有最适合你的。\n\nTrueAI 是一个面向 AI 工具的 **智能体推荐 + 人工评测 + 对话式导航** 平台 MVP。\n用户可以：\n\n- 浏览按类目组织的 AI 工具卡片墙（带吊绳轻摆动效）\n- 用对话的方式让 **\"懂你\"** 助手反问并推荐（流式 SSE）\n- 查看多维排行榜，支持\"用自然语言生成专属排名\"\n- 把最多 3 个工具加入对比抽屉，做并排多维对比\n- 阅读 / 提交工具评测（审核通过后可获得现金奖励；MVP 仅保留表结构）\n\n## 🤖 接入你的 AI Agent（MCP / Skill）\n\nTrueAI 1600+ 应用目录已封装成 **MCP Server** 和 **单文件 Skill**，让你的\nagent 直接获得\"挑 AI 工具\"的能力。完整文档：[`skills/trueai/SKILL.md`](./skills/trueai/SKILL.md)。\n\n### 一行接入 MCP（Claude Desktop / Cursor / Cline / Continue / Windsurf）\n\n```json\n{ \"mcpServers\": { \"trueai\": { \"url\": \"https://www.shiflowai.cloud/mcp\" } } }\n```\n\n接入后 agent 立即获得 4 个工具：\n\n| 工具 | 用途 |\n|---|---|\n| `recommend_ai_tools(description, top_k)` | 用户自然语言需求 → 推荐合适应用 |\n| `get_ai_tool(name_or_url, include_reviews)` | 名称 / slug / 官网 URL → 应用完整信息 |\n| `list_ai_tools(category, free_only, ...)` | 按分类 / 形态 / 是否免费 浏览目录 |\n| `list_categories()` | 列出全部分类 |\n\n### 无 MCP 也能用——drop-in skill 文件\n\n把 [`skills/trueai/SKILL.md`](./skills/trueai/SKILL.md) 复制到任意 agent 的 skills 目录，\nagent 就会按文档里 curl 示例直接调 `https://www.shiflowai.cloud/api/*`。\n\n### 数据 schema\n\n每个 AI 应用 34 个结构化字段（评分 / 价格 / 形态 / 评论 / 链接 …），\n完整 JSON Schema：[`docs/ai_tool_schema.json`](./docs/ai_tool_schema.json)。\n\n## 🕷️ 数据从哪里来：StructAIWeb（核心采集智能体）\n\nTrueAI 网站里 1600+ 应用的结构化字段——名称、Logo、Slogan、定价、子功能列表、\n易用性 / 效果 / 性价比评分等——**不是人工录入的**，而是由我们另一个开源项目\n**[StructAIWeb](https://github.com/chenyujing1234-netizen/StructAIWeb)** 自动跑出来的。\n它是 TrueAI 数据管线的 **核心 AI 智能体**：\n\n| 维度 | 说明 |\n| --- | --- |\n| 仓库 | <https://github.com/chenyujing1234-netizen/StructAIWeb> |\n| 形态 | Windows 桌面 GUI + CLI（Python + Playwright） |\n| 浏览器 | 通过 CDP 接管你本地已登录的 Chrome，天然复用 Cookie / 扩展，规避大多数风控 |\n| 探索 | 启发式按「价格 → 功能 → 关于 → 文档」遍历站点，自动点 CTA 进入主功能区 |\n| 试用 | 主动输入提示词、点 \"生成 / 提交\"，**永远避开 \"购买 / 充值 / 订阅\"** 按钮 |\n| 视觉 | 可选启用多模态视觉模型（Qwen-VL / GPT-4o / GLM-4V）识别\"该点哪个按钮\" |\n| 登录墙 | 自动检测并暂停，等你完成登录后继续 |\n| 整合 | 把所有页面快照交给 LLM 输出结构化 JSON + 三项主观评分（usability / effect / price） |\n| 输出字段 | 与 [`docs/ai_tool_schema.json`](./docs/ai_tool_schema.json) **完全对齐** |\n| License | MIT |\n\n简言之：\n\n> **StructAIWeb 负责\"看懂一个 AI 网站\"，TrueAI 负责\"把上千个看懂的结果织成一个懂你的导航站\"。**\n\n想自己跑数据 / 扩展更多 AI 工具？fork StructAIWeb，跑完把 `output/*.json` 喂进 TrueAI 的\n`backend/scripts/sync_*.py` 入库脚本即可。\n\n## 技术栈\n\n| 层 | 选型 |\n| --- | --- |\n| 后端 | Python 3.10+ / FastAPI 0.115 / SQLAlchemy 2 / Alembic / PyMySQL |\n| 前端 | Next.js 14 (App Router, 纯 JavaScript) / Tailwind CSS / Framer Motion / Zustand |\n| 数据库 | MySQL 8 (`114.55.254.123:3306/trueai`) |\n| LLM | 阿里云 DashScope (`qwen-plus`)，未配置 Key 时自动回退 Mock 文案 |\n| 鉴权 | JWT (python-jose) + bcrypt |\n\n## 目录结构\n\n```\nTrueAI/\n├── backend/              # FastAPI 服务\n│   ├── app/\n│   │   ├── core/         # 配置 / DB / 安全\n│   │   ├── models/       # ORM 模型\n│   │   ├── schemas/      # Pydantic\n│   │   ├── api/routers/  # auth / categories / tools / reviews / rankings / stats / search\n│   │   ├── services/llm/ # Qwen 与 Mock 两种 Provider\n│   │   ├── services/recommend.py  # 意图抽取 + MySQL 候选召回\n│   │   └── seeds/seed_tools.py\n│   ├── alembic/\n│   └── requirements.txt\n└── frontend/             # Next.js 14\n    ├── app/              # layout / page / category / tool / search / rankings / compare / earn\n    ├── components/       # NavBar / HeroTypewriter / Sidebar / ToolCard / CompareBar / ChatSearch ...\n    ├── lib/              # api.js / compareStore.js / labels.js\n    └── tailwind.config.js\n```\n\n## 快速开始\n\n> 前提：已安装 Python 3.10+、Node 20+、能访问 MySQL `114.55.254.123:3306`。\n\n### 1. 后端\n\n```bash\ncd backend\npython3 -m venv venv\nsource venv/bin/activate\npip install -r requirements.txt\ncp .env.example .env    # 按需改 JWT_SECRET / DASHSCOPE_API_KEY\n\n# 首次：执行数据库迁移 + 种子数据\nalembic upgrade head\npython -m app.seeds.seed_tools\n\nuvicorn app.main:app --host 0.0.0.0 --port 8000 --reload\n# http://localhost:8000/docs 查看 OpenAPI\n```\n\n### 2. 前端\n\n```bash\ncd frontend\nnpm install\ncp .env.local.example .env.local   # 默认指向 http://127.0.0.1:8000\nnpm run dev\n# 打开 http://localhost:3000\n```\n\n## 环境变量\n\n### `backend/.env`\n\n| 变量 | 说明 |\n| --- | --- |\n| `DATABASE_URL` | 形如 `mysql+pymysql://user:pass@host:3306/trueai`，密码中特殊字符需 URL 编码（`@` → `%40`） |\n| `JWT_SECRET` | JWT 签名密钥，生产请替换为长随机串 |\n| `JWT_EXPIRES_MINUTES` | token 过期分钟数，默认 7 天 |\n| `LLM_PROVIDER` | `qwen`（默认）。为空或 Key 缺失时自动回退 Mock |\n| `DASHSCOPE_API_KEY` | 通义千问 Key，在 [DashScope 控制台](https://dashscope.console.aliyun.com/) 创建 |\n| `QWEN_MODEL` | 默认 `qwen-plus`，可换成 `qwen-turbo` / `qwen-max` |\n| `CORS_ORIGINS` | 允许的前端 origin，逗号分隔 |\n\n### `frontend/.env.local`\n\n| 变量 | 说明 |\n| --- | --- |\n| `NEXT_PUBLIC_API_BASE` | 后端 Base URL，开发默认 `http://127.0.0.1:8000` |\n\n> 前端所有 `/api/*` 请求在 Next.js 端通过 `rewrites` 代理到后端，避免浏览器 CORS 问题。\n\n## 核心 API\n\n| 接口 | 说明 |\n| --- | --- |\n| `GET /api/health` | 健康检查 |\n| `GET /api/stats` | 首页横幅用：工具数 / 分类数 / 评测数 / 价值观文案 |\n| `GET /api/categories` | 全部分类 + 每类工具数 |\n| `GET /api/tools` | 列表 + 多维筛选 + 排序 + 分页 |\n| `GET /api/tools/{id 或 slug}` | 智能体详情 |\n| `POST /api/tools/compare` | 对比（body 为 id 列表） |\n| `GET /api/rankings?dimension=&category=&top=` | 排行榜 |\n| `POST /api/reviews` | 提交评测（需 Bearer token） |\n| `GET /api/reviews?tool_id=&status_filter=approved` | 评测列表 |\n| `POST /api/search/chat` | 对话搜索，SSE 流：`event: meta` + 多个 `event: delta` + `event: done` |\n| `GET /api/search/chat?q=...` | 非流式兜底：直接给候选和外部导航 |\n| `POST /api/auth/register` / `/login` / `GET /api/auth/me` | 注册 / 登录 / 查询当前用户 |\n\n种子数据自带一个管理员账号：`admin / admin123456`（生产请删除或改密）。\n\n## \"懂你\"对话搜索的工作方式\n\n1. 客户端把当前会话（含历史）`POST` 到 `/api/search/chat`。\n2. 后端根据最新 user 消息，用关键词字典抽取 **类目 / 人群 / 免费 / 国内直连** 等意图。\n3. 先从 MySQL 召回 ≤ 6 个候选，立即通过 `event: meta` 推送给前端（前端马上渲染卡片）。\n4. 接着把系统 Prompt + 候选摘要 + 会话历史交给 Qwen 流式输出，按字/片推送 `event: delta`。\n5. 若候选为空，`meta` 中带 `external` 外部 AI 导航站清单，前端展示\"去别家看看\"。\n\n## 常见问题\n\n- **`ValueError: invalid interpolation syntax`**：Alembic 读 `%` 会报错。`alembic/env.py` 已做 `%` → `%%` 转义。\n- **`pymysql` 连接慢 / 超时**：`pool_pre_ping=True`、`pool_recycle=3600` 已打开；请确认 MySQL 白名单已允许你的出口 IP。\n- **前端 API 跨域**：开发期通过 `next.config.js` rewrites 代理，无需额外处理。部署时建议把后端放到同域 `/api/*` 路径下。\n- **Qwen 没配 Key**：`/api/search/chat` 会自动回退到 Mock Provider，候选卡片依然是真实数据，只是 AI 文案是占位。\n\n## 下一步（非 MVP）\n\n- 任务 / 赏金系统：管理员发布任务 → 用户领取评测 → 后台审核 → 微信提现\n- 用户自发布任务\n- 评测通过后自动刷新工具的综合评分\n- 微信登录 + 手机号登录\n- 工具增删改的管理后台\n\nMIT License.\n",
  "bytes": 6627,
  "sha": "3733d95524cc2c4ea32e57070395cc2ae6db18e039b6ec19f20106dd00baa7d4",
  "repo_slug": "chenyujing1234-netizen/trueai",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_chenyujing1234_netizen_trueai_93ae4d33/readme"
}