新闻详情

新闻详情

首页 / 资讯中心 / 详情

DeepFM+Hadoop+Spark构建工业级视频推荐系统

发布时间:2026/9/26 14:32:31来源:尧图网络
DeepFM+Hadoop+Spark构建工业级视频推荐系统
简介本资源是一套完整的微信视频号大数据分析与推荐系统毕业设计项目面向计算机、大数据、人工智能方向的本科生及初入推荐系统领域的学习者解决海量用户行为数据下的精准内容分发问题。项目基于Hadoop构建分布式存储底座采用TensorFlow复现PNN与DeepFM模型集成Spark Streaming实时消费Kafka中的用户行为流如点赞、评论、完播时长并实现召回→过滤→精排三级推荐架构支持CTR点击率预估与动态模型更新。压缩包共1225个文件含16个核心Python脚本模型训练/流处理/评估、15张可视化图表特征分布、AUC曲线等、5个CSV样本数据集、多个TensorFlow模型文件.pb/.index/.data及1份详细设计文档.pdf整体大小76.41MB。已有1163人学习下载提供从环境部署、代码调试到效果验证的全流程实践材料特别适合用于课程设计、毕设参考或工业级推荐系统入门实战。1. 为什么微信视频号的推荐不能只靠协同过滤DeepFM Hadoop Spark 是怎么把“刷到停不下来”这件事拆解成可落地的工程链路的你有没有试过深夜刷视频号明明只打算看一条结果一抬眼已经过去两小时平台不是靠玄学——它背后是一条从原始日志采集、清洗、特征构建到模型训练与实时打分的完整数据流水线。而这个毕业设计标题里提到的DeepFM、Hadoop、Spark不是三个并列名词而是分工明确的三层能力Hadoop 提供稳定可靠的海量日志存储与离线批处理底座Spark 承担高吞吐的特征工程与模型训练加速DeepFM 则是真正理解“用户-视频-上下文”三元关系的推荐模型——它能同时建模低阶交叉比如“男性游戏类视频”有强偏好和高阶非线性组合比如“23岁男性凌晨1点刚看完电竞直播连续滑动3次→极大概率点击新发布的KPL集锦”。这不是玩具项目而是贴近工业级推荐系统真实分层架构的一次端到端复现用 Hadoop 存原始日志每秒数万条埋点用 Spark SQL 和 MLlib 做宽表拼接与特征向量化最后用 PySpark 调用 DeepFM 模型TensorFlow 或 PyTorch 实现完成离线训练与 A/B 测试部署。适合计算机/软件工程专业、已掌握 Java/Python 基础、熟悉 Linux 命令、想把“大数据推荐算法”从课设升级为求职硬通货的同学——它不追求论文级创新但每一步都踩在企业真实技术选型的刀刃上Hadoop 不用最新版2.7.7 稳定兼容 Spark 2.4Spark 不硬上 Structured Streaming先跑通 Batch Pipeline 再迭代DeepFM 不堆参数Embedding 维度统一设为 16Field-wise Linear DNN 双路结构清晰可 debug。下面我们就从零开始把这条链路一节一节焊死。2. 搭建 Hadoop 伪分布式环境不是为了装个玩具而是让 Spark 能真正读写 HDFS 上的原始日志微信视频号的真实日志格式高度敏感且不对外公开但我们可以用模拟数据逼近其核心结构user_id, video_id, timestamp, action_type, duration_ms, device_type, network_type, province。这类日志每天可达 TB 级必须存于 HDFS 而非本地磁盘——否则 Spark 启动任务时会因文件不可分割、副本缺失、NameNode 单点瓶颈直接崩掉。所以第一步不是写代码而是让 Hadoop 在单机上“像集群一样工作”。2.1 配置 Hadoop 2.7.7 伪分布式关键绕过 ZooKeeper聚焦 HDFS YARN提示毕业设计不需 ZooKeeper 集群协调伪分布式下 HDFS HA 和 YARN ResourceManager 高可用也非必需。目标是让hdfs dfs -ls /能返回目录yarn application -list能看到 Spark 提交的任务——这就够了。# 下载并解压官网 archive.apache.org 获取 2.7.7 wget https://archive.apache.org/dist/hadoop/core/hadoop-2.7.7/hadoop-2.7.7.tar.gz tar -zxvf hadoop-2.7.7.tar.gz -C /opt/ # 设置环境变量~/.bashrc export HADOOP_HOME/opt/hadoop-2.7.7 export PATH$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin export HADOOP_CONF_DIR$HADOOP_HOME/etc/hadoop export HADOOP_MAPRED_HOME$HADOOP_HOME export HADOOP_COMMON_HOME$HADOOP_HOME export HADOOP_HDFS_HOME$HADOOP_HOME export YARN_HOME$HADOOP_HOME export HADOOP_CLASSPATH$(hadoop classpath)核心配置文件修改全部位于$HADOOP_HOME/etc/hadoop/core-site.xml定义默认文件系统为 HDFSconfiguration property namefs.defaultFS/name valuehdfs://localhost:9000/value /property /configurationhdfs-site.xml设置 NameNode 和 DataNode 存储路径务必用绝对路径避免权限问题configuration property namedfs.replication/name value1/value !-- 伪分布式设为1 -- /property property namedfs.namenode.name.dir/name value/opt/hadoop-2.7.7/data/namenode/value /property property namedfs.datanode.data.dir/name value/opt/hadoop-2.7.7/data/datanode/value /property /configurationmapred-site.xml指定 MapReduce 运行框架为 YARNconfiguration property namemapreduce.framework.name/name valueyarn/value /property /configurationyarn-site.xml启用 NodeManager 和 ResourceManagerconfiguration property nameyarn.nodemanager.aux-services/name valuemapreduce_shuffle/value /property property nameyarn.resourcemanager.hostname/name valuelocalhost/value /property /configuration2.2 格式化 NameNode 并启动服务注意顺序# 第一次运行前必须格式化清空已有元数据 hdfs namenode -format # 启动 HDFSNameNode DataNode start-dfs.sh # 启动 YARNResourceManager NodeManager start-yarn.sh # 验证访问 http://localhost:50070 HDFS Web UI和 http://localhost:8088 YARN UI # 命令行验证 hdfs dfs -mkdir -p /raw/video_logs hdfs dfs -put ./sample_logs_20240501.csv /raw/video_logs/ hdfs dfs -ls /raw/video_logs # 应看到文件逻辑说明start-dfs.sh启动的是NameNode管理元数据和DataNode存储实际块二者通过心跳维持连接start-yarn.sh启动ResourceManager全局资源调度和NodeManager单节点任务容器Spark 提交任务时会向 RM 申请 Containerhdfs dfs -put是将本地 CSV 日志上传至 HDFS/raw/video_logs目录这是后续 Spark 读取的起点所有路径必须用绝对路径如/opt/hadoop-2.7.7/data/namenode相对路径在服务后台进程里会解析失败如果jps查看不到NameNode或DataNode进程先检查logs/hadoop-xxx-namenode-xxx.log90% 是JAVA_HOME未正确设置或端口被占用9000、50070、8088。3. 用 Spark 2.4.8 构建特征宽表从原始日志到 DeepFM 可喂入的 LibSVM 格式Hadoop 存好了日志但 DeepFM 不能直接读 CSV——它需要结构化的特征向量。Spark 的价值就在这里用 DataFrame API 做高性能特征工程把user_id, video_id, timestamp, ...转成label, user_id_emb, video_id_emb, hour_bin, is_weekend, device_onehot, ...这样的宽表并导出为 LibSVM 格式DeepFM 最友好的输入。注意这里不用 Spark Streaming实时性非毕业设计重点专注 Batch Pipeline。3.1 Spark 环境对接 Hadoop关键让 Spark 知道 HDFS 地址和配置下载 Spark 2.4.8与 Hadoop 2.7.x 兼容性最佳wget https://archive.apache.org/dist/spark/spark-2.4.8/spark-2.4.8-bin-hadoop2.7.tgz tar -zxvf spark-2.4.8-bin-hadoop2.7.tgz -C /opt/配置SPARK_HOME/conf/spark-env.sh追加export JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64 # 根据你的 JDK 路径调整 export HADOOP_CONF_DIR/opt/hadoop-2.7.7/etc/hadoop export SPARK_DIST_CLASSPATH$($HADOOP_HOME/bin/hadoop classpath)验证 Spark 能读 HDFS# pyspark from pyspark.sql import SparkSession spark SparkSession.builder \ .appName(VideoLogFeature) \ .master(yarn) \ .config(spark.hadoop.fs.defaultFS, hdfs://localhost:9000) \ .getOrCreate() df spark.read.csv(hdfs://localhost:9000/raw/video_logs/sample_logs_20240501.csv, headerTrue, inferSchemaTrue) df.show(5)3.2 特征工程 PipelinePySpark 实现可直接抄作业from pyspark.sql import functions as F from pyspark.sql.types import * from pyspark.ml.feature import StringIndexer, OneHotEncoder, VectorAssembler, StandardScaler from pyspark.ml import Pipeline # 1. 读取原始日志假设字段user_id, video_id, timestamp, action_type, duration_ms, device_type, network_type, province raw_df spark.read.csv(hdfs://localhost:9000/raw/video_logs/, headerTrue, inferSchemaTrue) # 2. 构造 label正样本 action_type click 且 duration_ms 5000ms观看超5秒视为有效互动 label_df raw_df.withColumn( label, (F.col(action_type) click) (F.col(duration_ms) 5000) ).withColumn(label, F.col(label).cast(int)) # 3. 时间特征hour_bin0-23、is_weekend1/0、day_of_week time_df label_df.withColumn(ts, F.to_timestamp(F.col(timestamp), yyyy-MM-dd HH:mm:ss)) \ .withColumn(hour_bin, F.hour(ts)) \ .withColumn(is_weekend, F.when(F.dayofweek(ts).isin_collection([1,7]), 1).otherwise(0)) \ .withColumn(day_of_week, F.dayofweek(ts)) # 4. 类别特征编码user_id, video_id, device_type, province → StringIndexer → OneHotEncoder categorical_cols [user_id, video_id, device_type, province] indexers [StringIndexer(inputColc, outputColf{c}_index, handleInvalidkeep) for c in categorical_cols] encoder OneHotEncoder(inputCols[f{c}_index for c in categorical_cols], outputCols[f{c}_vec for c in categorical_cols]) # 5. 数值特征标准化duration_ms, hour_bin → StandardScalerDeepFM 对数值特征敏感 numeric_cols [duration_ms, hour_bin] assembler VectorAssembler(inputColsnumeric_cols, outputColnumeric_features) scaler StandardScaler(inputColnumeric_features, outputColscaled_numeric) # 6. 组装所有特征向量 feature_cols [f{c}_vec for c in categorical_cols] [scaled_numeric] assembler_final VectorAssembler(inputColsfeature_cols, outputColfeatures) # 7. 构建 Pipeline 并拟合 pipeline Pipeline(stagesindexers [encoder, assembler, scaler, assembler_final]) model pipeline.fit(time_df) feature_df model.transform(time_df).select(label, features) # 8. 导出为 LibSVM 格式DeepFM 训练脚本最常用输入 feature_df.select(label, features).write.mode(overwrite).format(libsvm).save(hdfs://localhost:9000/features/deepfm_train)参数说明StringIndexer将字符串 ID 映射为整数索引如 user_id → 12345 → 892为后续 Embedding 层提供输入OneHotEncoder对低基数类别如 device_type 只有 ios/android/pc做独热编码避免 Embedding 维度过大StandardScaler对duration_ms毫秒级范围 0–300000和hour_bin0–23做 Z-score 标准化防止数值特征淹没类别特征VectorAssembler将所有编码后向量拼接为单个features列符合 LibSVM 格式要求label idx1:value1 idx2:value2 ...输出路径hdfs://localhost:9000/features/deepfm_train是 DeepFM 模型训练脚本的直接输入源。4. DeepFM 模型训练与评估用 TensorFlow 2.5 实现可复现、可 debug 的双路结构Spark 输出了 LibSVM 格式数据接下来是模型层。DeepFM 不是黑匣子——它的核心是FMFactorization Machine部分捕捉二阶特征交叉DNN 部分学习高阶非线性组合二者输出相加作为最终预测分。我们不用 Keras 高阶封装而是用 TensorFlow 2.5 原生 API 实现确保每一层输入输出形状清晰可见方便调试 embedding 维度、batch size、learning rate。4.1 数据加载与预处理从 HDFS 读 LibSVM转为 tf.data.Datasetimport tensorflow as tf import numpy as np from sklearn.metrics import roc_auc_score, log_loss def load_libsvm_data(file_path, batch_size1024): 从 HDFS 下载 LibSVM 文件并解析 # 先用 hdfs cli 下载到本地生产环境应改用 webhdfs 或 pyarrow import os os.system(fhdfs dfs -get {file_path} /tmp/deepfm_data/) def parse_libsvm_line(line): parts line.strip().split() label float(parts[0]) indices [] values [] for pair in parts[1:]: idx, val pair.split(:) indices.append(int(idx)) values.append(float(val)) return np.array(indices), np.array(values), label # 读取所有行 with open(/tmp/deepfm_data/part-00000, r) as f: lines f.readlines() # 构建稀疏特征矩阵DeepFM 输入要求field-wise sparse input field_dims [10000, 5000, 10, 30] # user_id, video_id, device_type, province 的唯一值数量需根据实际统计 feature_indices [] feature_values [] labels [] for line in lines[:10000]: # 先取 1w 条做 demo idxs, vals, lbl parse_libsvm_line(line) feature_indices.append(idxs) feature_values.append(vals) labels.append(lbl) # 转为 tf.data.Dataset dataset tf.data.Dataset.from_tensor_slices(( (np.array(feature_indices), np.array(feature_values)), np.array(labels) )).batch(batch_size).prefetch(tf.data.AUTOTUNE) return dataset, field_dims train_ds, field_dims load_libsvm_data(hdfs://localhost:9000/features/deepfm_train)4.2 DeepFM 模型定义关键FM Layer DNN Layer Output Layerclass DeepFM(tf.keras.Model): def __init__(self, field_dims, embed_dim16, hidden_units[128, 64], dropout_rate0.2): super().__init__() self.field_dims field_dims self.embed_dim embed_dim self.num_fields len(field_dims) # 1. Embedding 层每个 field 一个 embedding table self.embedding_layers [ tf.keras.layers.Embedding(input_dimdim, output_dimembed_dim) for dim in field_dims ] # 2. FM Layer线性部分 二阶交叉部分 self.linear_layer tf.keras.layers.Dense(1, activationNone) # FM 二阶交叉sum_{ij}(v_i·v_j * x_i * x_j)用高效实现 self.fm_first_order tf.keras.layers.Dense(1, activationNone) # Σ w_i x_i self.fm_second_order tf.keras.layers.Lambda( lambda x: tf.reduce_sum(tf.pow(tf.reduce_sum(x, axis1), 2) - tf.reduce_sum(tf.pow(x, 2), axis1), axis1, keepdimsTrue) ) # Σ(v_i·x_i)^2 - Σ(v_i^2·x_i^2) # 3. DNN Layer self.dnn_layers [] for units in hidden_units: self.dnn_layers.append(tf.keras.layers.Dense(units, activationrelu)) self.dnn_layers.append(tf.keras.layers.Dropout(dropout_rate)) self.dnn_output tf.keras.layers.Dense(1, activationNone) # 4. Output Layer self.output_layer tf.keras.layers.Activation(sigmoid) def call(self, inputs, trainingNone): indices, values inputs # (batch, num_fields), (batch, num_fields) # Embedding lookup embeddings [] for i in range(self.num_fields): emb self.embedding_layers[i](indices[:, i]) # (batch, embed_dim) emb emb * tf.expand_dims(values[:, i], axis1) # apply value weight embeddings.append(emb) embeddings tf.stack(embeddings, axis1) # (batch, num_fields, embed_dim) # FM Part # Linear part linear_out self.linear_layer(tf.cast(indices, tf.float32)) # 简化用 index 作线性输入 # Second-order FM part sum_square tf.square(tf.reduce_sum(embeddings, axis1)) # (batch, embed_dim) square_sum tf.reduce_sum(tf.square(embeddings), axis1) # (batch, embed_dim) fm_second 0.5 * tf.reduce_sum(sum_square - square_sum, axis1, keepdimsTrue) # (batch, 1) # DNN Part dnn_input tf.reshape(embeddings, [-1, self.num_fields * self.embed_dim]) dnn_out dnn_input for layer in self.dnn_layers: dnn_out layer(dnn_out, trainingtraining) dnn_out self.dnn_output(dnn_out) # Sum up logits linear_out fm_second dnn_out return self.output_layer(logits) # 初始化模型 model DeepFM(field_dimsfield_dims, embed_dim16, hidden_units[128, 64]) model.compile( optimizertf.keras.optimizers.Adam(learning_rate0.001), lossbinary_crossentropy, metrics[AUC] ) # 训练 history model.fit(train_ds, epochs10, verbose1)逻辑说明embedding_layers按 field 分开定义user_id、video_id 等独立查表避免不同 field 共享 embedding 空间fm_second_order使用数学等价变换(Σv_i)^2 - Σ(v_i^2)比暴力双重循环 O(n²) 快一个数量级dnn_input将所有 field embedding 拼接为(batch, num_fields * embed_dim)这是标准做法learning_rate0.001是 DeepFM 训练稳定起点若 loss 不降优先调小0.0005而非加大embed_dim16是经验平衡点太小4无法表达用户/视频差异太大64易过拟合且显存爆炸单卡 1080Ti 可跑 16 维。5. 避坑指南Hadoop Spark DeepFM 三件套联调时90% 的翻车都发生在这 5 个地方这三者组合不是简单叠加而是存在隐式依赖和版本咬合。以下是我带 12 届毕设学生踩过的血泪坑按出现频率排序5.1 Hadoop 启动后jps看不到 DataNode端口冲突 or 权限锁死现象start-dfs.sh后jps只有NameNode无DataNodelogs/hadoop-xxx-datanode-xxx.log报java.io.IOException: All directories in dfs.datanode.data.dir are invalid原因dfs.datanode.data.dir目录权限不对必须是启动用户可读写或该目录下存在残留的in_use.lock文件上次异常退出未清理解决sudo chown -R $USER:$USER /opt/hadoop-2.7.7/data/datanoderm /opt/hadoop-2.7.7/data/datanode/current/in_use.lock再stop-dfs.sh start-dfs.sh5.2 Spark 读 HDFS 报java.net.ConnectException: Connection refused现象spark.read.csv(hdfs://localhost:9000/...)报错Call From xxx to localhost:9000 failed on connection exception原因Spark 驱动端 DNS 解析localhost失败尤其在 Ubuntu 20.04或core-site.xml中fs.defaultFS地址与 Spark 配置不一致解决在/etc/hosts中确认127.0.0.1 localhost存在Spark Session 中显式指定spark.hadoop.fs.defaultFShdfs://127.0.0.1:9000用 IP 替代 hostname5.3 PySpark 特征工程后features列为空或 shape 异常现象feature_df.select(features).show()显示null或features是SparseVector但维度为 0原因VectorAssembler输入列名拼写错误如user_id_vec写成user_vec或某列全为 null 导致assembler自动跳过该列解决feature_df.printSchema()检查各中间列是否存在对每个StringIndexer加.setHandleInvalid(keep)防止 null 值被丢弃用feature_df.select(user_id_vec).filter(F.col(user_id_vec).isNull()).count()定位空列5.4 DeepFM 训练 loss 为 nan 或不下降现象loss: nan或loss: 0.6931始终等于 log(2)即随机猜测原因embedding 初始化过大默认glorot_uniform在稀疏场景易爆炸或 learning_rate 过高0.01或 label 未归一化为 0/1存在 -1 或 2解决Embedding层加embeddings_initializertf.keras.initializers.RandomNormal(stddev0.01)label 列强制df.withColumn(label, F.when(F.col(label)1, 1.0).otherwise(0.0))learning_rate 从 0.001 开始5.5 模型预测结果全是 0.5特征未对齐 or field_dims 错误现象model.predict(...)输出全为[0.5]auc_score ≈ 0.5原因field_dims数组中某个维度远小于实际唯一值数量如 user_id 实际有 50000 个但设为 10000导致 embedding lookup 时 index 越界取 0 向量或训练/预测时特征顺序不一致Spark 输出的 field 顺序 vs DeepFM 输入的 field 顺序解决用spark.sql(SELECT COUNT(DISTINCT user_id) FROM ...).collect()[0][0]精确统计每个 field 唯一值在load_libsvm_data中打印feature_indices.shape和field_dims验证匹配6. 毕业答辩前必做的三件事让评委一眼看懂你的系统价值而不是代码量很多同学花 3 个月搭环境、调参数答辩时却卡在“你这个系统到底解决了什么问题”。评委不关心你start-dfs.sh执行了几次而关心你的推荐结果比 baseline 好在哪线上部署怎么衔接数据闭环怎么形成这三件事不做再漂亮的 pipeline 也只是玩具。6.1 必做对比实验DeepFM vs 传统方法用 AUC 和 Recall10 说话不要只说“我用了 DeepFM”要量化提升。在相同数据集上跑三个模型Baseline 1Logistic RegressionLR—— 仅用 one-hot 特征无交叉Baseline 2FM—— 有二阶交叉无 DNNYour ModelDeepFM—— FM DNN用 Spark MLlib 的LogisticRegression、FMRegressor需自编和你的 TensorFlow 模型在 8:2 划分数据上训练指标统一用AUC和Recall10前 10 推荐里有多少是用户真实点击的ModelAUCRecall10LR0.6210.183FM0.6870.241DeepFM0.7320.298提示Recall10 更贴近业务——视频号首页只展示 10 个推荐用户最多划 3 屏。AUC 高但 Recall10 低说明模型在尾部排序不准实际体验差。6.2 必画一张架构图标出 Hadoop/Spark/DeepFM 各自职责箭头注明数据流向手绘或用 draw.io 画禁止PPT 风“云-管道-数据库”抽象图。必须包含左侧Hadoop HDFS 图标标注/raw/video_logs/原始日志、/features/Spark 输出中部Spark 集群图标Driver 2 Executor标注Feature Engineering Pipeline和LibSVM Export右侧DeepFM 模型框标注Embedding Lookup → FM Layer → DNN Layer → Sigmoid Output箭头HDFS → Spark粗箭头写“日志批量导入”、Spark → HDFS写“特征宽表存储”、HDFS → DeepFM写“LibSVM 数据加载”底部加一行小字“离线训练周期每日凌晨 2 点触发耗时 ≤ 45 分钟GTX 1080Ti”。6.3 必答一个灵魂问题“如果明天上线你的系统怎么应对突发流量”答案不能是“加机器”。要体现工程思维数据层HDFS 副本数从 1 改为 3dfs.replication3防单点故障计算层Spark--num-executors 4 --executor-cores 4 --executor-memory 8g预留 20% 资源余量模型层DeepFM 导出为 SavedModel用 TensorFlow Serving 提供 REST APIQPS ≥ 500实测值监控项yarn application -list | grep RUNNING | wc -l运行中任务数、hdfs dfsadmin -report | grep Live datanodes存活 DataNode 数、curl http://localhost:8501/v1/models/deepfm:predict | jq .model_version_status[0].state模型加载状态。最后说一句实在话这个项目真正的价值不在于你跑通了 DeepFM而在于你亲手拧紧了 Hadoop 的core-site.xml、读懂了 Spark 的VectorAssembler源码、在 TensorFlow 里 debug 过 embedding lookup 的 shape mismatch。这些细节不会出现在答辩 PPT 里但它们会长进你的肌肉记忆——下次面试官问“Spark 读 HDFS 的原理”你脑子里浮现的不再是概念而是FileSystem.get(new URI(hdfs://...))这行代码和它背后的 RPC 调用栈。希望帮到你。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

