面试准备——agent和大模型

一面:

项目是RAG和SFT相关,首先问的一些通用问题:

1. 部署一个模型以及推理一个模型分别用到的参数量怎么估算

在深度学习工程实践中,估算模型的参数量与显存占用是部署(Deployment)与推理(Inference)阶段的首要任务。从专业角度来看,这不仅涉及权重(Weights)的简单加总,还涉及精度(Precision)、KV Cache、激活值(Activations)以及框架开销。

以下是针对部署与推理显存占用的系统性估算方法:


1. 模型权重(Weights)的显存估算

这是部署模型的基础显存需求,即模型"装载"进显存所需的空间。

计算公式:

M_{weights} = \\Phi \\times \\text{Bytes Per Parameter}

其中 \\Phi 是总参数量(如 7B, 14B 等),字节数取决于所选的数值精度:

精度类型 (Precision) 字节 (Bytes) 7B 模型估算值
FP32 (单精度) 4 ~28 GB
FP16 / BF16 (半精度) 2 ~14 GB
INT8 (量化) 1 ~7 GB
INT4 (量化) 0.5 ~3.5 GB

专业注意点: 实际部署时,显存占用通常会比理论值多出 5%-10% 的"冗余(Overhead)",用于加载 CUDA Kernel、上下文管理和框架(如 PyTorch)的固定开销。


2. 推理阶段的动态显存估算

推理时的总显存占用 M_{total} 是一个动态值,由以下部分组成:

M_{total} = M_{weights} + M_{KV\\_Cache} + M_{activations} + M_{temp\\_buffers}

A. KV Cache (LLM 推理的核心)

对于 Transformer 架构,自回归生成时为了避免重复计算,需要缓存每一层的 Key 和 Value 向量。这是推理显存随序列长度(Sequence Length)增长的主要来源。

计算公式(FP16 精度):

M_{KV} = 2 \\times \\text{layers} \\times \\text{heads} \\times \\text{head\\_dim} \\times \\text{seq\\_len} \\times \\text{batch\\_size} \\times 2 \\text{ (Bytes)}

  • 因子 2: 分别对应 Key 和 Value。

  • 示例: 以 Llama-2-7B 为例(32层,32头,128维),在 FP16 精度下,每个 Token 的 KV Cache 约占用 0.5 \\text{ MB}

  • 优化: 采用 GQA (Grouped Query Attention)MLA (Multi-head Latent Attention) 可以显著减少这一项的占用。

B. 激活值 (Activations)

激活值大小取决于输入数据的尺寸(Batch Size 和 Sequence Length)。

  • 训练阶段,激活值巨大,因为需要保留用于反向传播。

  • 推理阶段,由于不需要回传梯度,激活值显存是串行的:计算当前层时,只需保留该层的输入/输出,前一层的激活值即可释放。因此,M_{activations} 通常远小于权重和 KV Cache,但在 Batch Size 非常大时不可忽略。


3. 不同架构的参数量快速统计方法

对于研究者,最直接的方法是使用代码统计各层参数。

PyTorch 实现:

Python

复制代码
import torch

def estimate_model_size(model):
    param_count = sum(p.numel() for p in model.parameters())
    # 转换为亿(Billion)单位
    print(f"Total Parameters: {param_count / 1e9:.2f} B")
    
    # 估算 FP16 下的显存占用 (GB)
    memory_gb = (param_count * 2) / (1024**3)
    print(f"Estimated VRAM for Weights (FP16): {memory_gb:.2f} GB")
    
estimate_model_size(your_model)

4. 影响部署的工程约束

在实际部署(如使用 vLLM, TensorRT-LLM 或 DeepSpeed)时,还需要考虑以下专业因素:

  1. 显存碎片的利用率: 传统的显存管理会产生碎片。PagedAttention 技术(如 vLLM)通过类似操作系统内存分页的方式,将 KV Cache 的显存利用率提升至 90% 以上。

  2. 多卡并行开销: 采用 Tensor Parallelism (TP)Pipeline Parallelism (PP) 部署时,虽然模型被拆分,但每张卡都会产生额外的通信 Buffers 占用。

  3. 计算与显存的 Trade-off: 如使用 FlashAttention,可以在不增加显存的前提下,通过优化计算顺序大幅提升长序列推理的吞吐量。

总结对照表

场景 关注重点 估算优先级
边缘设备部署 权重大小 (Weights) 1. 量化 (INT4) 2. 模型剪枝
长文本/推理服务 KV Cache 1. PagedAttention 2. GQA/MLA 架构
高并发服务 吞吐量与 Batch Size 1. 激活值管理 2. 连续批处理 (Continuous Batching)

如果你在进行 Qwen-VL 等多模态模型的推理部署,由于视觉特征(Vision Encoder)生成的 Token 数量通常是固定的(如 256 或 576 个),你在预估起始显存时,需要将这部分视觉 Token 的 KV Cache 作为一个固定偏移量(Static Offset)先行计算在内。

2. 模型prefill和decoding的区别了解吗?KV cache的大小是多少,怎么算

