26 Commits

Author SHA1 Message Date
5273cf6f03 data: 为所有类别配置参数字段 - 内置分类和动态分类完整字段定义 2026-04-28 13:09:33 +08:00
3f7a5dd5a1 feat: 参数字段管理功能 - 类别和子类别可配置参数列表 2026-04-28 12:50:10 +08:00
146efdf6bd data: 为各类别产品分配子类别 2026-04-28 12:26:17 +08:00
db5b6bb6c7 feat: 后台管理所有类别数据添加子类别字段和筛选功能 2026-04-28 12:05:21 +08:00
35df07725e feat: 分类和子类别ID自动生成 - 不再需要手动填写ID 2026-04-28 10:53:15 +08:00
867a0a3eaf feat: 内置分类子类别管理功能 - 分类管理中可编辑内置类别的子类别配置 2026-04-28 10:41:41 +08:00
a647179e72 feat: 智能补充参数功能 - 编辑已有产品时上传图片/文本补充缺失字段 2026-04-28 10:09:58 +08:00
438fba347a fix: 添加 GET /api/categories/<id> 单个分类详情API 2026-04-28 09:10:40 +08:00
8066fc4386 chore: 更新版本号到 v1.7.1 2026-04-28 00:28:59 +08:00
9cd9ccd8e0 feat: 子类别管理界面重构,支持可视化增删改
- 添加子类别编辑弹框(subcategoryModal)
- 子类别列表可视化显示(卡片样式)
- 支持添加、编辑、删除子类别
- 表单输入关键特性字段和标签
- 替换原来的JSON文本编辑方式
2026-04-28 00:28:36 +08:00
a9cbd1b2ba chore: 更新版本号到 v1.7.0 2026-04-28 00:17:27 +08:00
685582b7e6 feat: 支持子类别配置和关键特性显示
- 类别数据结构新增 subcategories 字段
- 每个子类别可定义 key_features 和 feature_labels
- 前端模型页面添加子类别选择器
- 表格根据子类别动态显示关键特性列
- 后台管理支持编辑子类别配置(JSON格式)
- 预设了各类别的子类别配置(对话、代码、推理、视觉等)
2026-04-28 00:16:55 +08:00
961322f8ba chore: 更新版本号到 v1.6.0 2026-04-27 19:58:02 +08:00
b40e890e2b feat: 后台管理添加大模型接口配置功能
- 网站配置页面新增 LLM 配置区域
- 支持配置 API 地址、API Key、文本模型、视觉模型
- LLM 配置从 config.json 动态读取
- 不再使用硬编码的 LLM_CONFIG 常量
2026-04-27 19:57:22 +08:00
9525d56ffc fix: 修复f-string花括号转义问题导致的API错误 2026-04-27 18:44:37 +08:00
5433605fec fix: 增强剪贴板粘贴的错误提示,说明HTTPS/localhost限制 2026-04-27 18:40:36 +08:00
b981e30f46 fix: 修复版本号显示 2026-04-27 18:39:41 +08:00
e2d35b6fa0 feat: 支持多图上传和智能解析产品参数
- 新增 /api/parse-images API 预览解析结果
- 智能添加支持多张图片上传和粘贴
- 支持一次解析出多个产品参数
- 所有类别(模型/GPU/CPU/动态分类)都支持图片解析
- 添加 vision_model 配置支持视觉模型
2026-04-27 18:29:06 +08:00
45190980a9 feat: 发布日期、热度、置顶、图片上传功能
- 新增发布日期(publish_date)、热度(views)、置顶(is_pinned)字段
- 后台管理表格显示新字段和置顶操作按钮
- 前端默认排序:置顶优先 → 发布日期最新
- 新增多种排序选项:发布日期、热度、名称等
- 新增图片上传API(支持多图上传)
- 后台管理表单添加图片上传组件(支持文件选择和粘贴)
- 数据创建时自动初始化新字段
2026-04-20 21:25:57 +08:00
627148a87f feat: 知识库数据添加显示开关功能
- knowledge API添加visible字段支持
- 前台过滤隐藏的知识条目(默认)
- 后台显示全部知识条目(all=1)
- 新增toggle knowledge visible API
- 知识库表格增加显示开关列
2026-04-11 02:32:10 +08:00
74be7688c9 feat: v1.2.0 新增网站配置管理功能
新功能:
- 后台管理新增'网站配置'菜单
- 支持配置:网站名称、副标题、备案号、联系邮箱、GitHub、页脚文字
- 前台页面自动读取配置显示
- 页脚支持备案号链接

配置存储在 data/config.json
2026-04-11 02:27:21 +08:00
7a2b1da9ff fix: 后台管理显示全部数据,包括隐藏的
- 分类API添加all=1参数
- 动态分类数据API添加all=1参数
- 动态分类表格增加显示开关列
- 所有表格的眼睛按钮添加title提示
- 隐藏数据用灰色背景/透明度区分
- showRawData支持动态分类数据
2026-04-11 02:12:55 +08:00
dfd7234fd6 fix: 修复模型排序错误,改名为大模型管理
- 修复智能添加创建的不完整数据导致排序错误
- 添加安全排序函数处理缺失字段
- 改名:模型管理 → 大模型管理
- 清理测试数据
2026-04-11 02:06:06 +08:00
22b1a78132 fix: 修复后台管理页面JS语法错误(getCategoryForm重复) 2026-04-11 02:00:20 +08:00
d28ad1a292 feat: v1.1.0 新增智能添加和展示开关功能
功能更新:
- 新增智能添加功能:粘贴文本自动解析为结构化数据
- 新增展示开关:各分类和产品支持显示/隐藏控制
- 保留原始数据:智能添加的产品保留raw_text字段
- 优化价格显示:支持多币种、价格区间、单位
- 修复图标问题:CPU图标改为ri-cpu-line
- 新增favicon:所有页面添加浏览器标签图标

技术改进:
- 新增大模型API集成(LLM Proxy)
- 新增smart-add API接口
- 新增visible字段和toggle API
- 优化前端表格显示
2026-04-11 01:54:28 +08:00
1b22718d5a fix: 所有页面导航栏统一动态加载类别
修复:各页面顶部导航栏添加 loadNav() 调用,确保所有页面显示一致的类别列表
2026-04-09 12:42:06 +08:00
25 changed files with 33218 additions and 274 deletions

1169
app.py

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

14
data/config.json Normal file
View File

@@ -0,0 +1,14 @@
{
"site_name": "ParamHub",
"site_subtitle": "参数百科",
"footer_text": "ParamHub - 模型与硬件参数速查平台",
"icp_number": "",
"copyright_year": "2026",
"contact_email": "wlq@tphai.com",
"github_url": "",
"llm_base_url": "https://open.bigmodel.cn/api/paas/v4",
"llm_api_key": "2259e33a1357460abe17919aaf81e73d.K44a8LPQTmFM5PKm",
"llm_model": "glm-4.5-air",
"llm_vision_model": "glm-4.6v",
"updated_at": "2026-04-27 23:58:26"
}

View File