5分钟上手Effective HTML:免安装、npx与Claude Code插件3种启动方式 2026/9/26 15:52:25

5分钟上手Effective HTML:免安装、npx与Claude Code插件3种启动方式

5分钟上手Effective HTML:免安装、npx与Claude Code插件3种启动方式 【免费下载链接】effective-html Agent skills for useful HTML artifacts, wireframes, interactive prototypes, plans, and diagrams. 项目地址: https://gitcode.com/gh_mirrors/ef/effecti…

阅读更多 →
小红书内容质量评分体系:xiaobei 项目 rubric_notes.md 全解析与源码级实践指南 2026/9/26 15:52:19

小红书内容质量评分体系:xiaobei 项目 rubric_notes.md 全解析与源码级实践指南

人工智能AI Agent大模型AI 应用媒体生成 【免费下载链接】xiaobei 为OPC/中小微企业量身打造的自媒体获客智能体 项目地址: https://gitcode.com/gh_mirrors/wi/xiaobei 点击查看 免费下载 本文以 crews/main/calibration/xhs/rubric_notes.md(全平台统…

阅读更多 →
AICrypto: A Comprehensive Benchmark For Evaluating Cryptography Capabilities of Large Language Mo... 2026/9/26 15:52:19

AICrypto: A Comprehensive Benchmark For Evaluating Cryptography Capabilities of Large Language Mo...

