面试准备——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.后续还有什么流程吗

相关推荐
找方案8 小时前
AI+人力资源:AI招聘面试的兴起与争议
人工智能·面试·职场和发展
测试老哥13 小时前
接口测试的测试用例应该怎么写?
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
CC数分14 小时前
2026年HRBP岗位硬性要求和加分项
面试·职场和发展·数据分析
2601_9626802215 小时前
数据分析面试常考的SQL题和业务题分别是哪几类?
sql·面试·数据分析
黄敬峰15 小时前
一文搞懂 Agentic RAG:用 LangGraph 打造会思考的智能检索架构
面试
晚安日记wanna16 小时前
SSR 为什么不适合登录态从水合冲突到缓存串号
前端·react.js·面试
晚安日记wanna16 小时前
压测 TPS 卡在 800CPU 只跑四成六步定位法
运维·面试·测试
晚安日记wanna16 小时前
批量请求失败只弹一个 Toast面试官想听五层
前端·面试·架构
晚安日记wanna16 小时前
TS const 类型参数一道面试题的四层追问
前端·面试·typescript
晚安日记wanna16 小时前
大表 DDL 面试翻车现场Online DDL 为什么还会锁死业务
数据库·面试·架构