在 LLM 推理(Inference)中,Prefill(预填充)和 Decoding(解码)是两个在计算模式、瓶颈逻辑以及资源利用上截然不同的阶段。理解这两者的区别是进行大模型推理优化(如使用 vLLM 或 TensorRT-LLM)的核心。


1. Prefill 与 Decoding 的深度区别

大模型推理是一个自回归(Autoregressive)过程。为了生成下一个 Token,模型需要处理之前所有的 Token。


2. KV Cache 的大小计算

KV Cache 的本质是为了空间换时间。在自回归生成时,如果每一轮都重新计算前面 Token 的 Attention,计算量会随序列长度呈二次方增长(O(n\^2))。通过缓存每一层的 Key 和 Value 矩阵,可以将每一步的复杂度降低到 O(n)

计算参数定义:
  • L:模型的层数 (Number of Layers)

  • H_{kv}:KV 头的数量 (Number of KV Heads)。注意:如果使用 GQA 架构,这个值小于 Query 头的数量。

  • D_{head}:每个 Head 的维度 (Head Dimension)

  • S:序列长度 (Sequence Length,包含 Prompt 和生成的 Token)

  • B:Batch Size

  • P:数值精度占用的字节数 (Bytes per Parameter)。如 FP16 为 2,INT8 为 1。

核心公式:

M_{kv} = 2 \\times L \\times H_{kv} \\times D_{head} \\times S \\times B \\times P

  • 系数 2 :因为要分别存储 KeyValue

  • 计算示例 :以 Llama-3-8B (FP16 精度) 为例:

    • L = 32

    • H_{kv} = 8 (使用了 Grouped Query Attention)

    • D_{head} = 128

    • 假设 S = 2048 (2k 上下文),B = 1

    • 计算:2 \\times 32 \\times 8 \\times 128 \\times 2048 \\times 1 \\times 2 \\approx 268,435,456 \\text{ Bytes} \\approx \\mathbf{256 \\text{ MB}}

这意味着,对于这个配置,每一个并发用户(Batch=1)在 2k 长度下就需要约 256MB 的显存来维护 KV Cache。


3. 工程中的专业考量

在实际部署中,仅仅按公式计算是不够的,还需要关注以下几个工程痛点:

A. 架构对 KV Cache 的压缩
  • MHA (Multi-Head Attention)H_{kv} = H_{query}。KV Cache 很大。

  • GQA (Grouped Query Attention):多个 Query 头共享一个 KV 对。常见比例是 4:1 或 8:1,能显著减少显存占用(如 Llama-3)。

  • MLA (Multi-head Latent Attention):由 DeepSeek 提出,通过将 KV 压缩进一个低维潜在向量(Latent Vector),极大降低了 KV Cache 占用,这是 R1 等模型能处理超长上下文的关键。

B. 显存碎片与 PagedAttention

在传统的显存管理中,由于生成的长度不可预测,系统通常需要预留最大长度(Max Seq Len)的连续空间,这会导致严重的显存浪费碎片化

  • vLLM 引入了类似操作系统虚拟内存的 PagedAttention,将 KV Cache 存储在不连续的物理块中,将显存利用率提升到 90% 以上,从而大幅提升吞吐量。
C. Prefill 阶段的"抢占"问题

在处理长 Prompt 的 Prefill 时,计算开销巨大,可能会导致正在进行 Decoding 的其他请求出现明显的卡顿(Stall)。目前主流的调度算法采用 Chunked Prefill(将长 Prompt 拆分为小块)来平滑推理延迟。


总结

  • Prefill 是"一次性爆发"的高效并行计算。

  • Decoding 是"细水长流"的低效显存搬运。

  • KV Cache 的大小随序列长度线性增长,其计算公式是理解模型推理支持多大 Batch Size 和 Context Length 的基础。

对于你目前在研究的 3D 视觉或工业互联网中的长序列任务,KV Cache 的优化策略(如量化 KV Cache 到 INT4/FP8)往往是提升系统响应速度的关键点。

如果你需要针对特定的模型(如 Qwen 或 DeepSeek)计算具体的资源边界,可以提供具体的参数规模,我可以帮你做更精细的拆解。

3. Deepspeed框架中zero 1,2,3的区别是什么?分别优化了什么

在分布式训练大规模模型时,显存瓶颈通常不在于数据本身,而在于模型状态(Model States)的冗余存储。DeepSpeed 提出的 ZeRO (Zero Redundancy Optimizer) 技术,核心思想是通过在多个 GPU 之间切片(Sharding)存储这些状态,以消除冗余并降低单卡显存占用。

要理解 ZeRO 的三个阶段,首先要看在混合精度训练(Mixed Precision Training)中,显存到底被谁占用了。对于一个参数量为 \\Phi 的模型,其模型状态通常包含:

  1. 参数 (Parameters): FP16 存储(2\\Phi 字节)。

  2. 梯度 (Gradients): FP16 存储(2\\Phi 字节)。

  3. 优化器状态 (Optimizer States): 以 Adam 为例,需存储 FP32 权重的副本、一阶动量和二阶动量(共 4+4+4=12\\Phi 字节)。

