网易 AI Agent 开发 一面
1. Transformer 的自注意力机制、位置编码、梯度消失和梯度爆炸的解决方案
答:自注意力机制的核心是让每个 token 在计算表示时都能和序列中其他 token 交互。给定输入 (X),先通过线性变换得到 (Q)、(K)、(V):
然后计算注意力:
这里除以 根号下dk 是为了防止点积过大导致 softmax 进入饱和区,影响梯度。多头注意力就是把表示拆成多个子空间并行计算,最后再拼接,能从不同角度学习依赖关系。位置编码是因为 Attention 本身不包含顺序信息,所以需要显式加入位置信息。经典做法是正余弦位置编码:
现在也常用相对位置编码和 RoPE。梯度消失和梯度爆炸的解决方案包括:残差连接、LayerNorm、合理初始化、梯度裁剪、学习率预热、使用 AdamW、混合精度稳定训练。Transformer 训练稳定很大程度上依赖残差结构和归一化。
import torch
import math
def attention(Q, K, V):
scores = torch.matmul(Q, K.transpose(-2, -1)) / math.sqrt(Q.size(-1))
weights = torch.softmax(scores, dim=-1)
return torch.matmul(weights, V)
2. 微调方法对比:Full Fine-tuning、LoRA、Adapter、P-Tuning
答:Full Fine-tuning 是对所有参数进行更新,优点是表达能力完整、任务适配上限高,缺点是训练成本高、显存占用大、每个任务都要保存一套完整模型。LoRA 是冻结原模型参数,只在部分线性层注入低秩矩阵并训练增量参数。优点是训练快、显存小、易切任务,缺点是低秩容量有限。Adapter 是在每层中插入小型瓶颈模块,只训练这些新增层,思路和 LoRA 类似,但推理路径会变长。P-Tuning / Prompt Tuning 是学习一组连续提示向量,引导模型适配任务,本体参数通常冻结。优点是参数最省,缺点是对复杂生成和强领域迁移任务稳定性不一定够。如果是 AI Agent 场景,知识更新优先考虑 RAG,格式、风格、工具调用习惯适配再考虑 LoRA 或 Adapter。
from peft import LoraConfig, get_peft_model
lora_config = LoraConfig(
r=8,
lora_alpha=16,
target_modules=["q_proj", "v_proj"],
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM"
)
model = get_peft_model(base_model, lora_config)
3. 推理加速技术:量化、动态批处理、FlashAttention
答:量化是把模型权重甚至激活从 FP16、BF16 压缩到 INT8、INT4 等低比特格式,目标是降低显存占用和显存带宽压力,提高吞吐。动态批处理是在短时间窗口内把多个请求自动合并成 batch 一起推理,提高 GPU 利用率,适合 API 服务。FlashAttention 是对 Attention 计算和显存访问做融合优化,减少中间结果写回显存,在长上下文场景下能显著降低耗时和显存开销。线上通常不是单独用某一个,而是量化、KV Cache、动态批处理、流式输出一起上。
4. 如何优化大模型在长文本生成中的显存占用
答:长文本生成的显存主要消耗在模型权重、KV Cache 和中间激活,其中推理阶段增长最快的是 KV Cache。优化方式包括:使用 4bit/8bit 量化压缩权重;启用 FlashAttention;减少无效上下文;历史消息做摘要,不原样全拼;限制 max_new_tokens;使用分页式 KV Cache 管理;对简单任务使用小模型路由。在 Agent 场景中,历史记忆一般拆成最近对话、用户画像和任务状态,不会把全部历史对话都塞进 prompt。
def build_context(history, query, max_turns=6):
recent = history[-max_turns:]
prefix = "\n".join(f"{m['role']}: {m['content']}" for m in recent)
return prefix + f"\nuser: {query}"
5. RLHF 中奖励模型 RM 的训练数据如何构建
答:奖励模型训练数据通常是偏好排序数据,而不是简单问答。做法是针对同一个 prompt 生成多个候选回答,由人工标注出哪个更好,形成 chosen / rejected 样本对。标注维度一般包括帮助性、正确性、安全性、逻辑性、完整性、格式符合度。垂类场景还可以加入领域指标,比如音乐场景里的情感一致性、歌词自然度、押韵效果。数据来源可以是人工撰写、高温采样、多模型生成、人机协同筛选和线上日志回流。训练目标通常是让 chosen 的得分高于 rejected。
sample = {
"prompt": "写一段遗憾风格歌词",
"chosen": "地铁穿过旧站台,回忆慢一拍",
"rejected": "我真的很难过很难过很难过"
}
6. 设计一个 AI 歌词生成系统,如何提升创意性和押韵效果
答:系统可以拆成主题理解、创作规划、草稿生成、押韵改写和结果评估五步。先识别主题、风格、情绪、参考歌手和语言要求,再生成歌词大纲,确定主歌、副歌、桥段的情绪推进。创意性的提升可以通过高质量歌词语料、意象词库、多候选采样和新颖度排序来做,避免模板化表达。押韵效果可以做显式韵脚控制,先确定每一段的韵母,再在生成后做押韵检查和重写。中文歌词除了押韵,还要考虑节奏和可唱性,不能只追求尾字同韵。
YUN_MAP = {
"ang": ["窗", "光", "凉", "霜", "望"],
"ing": ["星", "听", "醒", "影", "停"]
}
def enforce_rhyme(lines, target="ang"):
words = YUN_MAP.get(target, [])
out = []
for i, line in enumerate(lines):
if not any(line.endswith(w) for w in words):
line = line.rstrip(",。!?,.!?") + words[i % len(words)]
out.append(line)
return out
7. 如何解决大模型 API 服务的响应延迟问题
答:延迟一般要拆成排队时间、预处理时间、首 token 时间和整体生成时间。优化手段包括:采用高性能推理框架如 vLLM;启用动态批处理;流式输出;减少 prompt 长度;缓存高频请求;使用量化、FlashAttention、KV Cache;把分类、改写、摘要等轻任务路由给小模型。如果是 Agent,还要减少无意义的链式思考和重复工具调用,避免一个请求内部串太多步骤。
from fastapi import FastAPI
from fastapi.responses import StreamingResponse
import asyncio
app = FastAPI()
async def gen():
for x in ["第", "一", "段", "输", "出"]:
yield x
await asyncio.sleep(0.05)
@app.get("/chat")
async def chat():
return StreamingResponse(gen(), media_type="text/plain")
8. AI Agent 中 Function Calling 怎么设计
答:Function Calling 的核心是让模型输出结构化调用意图和参数,而不是直接自由生成。每个工具都要定义清楚名字、用途、参数类型、必填字段和约束。模型返回参数后不能直接执行,要经过 JSON 解析、schema 校验、权限校验和业务校验。音乐场景里常见工具包括歌曲搜索、歌词检索、歌单生成、用户画像读取、
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏聚焦 AI-Agent 面试高频考点,内容来自真实面试与项目实践。系统覆盖大模型基础、Prompt工程、RAG、Agent架构、工具调用、多Agent协作、记忆机制、评测、安全与部署优化等核心模块。以“原理+场景+实战”为主线,提供高频题解析、标准答题思路与工程落地方法,帮助你高效查漏补缺.
查看5道真题和解析