@@ -1,10 +1,150 @@
[
{"id": "epyc9654", "name": "AMD EPYC 9654", "manufacturer": "AMD", "architecture": "Zen 4", "cores": 96, "threads": 192, "base_clock_ghz": 2.4, "boost_clock_ghz": 3.7, "l3_cache_mb": 384, "tdp_watts": 360, "price_usd": 11000, "release_year": 2022, "description": "AMD顶级服务器CPU96核心"},
{"id": "epyc9554", "name": "AMD EPYC 9554", "manufacturer": "AMD", "architecture": "Zen 4", "cores": 64, "threads": 128, "base_clock_ghz": 3.1, "boost_clock_ghz": 3.8, "l3_cache_mb": 256, "tdp_watts": 360, "price_usd": 6800, "release_year": 2022, "description": "64核心高性能服务器CPU"},
{"id": "epyc9454", "name": "AMD EPYC 9454", "manufacturer": "AMD", "architecture": "Zen 4", "cores": 48, "threads": 96, "base_clock_ghz": 2.75, "boost_clock_ghz": 3.8, "l3_cache_mb": 192, "tdp_watts": 290, "price_usd": 4100, "release_year": 2022, "description": "48核心服务器CPU"},
{"id": "xeonw9359x", "name": "Intel Xeon w9-3595X", "manufacturer": "Intel", "architecture": "Sapphire Rapids", "cores": 56, "threads": 112, "base_clock_ghz": 1.9, "boost_clock_ghz": 4.8, "l3_cache_mb": 105, "tdp_watts": 350, "price_usd": 6200, "release_year": 2023, "description": "Intel顶级工作站CPU"},
{"id": "xeonw5345", "name": "Intel Xeon w5-3435", "manufacturer": "Intel", "architecture": "Sapphire Rapids", "cores": 24, "threads": 48, "base_clock_ghz": 3.1, "boost_clock_ghz": 4.7, "l3_cache_mb": 45, "tdp_watts": 230, "price_usd": 950, "release_year": 2023, "description": "中端工作站CPU"},
{"id": "ryzen97950x", "name": "AMD Ryzen 9 7950X", "manufacturer": "AMD", "architecture": "Zen 4", "cores": 16, "threads": 32, "base_clock_ghz": 4.5, "boost_clock_ghz": 5.7, "l3_cache_mb": 64, "tdp_watts": 170, "price_usd": 550, "release_year": 2022, "description": "顶级消费级CPU适合AI开发"},
{"id": "ryzen97950x3d", "name": "AMD Ryzen 9 7950X3D", "manufacturer": "AMD", "architecture": "Zen 4", "cores": 16, "threads": 32, "base_clock_ghz": 4.2, "boost_clock_ghz": 5.7, "l3_cache_mb": 144, "tdp_watts": 120, "price_usd": 700, "release_year": 2023, "description": "带3D V-Cache游戏性能更强"},
{"id": "intel14900k", "name": "Intel Core i9-14900K", "manufacturer": "Intel", "architecture": "Raptor Lake Refresh", "cores": 24, "threads": 32, "base_clock_ghz": 3.2, "boost_clock_ghz": 6.0, "l3_cache_mb": 36, "tdp_watts": 125, "price_usd": 580, "release_year": 2023, "description": "Intel顶级消费级CPU"}
{
"id": "epyc9654",
"name": "AMD EPYC 9654",
"manufacturer": "AMD",
"architecture": "Zen 4",
"cores": 96,
"threads": 192,
"base_clock_ghz": 2.4,
"boost_clock_ghz": 3.7,
"l3_cache_mb": 384,
"tdp_watts": 360,
"price_usd": 11000,
"release_year": 2022,
"description": "AMD顶级服务器CPU96核心",
"subcategory_id": "server"
},
{
"id": "epyc9554",
"name": "AMD EPYC 9554",
"manufacturer": "AMD",
"architecture": "Zen 4",
"cores": 64,
"threads": 128,
"base_clock_ghz": 3.1,
"boost_clock_ghz": 3.8,
"l3_cache_mb": 256,
"tdp_watts": 360,
"price_usd": 6800,
"release_year": 2022,
"description": "64核心高性能服务器CPU",
"subcategory_id": "server"
},
{
"id": "epyc9454",
"name": "AMD EPYC 9454",
"manufacturer": "AMD",
"architecture": "Zen 4",
"cores": 48,
"threads": 96,
"base_clock_ghz": 2.75,
"boost_clock_ghz": 3.8,
"l3_cache_mb": 192,
"tdp_watts": 290,
"price_usd": 4100,
"release_year": 2022,
"description": "48核心服务器CPU",
"subcategory_id": "server"
},
{
"id": "xeonw9359x",
"name": "Intel Xeon w9-3595X",
"manufacturer": "Intel",
"architecture": "Sapphire Rapids",
"cores": 56,
"threads": 112,
"base_clock_ghz": 1.9,
"boost_clock_ghz": 4.8,
"l3_cache_mb": 105,
"tdp_watts": 350,
"price_usd": 6200,
"release_year": 2023,
"description": "Intel顶级工作站CPU",
"subcategory_id": "server"
},
{
"id": "xeonw5345",
"name": "Intel Xeon w5-3435",
"manufacturer": "Intel",
"architecture": "Sapphire Rapids",
"cores": 24,
"threads": 48,
"base_clock_ghz": 3.1,
"boost_clock_ghz": 4.7,
"l3_cache_mb": 45,
"tdp_watts": 230,
"price_usd": 950,
"release_year": 2023,
"description": "中端工作站CPU",
"subcategory_id": "server"
},
{
"id": "ryzen97950x",
"name": "AMD Ryzen 9 7950X",
"manufacturer": "AMD",
"architecture": "Zen 4",
"cores": 16,
"threads": 32,
"base_clock_ghz": 4.5,
"boost_clock_ghz": 5.7,
"l3_cache_mb": 64,
"tdp_watts": 170,
"price_usd": 550,
"release_year": 2022,
"description": "顶级消费级CPU适合AI开发",
"subcategory_id": "desktop"
},
{
"id": "ryzen97950x3d",
"name": "AMD Ryzen 9 7950X3D",
"manufacturer": "AMD",
"architecture": "Zen 4",
"cores": 16,
"threads": 32,
"base_clock_ghz": 4.2,
"boost_clock_ghz": 5.7,
"l3_cache_mb": 144,
"tdp_watts": 120,
"price_usd": 700,
"release_year": 2023,
"description": "带3D V-Cache游戏性能更强",
"subcategory_id": "mobile"
},
{
"id": "intel14900k",
"name": "Intel Core i9-14900K",
"manufacturer": "Intel",
"architecture": "Raptor Lake Refresh",
"cores": 24,
"threads": 32,
"base_clock_ghz": 3.2,
"boost_clock_ghz": 6.0,
"l3_cache_mb": 36,
"tdp_watts": 125,
"price_usd": 580,
"release_year": 2023,
"description": "Intel顶级消费级CPU",
"subcategory_id": "desktop"
},
{
"name": "AMD 锐龙 AI 9 H 365",
"manufacturer": "AMD",
"architecture": "Zen 5, Zen 5c",
"cores": 10,
"threads": 20,
"base_clock_ghz": 2.0,
"boost_clock_ghz": 5.0,
"l3_cache_mb": 24,
"tdp_watts": 28,
"description": "AMD 锐龙 AI 处理器助力打造卓越 AI PC",
"id": "52af6cf2dc28",
"created_at": "2026-04-20 23:19:20",
"visible": true,
"raw_text": "AMD 锐龙 AI 9 H 365\nAMD 锐龙 AI 处理器助力打造卓越 AI PC\n\n \n全部折叠\n一般规格\n名称\nAMD 锐龙 AI 9 H 365\n产品系列\n锐龙\n系列\n锐龙 AI 300 系列\n外形规格\n笔记本电脑 , 台式机\nAMD PRO 技术\n否\n区域供货状况\n中国\n原代号\nStrix Point\n处理器架构\n4x Zen 5 , 6x Zen 5c\nCPU 核心数\n10\n多线程 (SMT)\n是\n线程数\n20\n最高加速时钟频率 \n最高可达 5 GHz\nMax Zen5c Clock \n最高可达 3.3 GHz\n基准时钟频率 \n2 GHz\nZen5 Base Clock\n2 GHz\nZen5c Base Clock\n2 GHz\nL2 高速缓存\n10 MB\nL3 高速缓存\n24 MB\n默认热设计功耗 (TDP)\n28W\nAMD 可配置热设计功耗 (cTDP)\n15-54W\nCPU 核心的处理器工艺\nTSMC 4nm FinFET\n封装芯片计数\n1\nAMD EXPO™ 内存超频技术\n是\n精准频率提升 (PBO)\n是\n曲线优化器电压偏移\n是\nCPU 平台\nFP8\n支持的扩展\nAES , AMD-V , AVX , AVX2 , AVX512 , FMA3 , MMX-plus , SHA , SSE , SSE2 , SSE3 , SSE4.1 , SSE4.2 , SSE4A , SSSE3 , x86-64\n最高工作温度 (Tjmax)\n100°C\n*支持的操作系统\nWindows 11 - 64-Bit Edition , RHEL x86 64-Bit , Ubuntu x86 64-Bit\n连接\nNative USB 4 (40Gbps)\n2\nNative USB 3.2 Gen 2 (10Gbps)\n2\nNative USB 2.0 (480Mbps)\n4\nPCI Express® Version\nPCIe® 4.0\n原生 PCIe® 通道 (总共/可用)\n16 , 16\nNVMe 支持\nBoot , RAID0 , RAID1\n系统内存类型\nDDR5 (FP8) , LPDDR5X (FP8)\n内存通道数\n2\n最大内存\n256 GB\n最高内存速度\n2x2R\tDDR5-5600, LPDDR5x-8000\n支持 ECC\n否\n显卡功能\n显卡型号\nAMD Radeon™ 880M\n显卡核心数\n12\n显卡频率\n2900 MHz\nDirectX® 版本\n12\nDisplayPort™ 版本\n2.1\nDisplayPort 扩展功能\nAdaptive-Sync , HDR Metadata , UHBR10\nDisplayPort 最高刷新率 (SDR)\n7680x4320 @ 60Hz , 3840x2160 @ 240Hz , 3440x1440 @ 360Hz , 2560x1440 @ 480Hz , 1920x1080 @ 600Hz\nDisplayPort 最高刷新率 (HDR)\n7680x4320 @ 60Hz , 3840x2160 @ 240Hz , 3440x1440 @ 360Hz , 2560x1440 @ 480Hz , 1920x1080 @ 600Hz\nHDMI® 版本\n2.1\n支持的 HDCP 版本\n2.3\nUSB Type-C® DisplayPort™ 备用模式\n是\n支持多个显示器\n是\n显示器个数上限\n4\nAMD FreeSync™\n是\n无线显示\nMiracast\n最大视频编码带宽 (SDR)\n1080p630 8bpc H.264, 1440p373 8bpc H.264, 2160p175 8bpc H.264, 1080p630 8bpc H.265, 1440p373 8bpc H.265, 2160p175 8bpc H.265, 4320p43 8bpc H.265, 1080p864 8/10bpc AV1, 1440p513 8/10bpc AV1, 2160p240 8/10bpc AV1, 4320p60 8/10bpc AV1\n\n最大视频解码带宽\n1080p60 8bpc MPEG2, 1080p60 8bpc VC1, 1080p786 8/10bpc VP9, 2160p196 8/10bpc VP9, 4320p49 8/10bpc VP9, 1080p1200 8bpc H.264, 2160p300 8bpc H.264, 4320p75 8bpc H.264, 1080p786 8/10bpc H.265, 2160p196 8/10bpc H.265, 4320p49 8/10bpc H.265, 1080p960 8/10bpc\n\nAMD SmartShift MAX\n是\nAMD 显存智取技术\n支持\nAI 引擎性能\nAMD Ryzen™ AI\n支持\nOverall TOPS\n最高可达 73 TOPS\nNPU TOPS\n最高可达 50 TOPS\n产品 ID\nTray 产品 ID\n100-000001530 (FP8)\n安全\nAMD 增强病毒防护 (NX bit)\n是",
"publish_date": "",
"views": 0,
"is_pinned": false,
"subcategory_id": "mobile"
}
]

View File