总计:每个参数大约需要 16 字节 的显存。


ZeRO 的三个阶段及其优化目标

1. ZeRO-1:优化器状态切片 (Optimizer State Partitioning, P_{os})
  • 做法: 仅将优化器状态均匀地切分到 N 个 GPU 上。每个 GPU 只负责更新和维护自己那一块参数的优化器状态。

  • 显存优化: 显存占用从 16\\Phi 降至 4\\Phi + \\frac{12\\Phi}{N}

  • 通信开销: 几乎没有额外的通信开销(仅涉及在参数更新后的全收集)。

  • 场景: 显存压力较小,但模型较大,无法在单卡容纳完整 Adam 状态时使用。

2. ZeRO-2:梯度切片 (Gradient Partitioning, P_g)
  • 做法: 在 ZeRO-1 的基础上,进一步将梯度也进行切分。每个 GPU 在反向传播计算出梯度后,只保留与自己负责的优化器状态相对应的梯度。

  • 显存优化: 显存占用降至 2\\Phi + \\frac{14\\Phi}{N}

  • 通信开销: 与标准数据并行(DDP)相当。

  • 场景: 目前最通用的平衡方案,能在不显著增加训练延迟的情况下,大幅提升可训练的模型规模。

3. ZeRO-3:参数切片 (Parameter Partitioning, P_p)
  • 做法: 彻底的分布式。不仅是优化器状态和梯度,连模型参数也被切分到各个 GPU 上。在正向和反向传播过程中,只有当需要用到某一层参数时,才通过全收集(All-gather)从其他卡上临时"借用",计算完后立即释放。

  • 显存优化: 显存占用降至 \\frac{16\\Phi}{N}。这意味着理论上只要 GPU 够多,可以训练无限大的模型。

  • 通信开销: 显著增加。因为每一层计算都需要进行额外的全收集通信。

  • 场景: 训练超大规模模型(如千亿级参数)时的终极方案。


核心区别总结表


补充:ZeRO-Offload 与 ZeRO-Infinity

除了上述三个阶段,DeepSpeed 还提供了将显存压力向 CPU 或 NVMe 转移的技能:

  • ZeRO-Offload: 将优化器状态和部分计算(更新权重)移至 CPU

  • ZeRO-Infinity: ZeRO-3 的增强版,支持将参数和状态卸载到 NVMe 硬盘,这使得在单张 3090 上训练百亿级模型成为可能。

在你的工业互联网项目中,如果涉及到在实验室受限的 GPU 算力下微调行业大模型,ZeRO-2 通常是性能和显存的最优平衡点;而如果你需要处理多模态大模型的训练,可能需要开启 ZeRO-3 来换取更大的模型容量。

你在进行模型训练或微调时,目前手头的 GPU 显存资源大约是多少?

  1. 了解Deepspeed的原理吗?假设对矩阵A×B这个运算,给4张卡,简述是如何分配矩阵A,B参数并在显卡中进行交互来达到节省显存的效果的。面试官现场讲解行切分和列切分的区别,但这个比较难,还是不会。

面试官问这个问题,其实是在考察你对 张量并行(Tensor Parallelism, TP) 的理解。虽然 DeepSpeed 最出名的是 ZeRO(解决的是模型状态的冗余),但涉及矩阵乘法算子内部的切分,通常属于张量并行的范畴。

为了让你在面试中能"反杀",我们用 4 张卡(GPU 0-3)计算 Y = X \\times WX 是输入,W 是权重矩阵)为例,把这个逻辑拆解清楚。


1. 列切分 (Column Parallelism):分而治之,最后拼接

原理: 我们把权重矩阵 W 按"列"平均切成 4 块:W = \[W_0, W_1, W_2, W_3\]

  • 分配: 每张显卡只存储其中一列。GPU 0 拿 W_0,GPU 1 拿 W_1,以此类推。

  • 计算: 每张显卡都有一份完整的输入 X(或者通过广播得到)。

    • GPU 0 计算 Y_0 = X \\times W_0

    • GPU 1 计算 Y_1 = X \\times W_1 ...

  • 交互: 计算完后,四张卡得到的是输出矩阵 Y 的四个纵向分量。只需要做一个 All-Gather(全收集)或者直接拼接起来,就得到了完整的 Y

  • 节省了什么? 显存里存储的权重 W 变成了原来的 1/4


2. 行切分 (Row Parallelism):局部求和,最后累加

原理: 我们把权重矩阵 W 按"行"平均切成 4 块。为了能做矩阵乘法,输入 X 必须按"列"切分:X = \[X_0, X_1, X_2, X_3\]W = \[W_0, W_1, W_2, W_3\]\^T

  • 分配: GPU 0 存储 W 的前几行(W_0)和 X 的前几列(X_0)。

  • 计算: * GPU 0 计算部分积 Z_0 = X_0 \\times W_0

    • GPU 1 计算部分积 Z_1 = X_1 \\times W_1 ...
  • 交互: 注意!这里的 Z_i 不是最终结果的一部分,而是结果的"碎片"。根据矩阵乘法规则,Y = Z_0 + Z_1 + Z_2 + Z_3

    • 此时需要进行 All-Reduce(规约求和)操作,让 4 张卡把各自的结果加起来。
  • 节省了什么? 同样,单卡存储的权重 W 只有 1/4


