161 lines
6.6 KiB
Markdown
161 lines
6.6 KiB
Markdown
# AI发现模块
|
||
|
||
## 概述
|
||
AI发现模块是追光AI的核心功能,采用"提示词+JSON粘贴导入"模式,用户复制页面内嵌的提示词发给AI助手,获取JSON后粘贴到页面导入,不调用任何外部AI API。
|
||
|
||
## 架构
|
||
```
|
||
页面内嵌提示词模板(含排除列表) → 用户复制发给AI助手 → AI返回JSON → 粘贴到页面 → API去重导入 → PendingTool/PendingSkill → 管理员审核 → Tool/Skill
|
||
```
|
||
|
||
## 五大操作指令
|
||
|
||
### 探索AI工具 (`/admin/discover-tools`)
|
||
1. 选择分类(20个工具分类)
|
||
2. 复制提示词(自动注入排除列表)
|
||
3. 粘贴AI返回的JSON到输入框
|
||
4. 点击导入按钮,API自动去重导入待审核列表
|
||
5. 可选:批量抓取Logo
|
||
|
||
### 检测AI工具 (`/admin/check-tools`)
|
||
1. 选择范围(已发布/待审核)
|
||
2. 一键检测+抓取Logo
|
||
3. 系统自动逐一GET请求检测网站可访问性
|
||
4. 同时自动抓取缺失Logo,记录成功方法名
|
||
5. 展示Logo抓取方法统计(按成功次数排序)
|
||
6. 失效工具可一键删除
|
||
|
||
### 探索AI技能 (`/admin/discover-skills`)
|
||
1. 选择分类(20个技能分类)
|
||
2. 复制提示词(自动注入排除列表)
|
||
3. 粘贴AI返回的JSON到输入框
|
||
4. 点击导入按钮,API自动去重导入待审核列表
|
||
|
||
### 更新Skill技能 (`/admin/update-skills`)
|
||
1. 选择范围(已发布/待审核)
|
||
2. 一键更新Star
|
||
3. 系统自动从GitHub/Gitee/GitCode API获取最新星级
|
||
4. 展示Star变化表格(上升/下降/不变)
|
||
|
||
### AI新闻发现 (`/admin/discover-news`)
|
||
1. 复制新闻发现提示词
|
||
2. 粘贴AI返回的JSON到输入框
|
||
3. 点击导入按钮,自动生成今日AI日报
|
||
4. 新闻6大分类:产品发布/融资投资/技术突破/政策法规/开源项目/行业事件
|
||
5. 每条新闻含热度评分(1-100)
|
||
|
||
## Logo抓取引擎 (`src/lib/logo-fetcher.ts`)
|
||
|
||
### 核心API
|
||
- `fetchLogo(websiteUrl, html?): Promise<string>` — 返回Logo URL
|
||
- `fetchLogoWithMethod(websiteUrl, html?): Promise<{url, method}>` — 返回Logo URL + 成功方法名
|
||
|
||
### 抓取策略(按优先级,共10种)
|
||
1. **HTML Link图标**: 解析 `<link rel="icon/apple-touch-icon">` 标签
|
||
2. **OG/Twitter图片**: 解析 `<meta property="og:image">` 标签
|
||
3. **HTML Manifest**: 解析 `manifest.json` 中的icons数组
|
||
4. **HTML img标签**: 查找class/alt含"logo"的img标签
|
||
5. **Header区域Logo**: 解析header/nav区域内的img标签
|
||
6. **SVG Logo**: 查找内联SVG logo
|
||
7. **常见路径**: 尝试 /apple-touch-icon.png, /logo.png, /favicon.ico 等
|
||
8. **Favicon服务**:
|
||
- favicon.im
|
||
- Google Favicons (sz=128/64)
|
||
- Clearbit
|
||
- DuckDuckGo
|
||
- Favicon Grabr (API解析)
|
||
- Icon Horse (API解析)
|
||
9. **Brandfetch品牌库**: 通过Brandfetch API获取品牌Logo
|
||
10. **截图兜底**: 通过截图服务获取网站截图
|
||
|
||
### 配置项
|
||
- `enabledMethods`: 启用的抓取方法
|
||
- `commonPaths`: 常见图标路径列表
|
||
- `faviconServices`: Favicon服务列表
|
||
- `minFileSize`: 最小文件大小(默认50字节)
|
||
- `requestTimeout`: 请求超时(默认10秒)
|
||
|
||
### Logo本地存储 (`src/lib/logo-storage.ts`)
|
||
- `downloadLogo(url, filename): Promise<string>` — 下载Logo到 `/public/logos/` 目录
|
||
- 返回本地路径如 `/logos/filename.png`
|
||
|
||
## 自动化评测流程
|
||
|
||
### 架构概览
|
||
```
|
||
GitHub API (octokit) → 搜索热门仓库 → 获取README
|
||
↓
|
||
DeepSeek API (openai兼容) → 五维评测生成 → JSON解析+校验
|
||
↓
|
||
Prisma → Skill记录 + SkillReview记录 + ReviewGenerationLog日志
|
||
↓
|
||
前端 → /api/skills/[slug]/review → SkillReviewCard雷达图展示
|
||
```
|
||
|
||
### 五维评测维度
|
||
| 维度 | 字段 | 说明 |
|
||
|------|------|------|
|
||
| 场景与能力 | capability | 场景覆盖度和核心能力 |
|
||
| 开发体验 | devExp | 安装、文档、API易用性 |
|
||
| 成本与许可 | costLicense | 硬件成本、API定价、许可证风险 |
|
||
| 社区健康 | community | Issue响应、PR频率、生态 |
|
||
| 性能稳定 | performance | 运行效率、稳定性、输出质量 |
|
||
|
||
### 评测标签分类
|
||
LLM框架, Agent框架, RAG, 提示工程, 多模态, 代码助手, 模型训练, 数据工程, 部署工具, 评测工具, 安全对齐, 其他
|
||
|
||
## 定时任务自动化(Task调度系统)
|
||
|
||
### 架构概览
|
||
```
|
||
Crontab(6个定时) → 脚本执行(Node.js .mjs) → 外部API调用(GitHub/DeepSeek/网站)
|
||
↓
|
||
Prisma → Tool/Skill/PendingTool/PendingSkill/DailyReport 写入
|
||
↓
|
||
TaskLog表记录执行结果(status/duration/result/error)
|
||
↓
|
||
后台管理 /admin/tasks → 查看配置/状态/历史/手动触发
|
||
```
|
||
|
||
### 7个任务总览
|
||
|
||
| # | 任务 | 脚本 | Cron | 依赖外部API | 产量 |
|
||
|---|------|------|------|------------|------|
|
||
| Task1 | 发现AI工具 | task1-discover-tools.mjs | 06:00 | DeepSeek + RSS抓取 | 不定 |
|
||
| Task3 | 工具巡检 | task3-check-tools.mjs | 03:00 | 网站GET请求 | 全部Tool+PendingTool |
|
||
| Task4 | 发现AI技能 | daily-discover.mjs | 05:00 | GitHub API + DeepSeek | ≤30/天 (stars≥1000) |
|
||
| Task5 | 更新星值 | task5-update-stars.mjs | 01:00 | GitHub API | 全部GitHub技能 |
|
||
| Task6 | 评测热门 | task6-review-hot.mjs | 04:00 | GitHub API + DeepSeek | 2个/天 |
|
||
| - | AI日报 | daily-news.mjs | 07:30 | RSS多源 + DeepSeek | 1篇/天 |
|
||
|
||
### TaskLog 统一记录
|
||
所有任务脚本统一在末尾写入TaskLog:
|
||
```javascript
|
||
await prisma.taskLog.create({
|
||
data: { taskKey: "taskX-xxx", taskName: "任务名", status: "completed",
|
||
startedAt, finishedAt, duration, result, error }
|
||
});
|
||
```
|
||
失败时在 catch 块中写入 status: "failed" 的日志。
|
||
|
||
### 后台可视化
|
||
- `/admin/tasks` — 6个任务卡片,显示启用状态/Cron/最近执行/手动运行
|
||
- `/admin/tasks/logs` — 全部执行历史,按任务筛选,可展开查看结果详情
|
||
- `/admin/tasks/[taskKey]` — 单任务详情,统计成功率/失败率/平均耗时
|
||
|
||
## 质量过滤
|
||
|
||
### isValidAIProject()
|
||
- 关键词过滤: `book/guide/tutorial/awesome/interview/notes/handbook/cheatsheet/roadmap/curated-list` 等
|
||
- 语言过滤: 纯Markdown/HTML文档Repo(Stars<5000)自动拒绝
|
||
- 主题过滤: 有GitHub Topics的Repo必须包含AI相关Topic(ai/llm/rag/agent/gpt等)
|
||
|
||
## AI日报新闻源
|
||
- **36kr** RSS (https://36kr.com/feed) — 国内科技资讯
|
||
- **IT之家** RSS (https://www.ithome.com/rss/) — 国内科技资讯
|
||
- **开源中国** RSS (https://www.oschina.net/news/rss) — 开源动态
|
||
- **HackerNews** API — 海外AI/技术热点
|
||
- **Google News** RSS — 海外新闻(国内服务器可能无法访问)
|
||
- 流程: 搜索真实新闻 → AI关键词过滤 → 近2天筛选 → DeepSeek整理格式 → 入库发布
|
||
- **严禁让DeepSeek直接生成新闻内容**(会编造假新闻),必须基于真实新闻素材整理
|