@@ -1,12 +1,207 @@
[
{"id": "h100", "name": "NVIDIA H100", "manufacturer": "NVIDIA", "architecture": "Hopper", "cuda_cores": 16896, "tensor_cores": 528, "memory_gb": 80, "memory_bandwidth_gbs": 3352, "fp32_tflops": 67, "fp16_tflops": 1979, "int8_perf_tops": 3958, "price_usd": 30000, "release_year": 2022, "description": "数据中心顶级GPU专为AI训练设计"},
{"id": "a100", "name": "NVIDIA A100", "manufacturer": "NVIDIA", "architecture": "Ampere", "cuda_cores": 6912, "tensor_cores": 432, "memory_gb": 80, "memory_bandwidth_gbs": 2039, "fp32_tflops": 19.5, "fp16_tflops": 312, "int8_perf_tops": 624, "price_usd": 10000, "release_year": 2020, "description": "数据中心主力GPUAI训练推理通用"},
{"id": "a10040g", "name": "NVIDIA A100 40GB", "manufacturer": "NVIDIA", "architecture": "Ampere", "cuda_cores": 6912, "tensor_cores": 432, "memory_gb": 40, "memory_bandwidth_gbs": 1555, "fp32_tflops": 19.5, "fp16_tflops": 312, "int8_perf_tops": 624, "price_usd": 6000, "release_year": 2020, "description": "A100 40GB版本性价比更高"},
{"id": "l40s", "name": "NVIDIA L40S", "manufacturer": "NVIDIA", "architecture": "Ada Lovelace", "cuda_cores": 18176, "tensor_cores": 568, "memory_gb": 48, "memory_bandwidth_gbs": 864, "fp32_tflops": 91.6, "fp16_tflops": 362, "int8_perf_tops": 724, "price_usd": 7000, "release_year": 2023, "description": "新一代数据中心GPU推理优化"},
{"id": "rtx4090", "name": "NVIDIA RTX 4090", "manufacturer": "NVIDIA", "architecture": "Ada Lovelace", "cuda_cores": 16384, "tensor_cores": 512, "memory_gb": 24, "memory_bandwidth_gbs": 1008, "fp32_tflops": 82.6, "fp16_tflops": 330, "int8_perf_tops": 660, "price_usd": 1600, "release_year": 2022, "description": "消费级最强GPU适合个人AI开发"},
{"id": "rtx4090d", "name": "NVIDIA RTX 4090D", "manufacturer": "NVIDIA", "architecture": "Ada Lovelace", "cuda_cores": 14592, "tensor_cores": 456, "memory_gb": 24, "memory_bandwidth_gbs": 1008, "fp32_tflops": 73.5, "fp16_tflops": 294, "int8_perf_tops": 588, "price_usd": 1400, "release_year": 2024, "description": "4090中国特供版性能略降"},
{"id": "rtx3090", "name": "NVIDIA RTX 3090", "manufacturer": "NVIDIA", "architecture": "Ampere", "cuda_cores": 10496, "tensor_cores": 328, "memory_gb": 24, "memory_bandwidth_gbs": 936, "fp32_tflops": 35.6, "fp16_tflops": 142, "int8_perf_tops": 284, "price_usd": 1200, "release_year": 2020, "description": "上一代旗舰,性价比高"},
{"id": "rtx3080", "name": "NVIDIA RTX 3080", "manufacturer": "NVIDIA", "architecture": "Ampere", "cuda_cores": 8704, "tensor_cores": 272, "memory_gb": 10, "memory_bandwidth_gbs": 760, "fp32_tflops": 29.8, "fp16_tflops": 119, "int8_perf_tops": 238, "price_usd": 700, "release_year": 2020, "description": "中高端消费级GPU"},
{"id": "v100", "name": "NVIDIA V100", "manufacturer": "NVIDIA", "architecture": "Volta", "cuda_cores": 5120, "tensor_cores": 640, "memory_gb": 32, "memory_bandwidth_gbs": 900, "fp32_tflops": 14.8, "fp16_tflops": 118, "int8_perf_tops": 236, "price_usd": 4000, "release_year": 2017, "description": "上一代数据中心GPU仍有价值"},
{"id": "mi300x", "name": "AMD MI300X", "manufacturer": "AMD", "architecture": "CDNA 3", "cuda_cores": 0, "tensor_cores": 304, "memory_gb": 192, "memory_bandwidth_gbs": 5300, "fp32_tflops": 81.7, "fp16_tflops": 1307, "int8_perf_tops": 2614, "price_usd": 15000, "release_year": 2023, "description": "AMD最强AI GPU192GB显存"}
{
"id": "h100",
"name": "NVIDIA H100",
"manufacturer": "NVIDIA",
"architecture": "Hopper",
"cuda_cores": 16896,
"tensor_cores": 528,
"memory_gb": 80,
"memory_bandwidth_gbs": 3352,
"fp32_tflops": 67,
"fp16_tflops": 1979,
"int8_perf_tops": 3958,
"price_usd": 30000,
"release_year": 2022,
"description": "数据中心顶级GPU专为AI训练设计",
"subcategory_id": "datacenter"
},
{
"id": "a100",
"name": "NVIDIA A100",
"manufacturer": "NVIDIA",
"architecture": "Ampere",
"cuda_cores": 6912,
"tensor_cores": 432,
"memory_gb": 80,
"memory_bandwidth_gbs": 2039,
"fp32_tflops": 19.5,
"fp16_tflops": 312,
"int8_perf_tops": 624,
"price_usd": 10000,
"release_year": 2020,
"description": "数据中心主力GPUAI训练推理通用",
"subcategory_id": "datacenter"
},
{
"id": "a10040g",
"name": "NVIDIA A100 40GB",
"manufacturer": "NVIDIA",
"architecture": "Ampere",
"cuda_cores": 6912,
"tensor_cores": 432,
"memory_gb": 40,
"memory_bandwidth_gbs": 1555,
"fp32_tflops": 19.5,
"fp16_tflops": 312,
"int8_perf_tops": 624,
"price_usd": 6000,
"release_year": 2020,
"description": "A100 40GB版本性价比更高",
"subcategory_id": "datacenter"
},
{
"id": "l40s",
"name": "NVIDIA L40S",
"manufacturer": "NVIDIA",
"architecture": "Ada Lovelace",
"cuda_cores": 18176,
"tensor_cores": 568,
"memory_gb": 48,
"memory_bandwidth_gbs": 864,
"fp32_tflops": 91.6,
"fp16_tflops": 362,
"int8_perf_tops": 724,
"price_usd": 7000,
"release_year": 2023,
"description": "新一代数据中心GPU推理优化",
"subcategory_id": "datacenter"
},
{
"id": "rtx4090",
"name": "NVIDIA RTX 4090",
"manufacturer": "NVIDIA",
"architecture": "Ada Lovelace",
"cuda_cores": 16384,
"tensor_cores": 512,
"memory_gb": 24,
"memory_bandwidth_gbs": 1008,
"fp32_tflops": 82.6,
"fp16_tflops": 330,
"int8_perf_tops": 660,
"price_usd": 1600,
"release_year": 2022,
"description": "消费级最强GPU适合个人AI开发",
"subcategory_id": "gaming"
},
{
"id": "rtx4090d",
"name": "NVIDIA RTX 4090D",
"manufacturer": "NVIDIA",
"architecture": "Ada Lovelace",
"cuda_cores": 14592,
"tensor_cores": 456,
"memory_gb": 24,
"memory_bandwidth_gbs": 1008,
"fp32_tflops": 73.5,
"fp16_tflops": 294,
"int8_perf_tops": 588,
"price_usd": 1400,
"release_year": 2024,
"description": "4090中国特供版性能略降",
"subcategory_id": "gaming"
},
{
"id": "rtx3090",
"name": "NVIDIA RTX 3090",
"manufacturer": "NVIDIA",
"architecture": "Ampere",
"cuda_cores": 10496,
"tensor_cores": 328,
"memory_gb": 24,
"memory_bandwidth_gbs": 936,
"fp32_tflops": 35.6,
"fp16_tflops": 142,
"int8_perf_tops": 284,
"price_usd": 1200,
"release_year": 2020,
"description": "上一代旗舰,性价比高",
"subcategory_id": "gaming"
},
{
"id": "rtx3080",
"name": "NVIDIA RTX 3080",
"manufacturer": "NVIDIA",
"architecture": "Ampere",
"cuda_cores": 8704,
"tensor_cores": 272,
"memory_gb": 10,
"memory_bandwidth_gbs": 760,
"fp32_tflops": 29.8,
"fp16_tflops": 119,
"int8_perf_tops": 238,
"price_usd": 700,
"release_year": 2020,
"description": "中高端消费级GPU",
"subcategory_id": "gaming"
},
{
"id": "v100",
"name": "NVIDIA V100",
"manufacturer": "NVIDIA",
"architecture": "Volta",
"cuda_cores": 5120,
"tensor_cores": 640,
"memory_gb": 32,
"memory_bandwidth_gbs": 900,
"fp32_tflops": 14.8,
"fp16_tflops": 118,
"int8_perf_tops": 236,
"price_usd": 4000,
"release_year": 2017,
"description": "上一代数据中心GPU仍有价值",
"subcategory_id": "datacenter"
},
{
"id": "mi300x",
"name": "AMD MI300X",
"manufacturer": "AMD",
"architecture": "CDNA 3",
"cuda_cores": 0,
"tensor_cores": 304,
"memory_gb": 192,
"memory_bandwidth_gbs": 5300,
"fp32_tflops": 81.7,
"fp16_tflops": 1307,
"int8_perf_tops": 2614,
"price_usd": 15000,
"release_year": 2023,
"description": "AMD最强AI GPU192GB显存",
"subcategory_id": "datacenter"
},
{
"name": "RTX 6000D",
"manufacturer": "NVIDIA",
"memory_gb": 84,
"cuda_cores": 19968,
"description": "NVIDIA为中国市场定制的全新工作站显卡搭载84GB GDDR7显存、19968个CUDA核心采用被动散热设计专为服务器机箱风道优化。显存总线为448位核心频率为2430MHz在Geekbench 6 OpenCL测试中获得390,656分。",
"id": "f56b2de6fac4",
"created_at": "2026-04-20 18:19:14",
"visible": true,
"raw_text": "据tweaktown报道NVIDIA为中国市场定制的全新工作站显卡RTX 6000D近日迎来首度拆解。该卡搭载84GB GDDR7显存、19968个CUDA核心采用被动散热设计专为服务器机箱风道优化。\n\n\n相较于满血RTX PRO 600096GB GDDR7/512-bit中国特供版RTX 6000D在规格上进行了多处调整。国内团队“技数犬”发布了拆解视频。\n\n据了解RTX 6000D为无风扇被动散热设计完全依靠机箱气流降温。\n\nRTX 6000D搭载28颗VRAM模块总计84GB GDDR7显存显存总线为448位相比RTX PRO 6000的96GB/512位有所减少。\n\nRTX 6000D GPU 核心为156 SM单元19,968个CUDA核心比RTX PRO 6000少约17%。\n\nRTX 6000D核心频率为2430MHzRTX PRO 6000为2600MHzTDP暂未公布。性能方面RTX 6000D在Geekbench 6 OpenCL测试中获得390,656分低于RTX PRO 6000的4550万分。",
"currency": "CNY",
"price_usd": 45000,
"updated_at": "2026-04-28 11:56:48",
"subcategory_id": "professional",
"views": 0,
"images": []
},
{
"name": "RTX PRO 6000",
"description": "这款专业显卡基于 GB202 GPU拥有 24064 个 CUDA 核心188 个 SM运行频率达 2,617 MHz并配备 96 GB 支持 ECC 校验的 GDDR7 显存。\n\n相比之下面向游戏市场的旗舰显卡 RTX 5090 虽同样基于 GB202 ,但其 CUDA 核心数量缩减至 21,760 个,频率为 2,410 MHz显存容量为 32 GB。\n\n96G超大显存RTX PRO 6000Blackwell初次跑分略逊于RTX 5090\n其测试平台采用了华硕 Pro WS WRX80E-SAGE SE WIFI 主板、AMD 锐龙 Threadripper PRO 3975WX 处理器、512 GB 内存。\n\n在 Geekbench 6.4.0 上,其测试平台 OpenCL 得分仅 368219 分,略低于 RTX 5090 的 376,858 分,差距约 2.3%,外媒认为这主要是由于 RTX PRO 6000 缺乏正式版驱动导致,且显卡功耗可能受限。\n\nRTX PRO 6000 系列将提供两种版本分别为适用于紧凑型机箱规格相同的Max-Q 工作站版但TDP 功耗限制在 300W以及支持最高600W TDP的标准版可满足高强度计算需求。",
"id": "d246301f2032",
"created_at": "2026-04-20 18:21:00",
"visible": true,
"raw_text": "这款专业显卡基于 GB202 GPU拥有 24064 个 CUDA 核心188 个 SM运行频率达 2,617 MHz并配备 96 GB 支持 ECC 校验的 GDDR7 显存。\n\n相比之下面向游戏市场的旗舰显卡 RTX 5090 虽同样基于 GB202 ,但其 CUDA 核心数量缩减至 21,760 个,频率为 2,410 MHz显存容量为 32 GB。\n\n96G超大显存RTX PRO 6000Blackwell初次跑分略逊于RTX 5090\n其测试平台采用了华硕 Pro WS WRX80E-SAGE SE WIFI 主板、AMD 锐龙 Threadripper PRO 3975WX 处理器、512 GB 内存。\n\n在 Geekbench 6.4.0 上,其测试平台 OpenCL 得分仅 368219 分,略低于 RTX 5090 的 376,858 分,差距约 2.3%,外媒认为这主要是由于 RTX PRO 6000 缺乏正式版驱动导致,且显卡功耗可能受限。\n\nRTX PRO 6000 系列将提供两种版本分别为适用于紧凑型机箱规格相同的Max-Q 工作站版但TDP 功耗限制在 300W以及支持最高600W TDP的标准版可满足高强度计算需求。",
"architecture": "GB202",
"memory_gb": 96,
"cuda_cores": 24064,
"currency": "CNY",
"price_usd": 65000,
"updated_at": "2026-04-28 11:56:38",
"manufacturer": "NVIDIA",
"subcategory_id": "professional",
"views": 0,
"images": []
}
]