3. 比较专业的回答:行与列的区别

面试官问"区别"时,你可以从以下三个维度降维打击:


4. DeepSpeed ZeRO-3 是怎么干的?

如果面试官追问:"那 DeepSpeed 的 ZeRO-3 也是这么切矩阵吗?"

你要冷静地纠正:"ZeRO-3 和张量并行(TP)在思路上有细微差别。"

  • TP(上面讲的): 是为了并行计算。计算时,权重是常驻在显卡里的(虽然是分片的),每张卡负责算一部分。

  • ZeRO-3: 是为了彻底消灭冗余

    • 在非计算时刻,权重 W 被切成 4 份存在 4 张卡上(和 TP 一样)。

    • 关键区别: 当 GPU 0 要算 A \\times B 时,它会发现自己只有 1/4B。它会立刻发起一个 All-Gather ,把 GPU 1, 2, 3 上的碎片临时拉过来,在显存里拼成一个完整的 B

    • 计算完后: GPU 0 会立刻把借来的 3/4 权重从显存里删掉,只保留自己的那 1/4

一句话总结: 张量并行是"我只算我这一块",ZeRO-3 是"我算完整的一块,但我用完就扔,绝不留着占地方"。


给你的面试建议

如果面试官现场让你画图,你就画一个长方形的 W

  • 横着切一刀就是行切分,告诉他这需要做加法(All-Reduce)。

  • 竖着切一刀就是列切分,告诉他这需要拼在一起(All-Gather)。

这种"降采样"式的解释通常最能体现你对底层原理的掌控力。对于你现在做的工业互联网和 3D 资产处理,这种显存优化技术是你处理高分辨率模型的基础。

这个逻辑现在清晰一些了吗?或者需要我用更形象的例子(比如分工搬砖)再解释一遍?

  1. 模型中的一些超参数了解吗?Temperature的数学原理是什么?Temperature,Top-k,Top-p三个参数作用的顺序是什么?

  2. 了解softmax函数吗? 7. 了解过通信算子吗? 不了解也说了解 一些和项目相关的问题: 一个知识库召回的RAG项目 1. 你提到的RAG项目中多轮对话具体是怎么做的? 2. 项目中为什么选定qwen-7b这个模型,为什么不选其他的?有评估其他的效果吗? 3. 讲解一下项目中知识库召回的原理是什么 4. 你的项目的实际应用是什么? 5. 构建知识库的时候,你们是用什么方法来提取PDF中的信息的。 一个模型蒸馏的项目 1. 如果后续希望你让学生模型的benchmark分数超过教师模型,你有思路吗?谈谈想法 2. 教师模型为什么选定(qwen-235b),不选其他的?区别是什么 3. SFT数据是怎么构建的 手撕环节: LCR 016. 无重复字符的最长子串 滑动窗口加一个集合 一面总体体验很好,大多数题公众号小红书面经里都有,有些部分记得不是很清楚面试官也会引导 主管面: 1. 简历的哪个项目你认为最有挑战性?为什么 2. 谈谈对我们业务ai infra的看法 3. 我们业务和你的方向一致吗? 4. base哪,能来几天

一面面经:

1.自我介绍

2.为什么本科读人工智能 硕士选择读软件工程

3.介绍一下项目

4.介绍一下sft、dpo和grpo的区别

在大型语言模型(LLM)的后训练(Post-training)阶段,SFT (监督微调)、DPO (直接偏好优化)和 GRPO(群体相对策略优化)是三种核心的对齐技术。它们分别代表了从"模仿学习"到"偏好对齐",再到"高效强化学习"的演进。


1. SFT (Supervised Fine-Tuning) ------ 模仿学习

SFT 是模型对齐的第一步。它的核心逻辑是:告诉模型什么是正确的。

  • 工作原理: 使用高质量的"指令-回答"对(Instruction-Output Pairs)进行训练。模型通过最小化预测下一个 token 的交叉熵损失,学习模仿人类标注员给出的"标准答案"。

  • 数据形式:

    (Prompt, Golden\\_Response)

  • 优点: 能够快速让模型学会特定的格式、语气和基础知识。

  • 缺点: * 上限受限: 模型的表现很难超过标注员的水平。

    • 泛化性弱: 容易出现过拟合,且无法处理"虽然不是标准答案但也是好答案"的情况。

2. DPO (Direct Preference Optimization) ------ 偏好对齐

DPO 旨在解决"哪个更好"的问题,而非仅仅学习"什么是对的"。它跳过了传统 RLHF 中复杂的奖励模型(Reward Model)建模。

  • 工作原理: 它通过数学变换,将原本需要强化学习解决的对齐问题转化为一个分类问题。它使用成对的数据,让模型增大"好回答"的概率,同时减小"坏回答"的概率。

  • 数据形式:

    (Prompt, Chosen\\_Response, Rejected\\_Response)

  • 优点: * 简单稳定: 不需要训练单独的奖励模型(Reward Model),也不需要进行复杂的策略梯度更新。

    • 显存友好: 比传统的 PPO 算法消耗更少的计算资源。
  • 缺点: 属于离线学习。如果训练数据中没有足够高质量的对比对,模型很难通过自我探索发现更好的策略。