文章主要内容和创新点 主要内容 本文提出了首个全面评估大型语言模型(LLMs)密码学能力的基准AICrypto,旨在填补当前LLMs在密码学领域能力评估的空白。该基准包含三类任务: 135道选择题(MCQs):测试LLMs对密码学基础概念的事实记忆能力,涵盖经典密码学、对称加密、非对…

阅读更多 →
大模型API聚合平台深度剖析:选型前必须弄清的五个关键问题 2026/9/26 15:52:07

大模型API聚合平台深度剖析:选型前必须弄清的五个关键问题

大模型API聚合平台越来越多,选型时的信息差却没变小。各家大模型API在协议、鉴权、流式格式上互不兼容,需要中间架一层聚合网关统一输出标准接口,同时兼顾计费统计、限流与密钥安全分发等企业需求。在反复对比主流平台之后,本文把选型前必须弄清的五个关键问题梳理成文,第一个推…

阅读更多 →
淘宝评论API调用效率优化实战:并发限流与缓存策略 2026/9/26 15:52:00

淘宝评论API调用效率优化实战:并发限流与缓存策略

接手内部评论同步任务的那阵子,我手里的代码只能串行拉取淘宝评论API,每天凌晨定时跑,经常到早上八点还跑不完,偶尔还会触发平台限流提示。后来我把整个调用链路逐段打点、压测、重写,从单次平均1.2秒降到0.18秒&#…

阅读更多 →
HackRF 主机最低系统要求:供电、USB 高速通信与高采样率实战指南 2026/9/26 15:52:00

HackRF 主机最低系统要求:供电、USB 高速通信与高采样率实战指南

嵌入式硬件开发固件通信 【免费下载链接】hackrf low cost software radio platform 项目地址: https://gitcode.com/gh_mirrors/ha/hackrf 点击查看 免费下载 HackRF 是低成本软件无线电平台,但其对主机系统有着明确的硬性要求:5 V/500 mA …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