View File

@@ -2,10 +2,38 @@
{
"name": "比亚迪宋plus dmi 2021款",
"brand": "比亚迪",
"price": "18.87",
"price": 18.87,
"year": "2021",
"category_id": "021dc76d36be",
"id": "3d20dbcd4bdd",
"created_at": "2026-04-09 10:09:56"
"created_at": "2026-04-09 10:09:56",
"subcategory_id": "suv",
"views": 0,
"images": [],
"updated_at": "2026-04-28 12:32:13"
},
{
"name": "秦PLUS",
"brand": "比亚迪",
"price": 5.98,
"specs": {
"长宽高": "4780*1837*1515mm",
"轴距": "2718mm",
"前轮距": "1580mm",
"后轮距": "1590mm",
"轮胎规格": "225/60 R16",
"发动机": "1.5L 101马力 L4",
"最大功率": "74kW",
"最大扭矩": "126N·m",
"变速器": "E-CVT无级变速器",
"中控屏幕尺寸": "10.1英寸"
},
"description": "秦PLUS是一款外观设计极具现代感和运动气息的车型采用家族化设计语言配备大尺寸进气格栅和锐利LED大灯。车身线条流畅内饰简洁大气配备10.1英寸中控屏和语音识别系统。搭载1.5L发动机和E-CVT变速器提供平稳动力输出和低油耗。内部空间宽敞座椅舒适支持多种调节功能。",
"id": "b78fc7983a70",
"category_id": "021dc76d36be",
"created_at": "2026-04-11 02:03:45",
"visible": true,
"raw_text": "秦PLUS的外观设计极具现代感和运动气息前脸采用了家族化设计语言标志性的大尺寸进气格栅占据了前脸的大部分空间搭配锐利的LED大灯组营造出强烈的视觉冲击力。车身线条流畅腰线从车头贯穿至车尾增强了整车的运动感。车尾部分简洁大方的设计与前脸相呼应整体风格时尚而不失稳重。\n\n上海秦PLUS优惠促销最新报价5.98万!轻松开新车\n\n秦PLUS拥有4780*1837*1515mm的长宽高尺寸和2718mm的轴距赋予其宽敞的内部空间。车侧线条流畅且动感十足从前轮距1580mm到后轮距1590mm车轮布局合理增强了车辆的稳定性和操控性。配备的225/60 R16轮胎规格匹配独特风格的轮圈为车辆增添了一抹动感与时尚的气息。\n\n上海秦PLUS优惠促销最新报价5.98万!轻松开新车\n\n秦PLUS的内饰风格简洁大气给人以科技感和舒适感。中控台布局合理配备了10.1英寸的中控屏幕支持语音识别控制系统可轻松操作多媒体系统、导航、电话和空调等功能。方向盘采用皮质材料手感舒适支持手动上下和前后调节方便驾驶员调整到最佳驾驶姿势。座椅采用仿皮材质主驾驶座椅具备前后调节、靠背调节和高低调节功能而副驾驶座椅则支持前后调节和靠背调节确保了乘客的舒适度。后排座椅可以按比例放倒增加储物空间同时车内还配备了USB和Type-C接口方便乘客为电子设备充电。\n\n上海秦PLUS优惠促销最新报价5.98万!轻松开新车\n\n秦PLUS搭载了一台1.5L 101马力的L4发动机最大功率为74kW最大扭矩为126N·m。与之匹配的是E-CVT无级变速器这使得车辆在提供平稳的动力输出的同时还能有效降低油耗。\n\n汽车之家车主@天艺风云 表示外观设计是他当初选择秦PLUS的原因之一。他赞赏整体造型时尚大气龙脸设计搭配犀利的大灯辨识度极高。车身线条流畅溜背式造型增添了几分运动感。全新的“龙鳞辉熠”格栅精致又霸气每次停车都有人问这是什么车外观确实很吸引人。",
"subcategory_id": "sedan"
}
]

View File

@@ -0,0 +1,53 @@
[
{
"name": "Osmo Pocket 4",
"brand": "DJI",
"price": 2999,
"specs": "[object Object]",
"id": "597e29af5937",
"category_id": "71fa2b4d818f",
"created_at": "2026-04-28 00:07:01",
"visible": true,
"raw_text": "",
"images": [],
"publish_date": "",
"views": 0,
"is_pinned": false,
"subcategory_id": "90ce312b560d",
"updated_at": "2026-04-28 12:32:38"
},
{
"name": "Osmo Pocket 3",
"brand": "DJI",
"price": 2799,
"specs": "[object Object]",
"id": "ad10ac80827b",
"category_id": "71fa2b4d818f",
"created_at": "2026-04-28 00:07:01",
"visible": true,
"raw_text": "",
"images": [],
"publish_date": "",
"views": 0,
"is_pinned": false,
"subcategory_id": "90ce312b560d",
"updated_at": "2026-04-28 12:32:43"
},
{
"name": "DJI Pocket 2",
"brand": "DJI",
"price": 1999,
"specs": "[object Object]",
"id": "0fde0f10ad96",
"category_id": "71fa2b4d818f",
"created_at": "2026-04-28 00:07:01",
"visible": true,
"raw_text": "",
"images": [],
"publish_date": "",
"views": 0,
"is_pinned": false,
"subcategory_id": "90ce312b560d",
"updated_at": "2026-04-28 12:32:50"
}
]

View File