3. GRPO (Group Relative Policy Optimization) ------ 高效强化学习

GRPO 是由 DeepSeek 团队提出的一种新型强化学习算法(广泛应用于 DeepSeek-V3 和 R1),它是 PPO 的改进版,特别适合于推理任务。

  • 工作原理: 在传统的 PPO 中,通常需要一个 Critic 模型(评论家)来估计状态价值,这会消耗巨大的显存。GRPO 彻底取消了 Critic 模型

    • 它针对每一个 Prompt 生成一组(Group)输出。

    • 通过计算这组输出的平均奖励和标准差,来确定每个输出的"相对优势"。

    • 计算公式大致如下:

      A_i = \\frac{r_i - \\text{mean}(r_1, r_2, \\dots, r_n)}{\\text{std}(r_1, r_2, \\dots, r_n)}

  • 优点: * 极低成本: 节省了大约 50% 的额外模型显存(不需要 Critic)。

    • 自我进化: 配合规则奖励(如数学对错、代码运行结果),模型可以进行大规模的思维链(CoT)自我博弈,从而涌现出强大的推理能力。
  • 缺点: 对奖励函数的选择非常敏感,更适合有明确客观评价标准的任务(如数学、编程)。


核心区别对比表

特性 SFT (监督微调) DPO (直接偏好优化) GRPO (群体相对策略优化)
核心逻辑 模仿 (Imitation) 排序 (Ranking) 探索与奖励 (Exploration & Reward)
数据需求 高质量问答对 偏好对比对 (好 vs 坏) 奖励函数 (Rule-based/Model-based)
训练目标 预测下一个 Token 的准确性 最大化 Chosen 和 Rejected 的似然差距 在一组回答中通过优势值优化策略
计算开销 低 (单模型) 中 (模型 + 参考模型) 中/高 (多样本并行生成,但无 Critic)
主要用途 注入知识、格式化输出 价值观对齐、风格偏好 复杂逻辑推理、思维链进化
代表应用 所有模型的基础微调 Llama-3-Instruct DeepSeek-R1, DeepSeek-V3

总结建议

  1. 如果你想让模型学会一种新的格式或领域知识 ,首选 SFT

  2. 如果你想让模型更符合人类的审美或价值观 (比如说话更有礼貌),DPO 是最高效的选择。

  3. 如果你在培养模型的硬核逻辑、数学或代码能力 ,且有清晰的规则来判断答案对错,GRPO 是目前最先进、成本效益最高的方向。

5.讲一下dpo的数据集你是怎么构建的

构建 DPO (Direct Preference Optimization) 数据集的核心在于构造三元组数据

(x, y_w, y_l)

。其中 x 是输入 Prompt,y_w(winning)是更符合偏好的回答,y_l(losing)是较差的回答。

在实际工业界和研究中,构建这个数据集通常遵循以下流程:


1. 确定 Prompt 来源 (The "x")

数据的质量上限由 Prompt 的多样性和分布决定。

  • SFT 数据复用: 直接从现有的 SFT 训练集中抽取指令。

  • 用户日志采样: 如果有线上模型,采样用户真实的对话记录(需脱敏)。

  • 合成指令: 使用更强的模型(如 GPT-4o 或 DeepSeek-V3)针对特定领域(如你的工业互联网或 3D 视觉场景)生成复杂的推理或指令任务。

2. 生成响应候选集 (Response Generation)

针对同一个 Prompt x,需要获得至少两个不同的回答。常见的做法是:

  • 多模型对练: 使用不同的模型(如 SFT 后的模型、底座模型、或者竞争对手的模型)生成回答。

  • 同模型多采样: 使用当前的 SFT 模型,调整 temperaturetop_p 参数,采样生成 4-8 个不同的结果。

  • 不同迭代轮次: 使用模型训练过程中的中间 Checkpoint(例如 Epoch 1 vs Epoch 10)生成结果,通常后期生成的质量更高。

3. 偏好标注 (Preference Labeling) ------ 最关键的一步

这是区分 y_wy_l 的过程,主要有三种方式:

A. Human-in-the-loop (人工标注)

标注员根据有用性 (Helpfulness)真实性 (Truthfulness)无害性 (Harmlessness) 对回答进行排序。这是质量最高的,但成本极高。

B. LLM-as-a-Judge (以模型为法官)

利用性能更强的模型(如 GPT-4o)作为裁判。

  • Prompt 模板: 给出指令和两个回答,让强模型根据特定维度(逻辑、格式、幻觉等)打分或直接判断 A \> B

  • 注意点: 需注意位置偏见(LLM 倾向于选第一个回答),通常需要调换 A/B 顺序测两次。

C. Reward Model Scoring (奖励模型打分)