@@ -1,9 +1,66 @@
[
{"id": "k001", "title": "什么是参数量?", "category": "ai-models", "icon": "ri-calculator-line", "content": "参数量Parameters是衡量大模型规模的指标表示模型中权重参数的数量。例如 GPT-3 有 175B 参数即约1750亿个参数。", "detail": "参数量决定了模型的容量和表达能力。一般来说,参数量越大,模型能力越强,但也需要更多计算资源。\n\n常见规模分类\n- 小模型:<1B (适合边缘设备)\n- 中模型1B-10B (消费级GPU可运行)\n- 大模型10B-100B (需要多GPU)\n- 超大模型:>100B (需要数据中心)", "order": 1},
{"id": "k002", "title": "什么是上下文长度?", "category": "ai-models", "icon": "ri-text-wrap", "content": "上下文长度Context Length是模型能处理的输入文本最大长度。更长的上下文意味着模型可以理解更长的文档或对话历史。", "detail": "常见长度:\n- 4K传统长度适合简单对话\n- 32K中等长度适合长文档\n- 128K超长上下文如GPT-4 Turbo\n- 200KClaude 3的极限长度", "order": 2},
{"id": "k003", "title": "什么是量化?", "category": "ai-models", "icon": "ri-scales-3-line", "content": "量化Quantization是将模型参数从高精度转换为低精度减少显存占用和计算量。如FP16→INT8→INT4精度损失可控资源节省显著。", "detail": "量化效果:\n- FP32→FP16: 显存减半,精度基本不变\n- FP16→INT8: 显存再减半,精度略降\n- INT8→INT4: 显存再减半,需特殊技术\n\n推荐工具llama.cpp、GPTQ、AWQ等", "order": 3},
{"id": "k004", "title": "什么是MMLU", "category": "ai-models", "icon": "ri-bar-chart-box-line", "content": "MMLUMassive Multitask Language Understanding是评估大模型综合能力的标准测试集覆盖57个学科领域。", "detail": "分数参考:\n- 60-70%入门级如GPT-3\n- 70-80%中等水平如Llama 2 70B\n- 80-90%优秀水平如GPT-4、Claude 3", "order": 4},
{"id": "k005", "title": "如何计算显存需求?", "category": "gpus", "icon": "ri-memory-line", "content": "模型显存需求 ≈ 参数量 × 每参数字节数 × 1.3含KV Cache开销", "detail": "计算公式:\n- FP32: 参数量 × 4字节 × 1.3\n- FP16: 参数量 × 2字节 × 1.3\n- INT8: 参数量 × 1字节 × 1.3\n- INT4: 参数量 × 0.5字节 × 1.3\n\n例如7B模型FP16加载需要约 7 × 2 × 1.3 ≈ 18GB显存", "order": 1},
{"id": "k006", "title": "GPU架构演进", "category": "gpus", "icon": "ri-history-line", "content": "NVIDIA GPU架构从Fermi到Hopper每一代都有显著提升。了解架构有助于选择合适的GPU。", "detail": "主要架构:\n- Volta (2017): V100, 引入Tensor Core\n- Turing (2018): RTX 20系列, RT Core\n- Ampere (2020): A100, RTX 30系列\n- Hopper (2022): H100, FP8支持\n- Ada Lovelace (2022): RTX 40系列, L40S", "order": 2},
{"id": "k007", "title": "CPU核心数选择", "category": "cpus", "icon": "ri-database-2-line", "content": "CPU核心数的选择取决于应用场景。更多核心适合并行任务但单核性能也很重要。", "detail": "场景推荐:\n- 办公/日常4-6核足够\n- 开发/编译8-16核\n- 服务器/虚拟化16-64核\n- 高性能计算64核以上\n\n注意AI训练主要依赖GPUCPU主要用于数据预处理", "order": 1}
{
"id": "k001",
"title": "什么是参数量?",
"category": "ai-models",
"icon": "ri-calculator-line",
"content": "参数量Parameters是衡量大模型规模的指标表示模型中权重参数的数量。例如 GPT-3 有 175B 参数即约1750亿个参数。",
"detail": "参数量决定了模型的容量和表达能力。一般来说,参数量越大,模型能力越强,但也需要更多计算资源。\n\n常见规模分类\n- 小模型:<1B (适合边缘设备)\n- 中模型1B-10B (消费级GPU可运行)\n- 大模型10B-100B (需要多GPU)\n- 超大模型:>100B (需要数据中心)",
"order": 1
},
{
"id": "k002",
"title": "什么是上下文长度?",
"category": "ai-models",
"icon": "ri-text-wrap",
"content": "上下文长度Context Length是模型能处理的输入文本最大长度。更长的上下文意味着模型可以理解更长的文档或对话历史。",
"detail": "常见长度:\n- 4K传统长度适合简单对话\n- 32K中等长度适合长文档\n- 128K超长上下文如GPT-4 Turbo\n- 200KClaude 3的极限长度",
"order": 2
},
{
"id": "k003",
"title": "什么是量化?",
"category": "ai-models",
"icon": "ri-scales-3-line",
"content": "量化Quantization是将模型参数从高精度转换为低精度减少显存占用和计算量。如FP16→INT8→INT4精度损失可控资源节省显著。",
"detail": "量化效果:\n- FP32→FP16: 显存减半,精度基本不变\n- FP16→INT8: 显存再减半,精度略降\n- INT8→INT4: 显存再减半,需特殊技术\n\n推荐工具llama.cpp、GPTQ、AWQ等",
"order": 3
},
{
"id": "k004",
"title": "什么是MMLU",
"category": "ai-models",
"icon": "ri-bar-chart-box-line",
"content": "MMLUMassive Multitask Language Understanding是评估大模型综合能力的标准测试集覆盖57个学科领域。",
"detail": "分数参考:\n- 60-70%入门级如GPT-3\n- 70-80%中等水平如Llama 2 70B\n- 80-90%优秀水平如GPT-4、Claude 3",
"order": 4,
"visible": false
},
{
"id": "k005",
"title": "如何计算显存需求?",
"category": "gpus",
"icon": "ri-memory-line",
"content": "模型显存需求 ≈ 参数量 × 每参数字节数 × 1.3含KV Cache开销",
"detail": "计算公式:\n- FP32: 参数量 × 4字节 × 1.3\n- FP16: 参数量 × 2字节 × 1.3\n- INT8: 参数量 × 1字节 × 1.3\n- INT4: 参数量 × 0.5字节 × 1.3\n\n例如7B模型FP16加载需要约 7 × 2 × 1.3 ≈ 18GB显存",
"order": 1
},
{
"id": "k006",
"title": "GPU架构演进",
"category": "gpus",
"icon": "ri-history-line",
"content": "NVIDIA GPU架构从Fermi到Hopper每一代都有显著提升。了解架构有助于选择合适的GPU。",
"detail": "主要架构:\n- Volta (2017): V100, 引入Tensor Core\n- Turing (2018): RTX 20系列, RT Core\n- Ampere (2020): A100, RTX 30系列\n- Hopper (2022): H100, FP8支持\n- Ada Lovelace (2022): RTX 40系列, L40S",
"order": 2
},
{
"id": "k007",
"title": "CPU核心数选择",
"category": "cpus",
"icon": "ri-database-2-line",
"content": "CPU核心数的选择取决于应用场景。更多核心适合并行任务但单核性能也很重要。",
"detail": "场景推荐:\n- 办公/日常4-6核足够\n- 开发/编译8-16核\n- 服务器/虚拟化16-64核\n- 高性能计算64核以上\n\n注意AI训练主要依赖GPUCPU主要用于数据预处理",
"order": 1
}
]

View File