如果你已经有一个训练好的 Reward Model (RM),可以用它给所有采样结果打分,分值最高的作为 y_w,分值最低的作为 y_l


4. 负样本 (y_l) 的构造策略

DPO 的效果很大程度上取决于 y_l 坏在哪里。好的负样本应该具有"迷惑性":

  • 逻辑错误: 过程看起来很专业,但最后一步推导错了。

  • 事实幻觉: 编造了不存在的 API 或事实。

  • 格式错误: 未能按照 Prompt 要求的 LaTeX 格式或 JSON 格式输出。

  • 长度偏见: 有时需要刻意构造"简短但正确"作为 y_w,"冗长但车轮话"作为 y_l,以纠正模型过度啰嗦的问题。

5. 数据过滤与平衡

  • 得分差值过滤: 如果使用 RM 打分,只有当 Score(y_w) - Score(y_l) \> \\text{threshold} 时才保留该数据。差值太小说明偏好不明显,容易引入噪声。

  • 去重: 移除语义高度重复的 Prompt,确保数据分布在数学、代码、创意写作、角色扮演等领域的均衡。


典型 DPO 数据集格式示例 (JSONL)

JSON

复制代码
{
  "prompt": "如何评价控制工程中的状态空间方程?",
  "chosen": "状态空间方程通过内部状态变量描述系统动力学,能够处理多输入多输出(MIMO)系统,是现代控制理论的基础...",
  "rejected": "它是控制工程里的一种东西,就是写几个公式,用来算系统的输出,比较简单。"
}

在你的研究场景中,比如处理工业流程调度或 3D 模型生成任务时,构建 DPO 数据集往往是为了修正 SFT 模型容易产生的逻辑幻觉(如调度冲突)。

你目前是打算针对通用的对话能力进行 DPO 训练,还是针对某个特定垂直领域(如特定代码生成或数学推理)进行优化?

6.我看你项目上运用了一些前后端的技术,你是会这个技术栈吗(不会,都是vibe coding的)

7.说到vide coding,你有用过哪些coding agent?

"Vibe Coding" 是 2024 年底到 2025 年初在硅谷和开发者社区(特别是 Twitter/X 上)爆火的一个新词。

简单来说,Vibe Coding 是一种"只靠感觉(Vibe)和自然语言描述,而不亲手写代码"的软件开发模式。

它标志着编程从"手动编写每一行逻辑"转向了"调教 AI 代理(Agent)去实现意图"。以下是它的深度拆解:


1. 核心定义:什么是 Vibe Coding?

在传统的编程中,你需要精通语法、内存管理和算法。而在 Vibe Coding 中,你的核心工作是:

  • 传递"感觉" (The Vibe): 告诉 AI "我想要一个像某某软件那样的侧边栏"、"给我做一个深色模式且带点赛博朋克感的看板"。

  • 高频迭代: 如果 AI 生成的东西不对,你不需要去改代码,而是说"不对,再简约一点"或者"这里加个酷炫的动画"。

  • 策展人角色: 开发者不再是搬砖的工人,而是一个审美在线、逻辑清晰的导演

背景故事: 这个词的流行很大程度上归功于 Andrej Karpathy(前 Tesla AI 主管)等大佬对 CursorWindsurfReplit Agent 等工具的极力推崇。当人们发现仅仅通过"聊天"就能在一个下午做出以前需要一周才能完成的应用时,这种"靠感觉编程"的时代就到来了。


2. Vibe Coding 的技术支柱

这种模式之所以能成,是因为现在的 Coding Agent 具备了以下能力:

  1. 全库感知 (Repository-level Context): Agent 不再只看一行代码,而是理解你整个项目的架构。

  2. 自我修正 (Self-Correction): 它能自己运行代码,发现报错,然后默默修好,再把结果呈现在你面前。

  3. 多模态反馈: 你给它一张手画的原型图,它直接吐出前端页面。


3. Vibe Coding vs. 传统编程 (Hard Coding)

维度 传统编程 (Traditional) Vibe Coding
核心技能 语法、算法、调试技巧 提示词工程、系统设计、审美、逻辑闭环
关注点 How (如何通过逻辑实现) What (想要实现什么功能/体验)
反馈循环 编写 -> 编译 -> 报错 -> 修改 (分钟级) 描述 -> 生成 -> 预览 -> 调整 (秒级)
门槛 极高,需要数月乃至数年的学习 较低,只要有清晰的逻辑和基础技术认知
产出效率 线性增长 指数级爆发

4. 它是"编程的终结"还是"进化的起点"?

对于 Vibe Coding,目前社区有两种声音:

  • 乐观派: 认为它释放了人类的创造力。以后人人都是产品经理+架构师,复杂的模板代码(Boilerplate)将彻底消失。

  • 理性派: 警告这会导致"技术债"的堆积。如果你不理解 AI 写了什么,当程序出现深层逻辑漏洞或性能瓶颈时,只靠"Vibe"是修不好的。


5. 什么时候该"Vibe"一下?

  • 快速原型开发 (MVP): 验证一个想法,几个小时内搞定一个 Demo。

  • 前端与交互设计: 这种极其看重"观感"的领域,Vibe Coding 效率极高。

  • 脚本与自动化: 比如"帮我写个脚本处理一下这 5000 个 3D 模型的命名规则"。