@@ -1,14 +1,211 @@
[
{"id": "gpt4", "name": "GPT-4", "organization": "OpenAI", "parameters": 1760, "architecture": "Transformer", "context_length": 8192, "input_price": 0.03, "output_price": 0.06, "mmlu": 86.4, "humaneval": 67.0, "is_open_source": false, "license": "Proprietary", "description": "OpenAI最强大的多模态大模型", "created_at": "2024-01-01"},
{"id": "gpt4turbo", "name": "GPT-4 Turbo", "organization": "OpenAI", "parameters": 1760, "architecture": "Transformer", "context_length": 128000, "input_price": 0.01, "output_price": 0.03, "mmlu": 86.4, "humaneval": 67.0, "is_open_source": false, "license": "Proprietary", "description": "GPT-4增强版128K上下文", "created_at": "2024-01-01"},
{"id": "gpt35", "name": "GPT-3.5 Turbo", "organization": "OpenAI", "parameters": 175, "architecture": "Transformer", "context_length": 16385, "input_price": 0.0005, "output_price": 0.0015, "mmlu": 70.0, "humaneval": 48.1, "is_open_source": false, "license": "Proprietary", "description": "性价比高的通用模型", "created_at": "2024-01-01"},
{"id": "claude3opus", "name": "Claude 3 Opus", "organization": "Anthropic", "parameters": 400, "architecture": "Transformer", "context_length": 200000, "input_price": 0.015, "output_price": 0.075, "mmlu": 86.8, "humaneval": 84.9, "is_open_source": false, "license": "Proprietary", "description": "Anthropic最强模型200K上下文", "created_at": "2024-01-01"},
{"id": "claude3sonnet", "name": "Claude 3 Sonnet", "organization": "Anthropic", "parameters": 175, "architecture": "Transformer", "context_length": 200000, "input_price": 0.003, "output_price": 0.015, "mmlu": 79.0, "humaneval": 73.0, "is_open_source": false, "license": "Proprietary", "description": "平衡性能与成本", "created_at": "2024-01-01"},
{"id": "llama270b", "name": "Llama 2 70B", "organization": "Meta", "parameters": 70, "architecture": "Transformer", "context_length": 4096, "input_price": 0, "output_price": 0, "mmlu": 69.8, "humaneval": 29.9, "is_open_source": true, "license": "Llama 2 Community", "description": "Meta开源大模型70B参数", "created_at": "2024-01-01"},
{"id": "llama3", "name": "Llama 3 70B", "organization": "Meta", "parameters": 70, "architecture": "Transformer", "context_length": 8192, "input_price": 0, "output_price": 0, "mmlu": 82.0, "humaneval": 81.7, "is_open_source": true, "license": "Llama 3 Community", "description": "Meta最新开源模型性能接近GPT-4", "created_at": "2024-01-01"},
{"id": "mistral7b", "name": "Mistral 7B", "organization": "Mistral AI", "parameters": 7, "architecture": "Transformer", "context_length": 32768, "input_price": 0, "output_price": 0, "mmlu": 62.5, "humaneval": 26.8, "is_open_source": true, "license": "Apache 2.0", "description": "小巧高效的开源模型", "created_at": "2024-01-01"},
{"id": "mixtral8x7b", "name": "Mixtral 8x7B", "organization": "Mistral AI", "parameters": 47, "architecture": "MoE", "context_length": 32768, "input_price": 0, "output_price": 0, "mmlu": 70.6, "humaneval": 40.2, "is_open_source": true, "license": "Apache 2.0", "description": "MoE架构高效推理", "created_at": "2024-01-01"},
{"id": "qwen72b", "name": "Qwen 72B", "organization": "Alibaba", "parameters": 72, "architecture": "Transformer", "context_length": 32768, "input_price": 0, "output_price": 0, "mmlu": 83.1, "humaneval": 65.4, "is_open_source": true, "license": "Apache 2.0", "description": "阿里开源大模型,中文能力强", "created_at": "2024-01-01"},
{"id": "deepseekv3", "name": "DeepSeek V3", "organization": "DeepSeek", "parameters": 685, "architecture": "MoE", "context_length": 128000, "input_price": 0.00014, "output_price": 0.00028, "mmlu": 88.5, "humaneval": 86.2, "is_open_source": true, "license": "MIT", "description": "DeepSeek最新模型性价比极高", "created_at": "2024-01-01"},
{"id": "glm4", "name": "GLM-4", "organization": "Zhipu AI", "parameters": 130, "architecture": "Transformer", "context_length": 128000, "input_price": 0.014, "output_price": 0.014, "mmlu": 81.0, "humaneval": 70.0, "is_open_source": false, "license": "Proprietary", "description": "智谱AI大模型中文能力强", "created_at": "2024-01-01"}
{
"id": "gpt4",
"name": "GPT-4",
"organization": "OpenAI",
"parameters": 1760,
"architecture": "Transformer",
"context_length": 8192,
"input_price": 0.03,
"output_price": 0.06,
"mmlu": 86.4,
"humaneval": 67,
"is_open_source": false,
"license": "Proprietary",
"description": "OpenAI最强大的多模态大模型",
"created_at": "2024-01-01",
"updated_at": "2026-04-28 11:57:02",
"raw_text": "\nGPT-4 Turbo version with 128K context length, price is $10 per 1M input tokens",
"subcategory_id": "chat",
"views": 0,
"images": []
},
{
"id": "gpt4turbo",
"name": "GPT-4 Turbo",
"organization": "OpenAI",
"parameters": 1760,
"architecture": "Transformer",
"context_length": 128000,
"input_price": 0.01,
"output_price": 0.03,
"mmlu": 86.4,
"humaneval": 67.0,
"is_open_source": false,
"license": "Proprietary",
"description": "GPT-4增强版128K上下文",
"created_at": "2024-01-01",
"subcategory_id": "chat"
},
{
"id": "gpt35",
"name": "GPT-3.5 Turbo",
"organization": "OpenAI",
"parameters": 175,
"architecture": "Transformer",
"context_length": 16385,
"input_price": 0.0005,
"output_price": 0.0015,
"mmlu": 70.0,
"humaneval": 48.1,
"is_open_source": false,
"license": "Proprietary",
"description": "性价比高的通用模型",
"created_at": "2024-01-01",
"subcategory_id": "chat"
},
{
"id": "claude3opus",
"name": "Claude 3 Opus",
"organization": "Anthropic",
"parameters": 400,
"architecture": "Transformer",
"context_length": 200000,
"input_price": 0.015,
"output_price": 0.075,
"mmlu": 86.8,
"humaneval": 84.9,
"is_open_source": false,
"license": "Proprietary",
"description": "Anthropic最强模型200K上下文",
"created_at": "2024-01-01",
"subcategory_id": "code"
},
{
"id": "claude3sonnet",
"name": "Claude 3 Sonnet",
"organization": "Anthropic",
"parameters": 175,
"architecture": "Transformer",
"context_length": 200000,
"input_price": 0.003,
"output_price": 0.015,
"mmlu": 79.0,
"humaneval": 73.0,
"is_open_source": false,
"license": "Proprietary",
"description": "平衡性能与成本",
"created_at": "2024-01-01",
"subcategory_id": "chat"
},
{
"id": "llama270b",
"name": "Llama 2 70B",
"organization": "Meta",
"parameters": 70,
"architecture": "Transformer",
"context_length": 4096,
"input_price": 0,
"output_price": 0,
"mmlu": 69.8,
"humaneval": 29.9,
"is_open_source": true,
"license": "Llama 2 Community",
"description": "Meta开源大模型70B参数",
"created_at": "2024-01-01",
"subcategory_id": "chat"
},
{
"id": "llama3",
"name": "Llama 3 70B",
"organization": "Meta",
"parameters": 70,
"architecture": "Transformer",
"context_length": 8192,
"input_price": 0,
"output_price": 0,
"mmlu": 82.0,
"humaneval": 81.7,
"is_open_source": true,
"license": "Llama 3 Community",
"description": "Meta最新开源模型性能接近GPT-4",
"created_at": "2024-01-01",
"subcategory_id": "code"
},
{
"id": "mistral7b",
"name": "Mistral 7B",
"organization": "Mistral AI",
"parameters": 7,
"architecture": "Transformer",
"context_length": 32768,
"input_price": 0,
"output_price": 0,
"mmlu": 62.5,
"humaneval": 26.8,
"is_open_source": true,
"license": "Apache 2.0",
"description": "小巧高效的开源模型",
"created_at": "2024-01-01",
"subcategory_id": "chat"
},
{
"id": "mixtral8x7b",
"name": "Mixtral 8x7B",
"organization": "Mistral AI",
"parameters": 47,
"architecture": "MoE",
"context_length": 32768,
"input_price": 0,
"output_price": 0,
"mmlu": 70.6,
"humaneval": 40.2,
"is_open_source": true,
"license": "Apache 2.0",
"description": "MoE架构高效推理",
"created_at": "2024-01-01",
"subcategory_id": "chat"
},
{
"id": "qwen72b",
"name": "Qwen 72B",
"organization": "Alibaba",
"parameters": 72,
"architecture": "Transformer",
"context_length": 32768,
"input_price": 0,
"output_price": 0,
"mmlu": 83.1,
"humaneval": 65.4,
"is_open_source": true,
"license": "Apache 2.0",
"description": "阿里开源大模型,中文能力强",
"created_at": "2024-01-01",
"subcategory_id": "chat"
},
{
"id": "deepseekv3",
"name": "DeepSeek V3",
"organization": "DeepSeek",
"parameters": 685,
"architecture": "MoE",
"context_length": 128000,
"input_price": 0.00014,
"output_price": 0.00028,
"mmlu": 88.5,
"humaneval": 86.2,
"is_open_source": true,
"license": "MIT",
"description": "DeepSeek最新模型性价比极高",
"created_at": "2024-01-01",
"subcategory_id": "code"
},
{
"id": "glm4",
"name": "GLM-4",
"organization": "Zhipu AI",
"parameters": 130,
"architecture": "Transformer",
"context_length": 128000,
"input_price": 0.014,
"output_price": 0.014,
"mmlu": 81.0,
"humaneval": 70.0,
"is_open_source": false,
"license": "Proprietary",
"description": "智谱AI大模型中文能力强",
"created_at": "2024-01-01",
"visible": true,
"subcategory_id": "chat"
}
]

28303
logs/app.log Normal file

File diff suppressed because it is too large Load Diff

14
static/favicon.svg Normal file
View File

@@ -0,0 +1,14 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<!-- 背景 -->
<rect x="2" y="2" width="28" height="28" rx="6" fill="#4f46e5"/>
<!-- 数据网格 -->
<rect x="6" y="6" width="8" height="8" rx="2" fill="white"/>
<rect x="18" y="6" width="8" height="8" rx="2" fill="white"/>
<rect x="6" y="18" width="8" height="8" rx="2" fill="white"/>
<rect x="18" y="18" width="8" height="8" rx="2" fill="white"/>
<!-- 连接线 -->
<line x1="14" y1="10" x2="18" y2="10" stroke="#4f46e5" stroke-width="2"/>
<line x1="10" y1="14" x2="10" y2="18" stroke="#4f46e5" stroke-width="2"/>
<line x1="22" y1="14" x2="22" y2="18" stroke="#4f46e5" stroke-width="2"/>
<line x1="14" y1="22" x2="18" y2="22" stroke="#4f46e5" stroke-width="2"/>
</svg>

After

Width:  |  Height:  |  Size: 757 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 289 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 289 B

File diff suppressed because it is too large Load Diff

View File