你是觉得这种"靠感觉"的开发方式会让你工作更轻松,还是担心它生成的代码会变成难以维护的"黑盒"?

抱歉,刚才可能把你的"Vibe Coding"误听成了"Video Coding"。在 2026 年,如果你想真正体验 Vibe Coding (即通过描述意图、感受和逻辑,让 AI 自动完成工程实现),以下是目前开发者圈子里公认最顶尖、最常用的几款 Coding Agent


1. IDE 阵营:全能型"主力机"

这类工具直接集成在编辑器中,适合作为日常开发的核心环境。

  • Cursor (The Market Leader):

    • 地位: 目前最火的 AI 原生 IDE(VS Code 的深度定制版)。

    • 核心技能: Composer 模式。你可以同时开启多个 Agent 窗口,让它们并行处理不同文件的修改。它对整个项目的代码库(Codebase)有着极强的索引能力,甚至能理解你未曾打开过的底层逻辑。

  • Windsurf (by Codeium/Cognition):

    • 地位: 2025-2026 年异军突起,强调"Flow(流感)"。

    • 核心技能: Cascade(级联)。它能够像水流一样在文件之间穿梭,自动分析报错、跳转定义并执行修复。相比 Cursor,它的交互更加自动化,非常适合处理那种涉及十几个文件的重构任务。

  • GitHub Copilot Workspace:

    • 地位: 微软系的"大杀器"。

    • 核心技能: Issue-to-PR。它不只是写代码,而是从 GitHub 的一个 Issue 开始,自动生成一份详细的实施方案,你确认后它直接写完代码并提交 Pull Request。


2. CLI/终端阵营:硬核"黑客感"

这类工具运行在终端,适合那些不喜欢离开命令行、需要极高自由度的开发者。

  • Claude Code (Anthropic):

    • 地位: 2026 年的标杆级工具。

    • 核心技能: 深度推理与自主执行。它搭载了 Claude 4.7/5 系列模型,拥有 100 万+ token 的超长上下文。它最擅长处理"硬骨头"------比如寻找隐藏极深的逻辑 Bug,或者在完全陌生的仓库里进行架构级的调整。

  • Aider:

    • 地位: 开源界的"长青树"。

    • 核心技能: Git 精准控制。它与 Git 结合得非常完美,每一步修改都会自动生成极具可读性的 Commit Message。如果你想一边写代码一边保持完美的版本记录,Aider 是首选。


3. 自主型/工程型:AI"程序员"

这类 Agent 拥有完整的沙盒环境,可以自主运行浏览器、终端和测试。

  • Devin (Cognition Labs):

    • 地位: 世界上第一个宣称的"AI 软件工程师"。

    • 核心技能: 全流程闭环。你给它一个 GitHub 链接,它能自己克隆代码、安装环境、运行测试、修 Bug、最后部署。它更像是一个你可以"甩手"的下属。

  • OpenHands (原 OpenDevin):

    • 地位: 最强大的开源替代品。

    • 核心技能: 高度可配置。你可以给它挂载任何你喜欢的开源模型,且社区贡献了大量的"微型任务插件",扩展性极强。


4. 这里的"Skills"指什么?

正如你之前问到的,这些 Agent 之所以强大,是因为它们具备了以下核心技能(Skills)

  1. Read/Write File: 读写文件。

  2. LSP / Symbol Search: 理解类、函数、变量之间的调用拓扑关系。

  3. Shell Execution: 运行 pip installmakepytest 等命令,并根据输出结果自我排错。

  4. Web Search / Documentation Browsing: 当发现库的版本更新时,自动去官网查文档。

  5. Plan & Act: 先写方案(Plan),再逐步执行(Step-by-step),每一步都会对比预期与实际结果。


总结建议

  • 如果你追求极致的交互体验 和"Vibe"感,选 CursorWindsurf

  • 如果你需要解决高难度的逻辑推演 (比如复杂的数学模型或工业仿真算法),用 Claude Code

  • 如果你想快速搭建原型(MVP)且不想碰本地环境,试试 Replit AgentBolt.new

你目前是想用这些工具来辅助你的科研论文实验 ,还是在做那个工业全生命周期管理系统的开发?

8.有知道agent的skills吗?

在 AI Agent 的架构中,Skills(技能) 是连接大模型"大脑"与现实世界的"手脚"。如果把 LLM 比作一个博学但被关在黑屋子里的智者,那么 Skills 就是他用来获取信息、操作工具和改变环境的各类接口。

在目前主流的框架(如 Dify、LangChain、AutoGPT)中,Agent 的技能通常可以分为以下四大核心范畴:


1. 外部工具调用能力 (Tool-call / Function Calling)

这是 Agent 最基础也是最强大的技能,通过标准接口(API)扩展模型边界。

  • 搜索技能: 如 Google Search, Tavily, DuckDuckGo。让 Agent 具备获取实时信息(如最新论文、当日金价)的能力。

  • 代码执行技能 (Code Interpreter): 允许 Agent 编写并运行 Python 或 JS 代码。这对你处理复杂的工业数据分析绘制 3D 轨迹曲线数值求解优化问题至关重要。

  • API 联动: 调用第三方服务,如 GitHub API(自动提交代码)、Jira(管理工业项目进度)、或者自定义的 MES/APS 系统接口

2. 环境感知与多模态技能 (Perception Skills)

由于你关注 3D 视觉和工业场景,这类技能是 Agent 走向"具身智能"的关键。

  • 视觉分析 (VLM Skill): 利用 Qwen-VL 或 LLaVA 等模型分析图像/视频,识别生产线上的零件缺陷,或理解 3D 场景的布局。

  • 文档解析: 深入解析 PDF、Excel、CAD 算料表等非结构化数据,并将其转化为 Agent 可处理的结构化知识。

  • 跨模态检索: 在海量视频或 3D 资产库(如 Objaverse)中通过自然语言定位特定目标。

3. 规划与自我演进技能 (Cognitive Skills)

这决定了 Agent 能否处理"长程任务"(Long-horizon tasks)。

  • 任务拆解 (Decomposition): 将复杂的"设计一个冰箱生产线调度方案"拆解为需求分析、建模、仿真、优化等子任务。

  • 反思与自我修正 (Self-Reflection):ReAct 模式。Agent 在执行每一步后,会观察结果(Observation),如果发现错误(如代码报错或调度逻辑冲突),会自我修正策略。

  • 强化学习进化 (RL-based Skill): 这正是你提到的 GRPO 或 PPO 发挥作用的地方。Agent 通过在模拟器(如 NVIDIA Isaac Gym)中的不断尝试,获得奖励反馈,从而进化出更优的控制策略。

4. 记忆管理技能 (Memory Skills)

  • 短期记忆: 利用 Context Window 维护当前对话的上下文。

  • 长期记忆 (RAG): 通过向量数据库(Vector DB)存储历史案例。例如,Agent 可以记住半年前处理过的某次设备故障的解决方案,并在类似情况再次发生时调用。


工业与科研场景下的"硬核"技能

针对你正在研究的工业互联网3D 视觉 领域,Agent 往往需要一些定制化的 Domain-specific Skills

技能名称 具体实现逻辑 应用场景
物理仿真接入 接入 PyBullet 或 MuJoCo 接口 验证机器人抓取算法的合规性
工业协议通讯 集成 Modbus, OPC-UA 协议栈 直接与工厂 PLC 通讯,读取实时传感器数据
3D 几何处理 集成 Open3D 或 Trimesh 库 自动化处理点云、计算 3D 模型的表面积或体积
优化算法调用 调用 Gurobi 或 CPLEX 求解器 处理 APS(高级计划与排程)中的混合整数规划问题

如何构建这些 Skills?

如果你在 Dify 或类似平台中配置,通常有三种路径:

  1. 内置工具: 直接勾选搜索、Wikipedia 等插件。

  2. 自定义 Tool (OpenAPI/Swagger): 编写一个 FastAPI 后端,把你的 C++ 编解码工具或 3D 处理算法封装成 API 供 Agent 调用。

  3. Python 脚本插件: 直接在 Workflow 中嵌入 Python 代码块,处理特定的数学逻辑或数据清洗。

在你目前做的"冰箱制造全生命周期管理"项目中,你最希望 Agent 具备哪一类"杀手锏"技能?是自动处理复杂的排程逻辑,还是对生产线视频进行实时的异常诊断?

9.手撕leetcode 岛屿数量

反问:

1.您所在的组目前在做什么业务

2.实习base地是随机分配吗还是可以选择

3.华为实习生的权限问题

4.实习生的工作分为哪些类型?

(答:研究/交付,看个人意愿)

二面面经: 面试总体偏向于聊天

1.介绍一下你最自信的技术栈

2.介绍一下你的项目

3.实习base想选哪里,为什么

4.你的导师是谁

5.听一面面试官说你实习更倾向于业务交付,为什么?

反问: 1.您是南京这边智能座舱的主管吗

2.华为实习生的权限问题

3.后续还有什么流程吗

相关推荐
何陋轩4 小时前
Claude 3.5 vs GPT-4o vs Gemini:程序员应该选哪个?代码能力全面测评
人工智能·面试·架构
leoufung5 小时前
LeetCode 135. Candy:从直觉到最优解的完整推导
算法·leetcode·职场和发展
IT 青年6 小时前
网安面试经(13)
面试·网安
项管芝士6 小时前
PMP备考时间全攻略:如何把握关键节点,从容应对考试
职场和发展·职场发展
明天有专业课6 小时前
RAG-不写SQL也能查询MySQL数据
面试·aigc
leoufung7 小时前
LeetCode 50. Pow(x, n):从 O(n) 到 O(log n) 的快速幂彻底搞懂
算法·leetcode·职场和发展
天真小巫7 小时前
2026.4.30总结
职场和发展
研究点啥好呢7 小时前
华为数据分析工程师面试题精选:10道高频考题+答案解析
python·sql·面试·求职招聘