@@ -3,7 +3,8 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ category.name }} - ParamHub</title>
<title>ParamHub - 参数百科</title>
<link rel="icon" type="image/svg+xml" href="/static/favicon.svg">
<script src="https://cdn.tailwindcss.com"></script>
<link href="https://cdn.jsdelivr.net/npm/remixicon@3.5.0/fonts/remixicon.css" rel="stylesheet">
</head>
@@ -50,9 +51,16 @@
class="w-full pl-12 pr-4 py-2 border border-gray-200 rounded-lg focus:outline-none focus:border-indigo-400"
onkeyup="filterItems()">
</div>
<select id="sortSelect" onchange="sortItems()" class="px-4 py-2 border border-gray-200 rounded-lg focus:outline-none">
<select id="sortBy" onchange="loadItems()" class="px-4 py-2 border border-gray-200 rounded-lg focus:outline-none">
<option value="default">默认排序(置顶优先)</option>
<option value="publish_date">按发布日期</option>
<option value="views">按热度</option>
<option value="name">按名称</option>
<option value="created_at">按时间</option>
<option value="created_at">创建时间</option>
</select>
<select id="sortOrder" onchange="loadItems()" class="px-4 py-2 border border-gray-200 rounded-lg focus:outline-none">
<option value="desc">降序</option>
<option value="asc">升序</option>
</select>
</div>
</div>
@@ -115,7 +123,9 @@
// 加载数据
async function loadItems() {
const res = await fetch(`/api/items/${categoryId}`);
const sortBy = document.getElementById('sortBy').value;
const sortOrder = document.getElementById('sortOrder').value;
const res = await fetch(`/api/items/${categoryId}?sort=${sortBy}&order=${sortOrder}`);
allItems = await res.json();
document.getElementById('itemCount').textContent = allItems.length;
@@ -136,22 +146,28 @@
document.getElementById('itemsList').innerHTML = items.map(item => {
const fields = Object.entries(item)
.filter(([key, val]) => !['id', 'category_id', 'created_at', 'updated_at'].includes(key) && val)
.filter(([key, val]) => !['id', 'category_id', 'created_at', 'updated_at', 'visible', 'is_pinned', 'views', 'publish_date'].includes(key) && val)
.slice(0, 5)
.map(([key, val]) => `<span class="text-gray-500 text-sm">${key}: ${val}</span>`)
.join('<br>');
return `
<div class="border border-gray-200 rounded-lg p-4 hover:shadow-md transition group">
<div class="border border-gray-200 rounded-lg p-4 hover:shadow-md transition group ${item.is_pinned ? 'bg-yellow-50 border-yellow-300' : ''}">
<div class="flex items-start justify-between">
<div>
<h3 class="font-medium text-gray-800 group-hover:text-indigo-600">${item.name || item.title || '未命名'}</h3>
<h3 class="font-medium text-gray-800 group-hover:text-indigo-600 flex items-center gap-2">
${item.is_pinned ? '<i class="ri-pushpin-fill text-yellow-500" title="置顶"></i>' : ''}
${item.name || item.title || '未命名'}
</h3>
<div class="mt-2 space-y-1">
${fields}
</div>
</div>
<div class="text-xs text-gray-400">
${item.created_at ? item.created_at.split(' ')[0] : ''}
<div class="text-right">
<div class="text-xs text-gray-400">
${item.publish_date || (item.created_at ? item.created_at.split(' ')[0] : '')}
</div>
${item.views ? `<div class="text-xs text-gray-400 mt-1"><i class="ri-eye-line"></i> ${item.views}</div>` : ''}
</div>
</div>
</div>
@@ -175,19 +191,6 @@
renderItems(filtered);
}
// 排序
function sortItems() {
const sortBy = document.getElementById('sortSelect').value;
const sorted = [...allItems].sort((a, b) => {
if (sortBy === 'name') {
return (a.name || a.title || '').localeCompare(b.name || b.title || '');
} else {
return (b.created_at || '').localeCompare(a.created_at || '');
}
});
renderItems(sorted);
}
// 初始化
loadNav();
loadItems();

View File

@@ -3,7 +3,8 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>对比工具 - ParamHub</title>
<title>ParamHub - 参数百科</title>
<link rel="icon" type="image/svg+xml" href="/static/favicon.svg">
<script src="https://cdn.tailwindcss.com"></script>
<link href="https://cdn.jsdelivr.net/npm/remixicon@3.5.0/fonts/remixicon.css" rel="stylesheet">
</head>
@@ -40,7 +41,7 @@
<i class="ri-cpu-line mr-2"></i>GPU对比
</button>
<button onclick="setCompareType('cpu')" id="btnCpu" class="px-4 py-2 bg-gray-200 text-gray-600 rounded-lg hover:bg-gray-300">
<i class="ri-memory-line mr-2"></i>CPU对比
<i class="ri-cpu-line mr-2"></i>CPU对比
</button>
</div>
</div>
@@ -230,6 +231,7 @@ let compareType = 'model';
}
// 初始化
loadNav();
setCompareType('model');
</script>
</body>

View File

@@ -3,7 +3,8 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CPU数据库 - ParamHub</title>
<title>ParamHub - 参数百科</title>
<link rel="icon" type="image/svg+xml" href="/static/favicon.svg">
<script src="https://cdn.tailwindcss.com"></script>
<link href="https://cdn.jsdelivr.net/npm/remixicon@3.5.0/fonts/remixicon.css" rel="stylesheet">
</head>
@@ -24,7 +25,7 @@
<main class="max-w-7xl mx-auto px-4 py-8">
<div class="mb-6">
<h1 class="text-2xl font-bold text-gray-800 flex items-center gap-2">
<i class="ri-memory-line text-purple-600"></i>
<i class="ri-cpu-line text-purple-600"></i>
CPU数据库
</h1>
<p class="text-gray-500 mt-1">处理器规格参数一览</p>
@@ -208,6 +209,8 @@ async function loadCpus() {
if (e.target === this) closeModal();
});
// 初始化
loadNav();
loadCpus();
</script>
</body>

View File

@@ -3,7 +3,8 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>GPU数据库 - ParamHub</title>
<title>ParamHub - 参数百科</title>
<link rel="icon" type="image/svg+xml" href="/static/favicon.svg">
<script src="https://cdn.tailwindcss.com"></script>
<link href="https://cdn.jsdelivr.net/npm/remixicon@3.5.0/fonts/remixicon.css" rel="stylesheet">
</head>
@@ -215,6 +216,8 @@ async function loadGpus() {
if (e.target === this) closeModal();
});
// 初始化
loadNav();
loadGpus();
</script>
</body>

View File

@@ -3,7 +3,8 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ParamHub - 参数百科</title>
<title id="pageTitle">ParamHub - 参数百科</title>
<link rel="icon" type="image/svg+xml" href="/static/favicon.svg">
<script src="https://cdn.tailwindcss.com"></script>
<link href="https://cdn.jsdelivr.net/npm/remixicon@3.5.0/fonts/remixicon.css" rel="stylesheet">
</head>
@@ -13,8 +14,8 @@
<div class="max-w-7xl mx-auto px-4 py-3 flex justify-between items-center">
<div class="flex items-center gap-2">
<i class="ri-dashboard-3-line text-2xl text-indigo-600"></i>
<span class="text-xl font-bold text-gray-800">ParamHub</span>
<span class="text-sm text-gray-500">参数百科</span>
<span class="text-xl font-bold text-gray-800" id="navSiteName">ParamHub</span>
<span class="text-sm text-gray-500" id="navSiteSubtitle">参数百科</span>
</div>
<div class="flex gap-4 text-sm" id="navLinks">
<!-- 动态加载 -->
@@ -58,7 +59,7 @@
<!-- 热门模型 -->
<div class="bg-white rounded-xl shadow-sm p-6">
<h2 class="text-lg font-semibold text-gray-800 mb-4 flex items-center gap-2">
<i class="ri-flashlight-line text-indigo-600"></i>
<i class="ri-cpu-line text-indigo-600"></i>
热门模型
</h2>
<div id="latestModels" class="grid grid-cols-2 gap-4">
@@ -69,7 +70,7 @@
<!-- 页脚 -->
<footer class="bg-white border-t mt-8 py-6 text-center text-gray-500 text-sm">
ParamHub - 参数百科 | AI模型与硬件参数速查平台
<span id="footerText">ParamHub - 参数百科 | AI模型与硬件参数速查平台</span>
</footer>
<script>
@@ -120,13 +121,32 @@
// 加载分类和数据统计
async function loadData() {
// 并行加载分类统计
const [catRes, statsRes] = await Promise.all([
// 并行加载分类统计、配置
const [catRes, statsRes, configRes] = await Promise.all([
fetch('/api/categories'),
fetch('/api/stats')
fetch('/api/stats'),
fetch('/api/config')
]);
categories = await catRes.json();
const stats = await statsRes.json();
const config = await configRes.json();
// 更新网站名称等
if (config.site_name) {
document.getElementById('navSiteName').textContent = config.site_name;
}
if (config.site_subtitle) {
document.getElementById('navSiteSubtitle').textContent = config.site_subtitle;
}
if (config.site_name && config.site_subtitle) {
document.getElementById('pageTitle').textContent = `${config.site_name} - ${config.site_subtitle}`;
}
if (config.footer_text) {
document.getElementById('footerText').textContent = config.footer_text;
}
if (config.icp_number) {
document.getElementById('footerText').innerHTML += ` | <a href="https://beian.miit.gov.cn/" target="_blank" class="hover:text-gray-700">${config.icp_number}</a>`;
}
// 渲染导航栏
renderNavBar();
@@ -146,7 +166,7 @@
const statItems = [
{key: 'models_count', label: 'AI模型', icon: 'ri-robot-line', color: 'blue'},
{key: 'gpus_count', label: 'GPU显卡', icon: 'ri-cpu-line', color: 'green'},
{key: 'cpus_count', label: 'CPU处理器', icon: 'ri-memory-line', color: 'purple'},
{key: 'cpus_count', label: 'CPU处理器', icon: 'ri-cpu-line', color: 'purple'},
{key: 'knowledge_count', label: '知识条目', icon: 'ri-book-open-line', color: 'teal'}
];

View File

@@ -3,7 +3,8 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>知识库 - ParamHub</title>
<title>ParamHub - 参数百科</title>
<link rel="icon" type="image/svg+xml" href="/static/favicon.svg">
<script src="https://cdn.tailwindcss.com"></script>
<link href="https://cdn.jsdelivr.net/npm/remixicon@3.5.0/fonts/remixicon.css" rel="stylesheet">
</head>
@@ -75,7 +76,7 @@
<!-- 显存计算 -->
<div class="bg-white rounded-xl shadow-sm p-6">
<h2 class="text-lg font-semibold text-gray-800 mb-4 flex items-center gap-2">
<i class="ri-memory-line text-orange-600"></i>
<i class="ri-cpu-line text-orange-600"></i>
如何计算显存需求?
</h2>
<p class="text-gray-600 leading-relaxed">
@@ -177,5 +178,43 @@
</table>
</div>
</main>
<script>
let categories = [];
// 加载导航栏
async function loadNav() {
const res = await fetch('/api/categories');
categories = await res.json();
const builtinPages = [
{name: '首页', href: '/'},
{name: '工具', href: '/tools'},
{name: '对比', href: '/compare'},
{name: '知识库', href: '/knowledge'}
];
const categoryPages = {
'ai-models': '/models',
'gpus': '/gpus',
'cpus': '/cpus'
};
let navHtml = '';
builtinPages.forEach(p => {
const isActive = window.location.pathname === p.href;
navHtml += `<a href="${p.href}" class="${isActive ? 'text-indigo-600 font-medium' : 'text-gray-600 hover:text-indigo-600'}">${p.name}</a>`;
});
categories.forEach(cat => {
const href = categoryPages[cat.id] || `/category/${cat.id}`;
navHtml += `<a href="${href}" class="text-gray-600 hover:text-indigo-600">${cat.name}</a>`;
});
document.getElementById('topNav').innerHTML = navHtml;
}
loadNav();
</script>
</body>
</html>

View File

@@ -3,7 +3,8 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>模型数据库 - ParamHub</title>
<title>ParamHub - 参数百科</title>
<link rel="icon" type="image/svg+xml" href="/static/favicon.svg">
<script src="https://cdn.tailwindcss.com"></script>
<link href="https://cdn.jsdelivr.net/npm/remixicon@3.5.0/fonts/remixicon.css" rel="stylesheet">
</head>
@@ -31,6 +32,19 @@
<p class="text-gray-500 mt-1">AI大模型参数规格一览</p>
</div>
<!-- 子类别选择器 -->
<div class="bg-white rounded-xl shadow-sm p-4 mb-4">
<div class="flex items-center gap-2 mb-2">
<span class="text-sm text-gray-600"><i class="ri-folder-line mr-1"></i>子类别:</span>
</div>
<div class="flex gap-2" id="subcategoryTabs">
<button onclick="selectSubcategory('')" class="px-4 py-2 bg-indigo-600 text-white rounded-lg text-sm" id="subcat-all">
<i class="ri-apps-line mr-1"></i>全部
</button>
<!-- 动态加载子类别 -->
</div>
</div>
<!-- 搜索和筛选 -->
<div class="bg-white rounded-xl shadow-sm p-4 mb-6">
<div class="flex gap-4 items-center">
@@ -41,14 +55,18 @@
oninput="loadModels()">
</div>
<select id="sortBy" class="px-4 py-2 border border-gray-200 rounded-lg" onchange="loadModels()">
<option value="default">默认排序(置顶优先)</option>
<option value="publish_date">按发布日期</option>
<option value="views">按热度</option>
<option value="name">按名称</option>
<option value="parameters">按参数量</option>
<option value="mmlu">按MMLU分数</option>
<option value="context_length">按上下文长度</option>
<option value="created_at">按创建时间</option>
</select>
<select id="sortOrder" class="px-4 py-2 border border-gray-200 rounded-lg" onchange="loadModels()">
<option value="asc">升序</option>
<option value="desc">降序</option>
<option value="asc">升序</option>
</select>
<select id="filterType" class="px-4 py-2 border border-gray-200 rounded-lg" onchange="loadModels()">
<option value="all">全部</option>
@@ -96,12 +114,38 @@
<script>
let allModels = [];
let categories = [];
let currentCategory = null;
let currentSubcategory = '';
// 子类别默认特性配置
const DEFAULT_KEY_FEATURES = {
'chat': ['context_length', 'mmlu', 'input_price', 'output_price'],
'code': ['humaneval', 'context_length', 'input_price'],
'reasoning': ['mmlu', 'context_length', 'parameters'],
'vision': ['context_length', 'mmlu', 'input_price']
};
const FEATURE_LABELS = {
'context_length': '上下文',
'mmlu': 'MMLU',
'humaneval': 'HumanEval',
'input_price': '输入价',
'output_price': '输出价',
'parameters': '参数量',
'reasoning_capability': '推理',
'vision_capability': '视觉',
'multimodal': '多模态'
};
// 加载导航栏
async function loadNav() {
const res = await fetch('/api/categories');
categories = await res.json();
// 获取当前类别的子类别
currentCategory = categories.find(c => c.id === 'ai-models');
renderSubcategoryTabs();
const builtinPages = [
{name: '首页', href: '/'},
{name: '工具', href: '/tools'},
@@ -129,6 +173,49 @@
document.getElementById('topNav').innerHTML = navHtml;
}
// 渲染子类别选择器
function renderSubcategoryTabs() {
const container = document.getElementById('subcategoryTabs');
if (!currentCategory || !currentCategory.subcategories) {
container.innerHTML = '';
return;
}
let html = `<button onclick="selectSubcategory('')" class="px-4 py-2 ${currentSubcategory === '' ? 'bg-indigo-600 text-white' : 'bg-gray-100 text-gray-600 hover:bg-gray-200'} rounded-lg text-sm" id="subcat-all">
<i class="ri-apps-line mr-1"></i>全部
</button>`;
currentCategory.subcategories.forEach(sub => {
const isActive = currentSubcategory === sub.id;
html += `<button onclick="selectSubcategory('${sub.id}')" class="px-4 py-2 ${isActive ? 'bg-indigo-600 text-white' : 'bg-gray-100 text-gray-600 hover:bg-gray-200'} rounded-lg text-sm" id="subcat-${sub.id}">
<i class="${sub.icon || 'ri-folder-line'} mr-1"></i>${sub.name}
</button>`;
});
container.innerHTML = html;
}
// 选择子类别
function selectSubcategory(subId) {
currentSubcategory = subId;
renderSubcategoryTabs();
loadModels();
}
// 获取当前子类别的关键特性
function getKeyFeatures() {
if (!currentSubcategory || !currentCategory || !currentCategory.subcategories) {
return ['parameters', 'context_length', 'mmlu', 'input_price'];
}
const subcat = currentCategory.subcategories.find(s => s.id === currentSubcategory);
if (subcat && subcat.key_features) {
return subcat.key_features;
}
return ['parameters', 'context_length', 'mmlu', 'input_price'];
}
async function loadModels() {
const keyword = document.getElementById('searchInput').value.trim();
@@ -150,6 +237,21 @@
models = models.filter(m => !m.is_open_source);
}
// 子类别过滤(通过模型名称/描述中的关键词判断)
if (currentSubcategory && currentCategory && currentCategory.subcategories) {
const subcat = currentCategory.subcategories.find(s => s.id === currentSubcategory);
if (subcat) {
// 简化过滤:根据子类别关键词匹配
// 实际应该有 subcategory_id 字段,这里暂时用名称匹配
// 用户可以在后台编辑时指定子类别
models = models.filter(m => {
const subcatField = m.subcategory || m.subcategory_id;
if (subcatField) return subcatField === currentSubcategory;
return true; // 暂时显示全部,等后台支持子类别字段后再过滤
});
}
}
renderModels(models);
}
@@ -161,38 +263,93 @@
return;
}
const html = models.map(m => `
<tr class="border-b hover:bg-gray-50 transition">
// 动态获取关键特性
const keyFeatures = getKeyFeatures();
// 动态表头
let headerHtml = `
<tr>
<th class="px-4 py-3 text-left text-sm font-medium text-gray-600">模型名称</th>
<th class="px-4 py-3 text-left text-sm font-medium text-gray-600">厂商</th>
`;
keyFeatures.forEach(f => {
headerHtml += `<th class="px-4 py-3 text-left text-sm font-medium text-gray-600">${FEATURE_LABELS[f] || f}</th>`;
});
headerHtml += `
<th class="px-4 py-3 text-left text-sm font-medium text-gray-600">类型</th>
<th class="px-4 py-3 text-center text-sm font-medium text-gray-600">操作</th>
</tr>
`;
document.querySelector('#modelsTable thead').innerHTML = headerHtml;
// 动态内容
const html = models.map(m => {
let rowHtml = `
<tr class="border-b hover:bg-gray-50 transition ${m.is_pinned ? 'bg-yellow-50' : ''}">
<td class="px-4 py-3">
<div class="font-medium text-gray-800">${m.name}</div>
<div class="text-xs text-gray-500">${m.architecture || ''}</div>
<div class="flex items-center gap-2">
${m.is_pinned ? '<i class="ri-pushpin-fill text-yellow-500" title="置顶"></i>' : ''}
<div>
<div class="font-medium text-gray-800">${m.name}</div>
<div class="text-xs text-gray-500">${m.architecture || ''}</div>
</div>
</div>
</td>
<td class="px-4 py-3 text-gray-600">${m.organization}</td>
<td class="px-4 py-3">
<span class="px-2 py-1 bg-blue-100 text-blue-700 rounded text-sm">${m.parameters}B</span>
</td>
<td class="px-4 py-3 text-gray-600">${formatContext(m.context_length)}</td>
<td class="px-4 py-3">
<span class="px-2 py-1 bg-green-100 text-green-700 rounded text-sm">${m.mmlu || '-'}%</span>
</td>
`;
// 关键特性列
keyFeatures.forEach(f => {
const value = formatFeatureValue(f, m);
rowHtml += `<td class="px-4 py-3">${value}</td>`;
});
rowHtml += `
<td class="px-4 py-3">
${m.is_open_source
? '<span class="px-2 py-1 bg-emerald-100 text-emerald-700 rounded text-sm">开源</span>'
: '<span class="px-2 py-1 bg-gray-100 text-gray-700 rounded text-sm">商业</span>'}
</td>
<td class="px-4 py-3 text-sm text-gray-600">
${m.input_price ? `$${m.input_price}/$${m.output_price}` : '免费'}
</td>
<td class="px-4 py-3 text-center">
<button onclick="showDetail('${m.id}')" class="text-indigo-600 hover:text-indigo-800 text-sm">
<i class="ri-eye-line mr-1"></i>详情
</button>
</td>
</tr>
`).join('');
`;
return rowHtml;
}).join('');
document.getElementById('modelsTable').innerHTML = html;
}
// 格式化特性值
function formatFeatureValue(feature, model) {
const value = model[feature];
if (value === null || value === undefined) return '<span class="text-gray-400">-</span>';
switch (feature) {
case 'parameters':
return `<span class="px-2 py-1 bg-blue-100 text-blue-700 rounded text-sm">${value}B</span>`;
case 'context_length':
return `<span class="text-gray-600">${formatContext(value)}</span>`;
case 'mmlu':
return `<span class="px-2 py-1 bg-green-100 text-green-700 rounded text-sm">${value}%</span>`;
case 'humaneval':
return `<span class="px-2 py-1 bg-purple-100 text-purple-700 rounded text-sm">${value}%</span>`;
case 'input_price':
return `<span class="text-sm text-gray-600">$${value || 0}</span>`;
case 'output_price':
return `<span class="text-sm text-gray-600">$${value || 0}</span>`;
default:
return `<span class="text-gray-600">${value}</span>`;
}
}
function formatContext(len) {
if (!len) return '-';

View File

@@ -3,7 +3,8 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>实用工具 - ParamHub</title>
<title>ParamHub - 参数百科</title>
<link rel="icon" type="image/svg+xml" href="/static/favicon.svg">
<script src="https://cdn.tailwindcss.com"></script>
<link href="https://cdn.jsdelivr.net/npm/remixicon@3.5.0/fonts/remixicon.css" rel="stylesheet">
</head>
@@ -33,7 +34,7 @@
<!-- 显存计算器 -->
<div class="bg-white rounded-xl shadow-sm p-6 mb-6">
<h2 class="text-lg font-semibold text-gray-800 mb-4 flex items-center gap-2">
<i class="ri-memory-line text-green-600"></i>
<i class="ri-cpu-line text-green-600"></i>
显存计算器
</h2>
<p class="text-gray-500 mb-4">计算大模型所需的显存大小并推荐合适的GPU</p>
@@ -197,6 +198,9 @@ async function calculateVram() {
document.getElementById('vramResult').classList.remove('hidden');
}
// 初始化
loadNav();
</script>
</body>
</html>