搜狐畅游一面
ai算法实习生
2026.03.04,下午14:00,一面,线上,1h左右,都开摄像头了
1.自我介绍
2.多策略微调这个项目是什么类型的?
在 910B3 服务器上微调Qwen-3-8B 模型,使用全量微调、lora 微调和 freeze 微调三个策略做对比,是自己为了学习模型微调自主开展的项目。
3.这个项目最终成果和目的是什么?
目的是提升模型在中文语义理解方面的能力,最终用中文逻辑推理、中文语理解、知识相关三个数据集完成了测试。
4.可以举例说一下中文语言理解的实现过程吗?
选用中文逻辑推理、中文语理解、知识方面的三个数据集,基于Qwen-3-8B 模型用三种微调策略训练后,用这三个数据集对模型进行中文语义理解能力的测试。
5.这三类微调是用的怎样一个框架来做的呢?
使用的是 LLaMafactory 框架。
6.全量微调、lora 微调、freeze 微调三者有什么差别?
全量微调是对预训练大模型的所有参数进行更新;freeze 微调是冻结模型的最后两层,微调其他层的参数;Lora 微调是引入两个低秩矩阵,训练时只微调这两个矩阵,推理时将其与原始权重矩阵合并。
7.这三种微调方法一般怎么用,在什么时候用哪一种?
时间紧凑时用 Lora 微调,因为其速度是三者中最快的;想要较好的训练效果用全量微调,理论上其效果更好,但训练速度相对较慢。
8.Qwen-3-8B 模型的结构有了解吗?
千问系列模型使用 GQA 分组查询注意力机制,千问 3 增加了深度思考模式和 QKnome,不过 QKnome 的具体作用记不清了。
9.8B 和 235B 模型有什么区别,参数量大小是怎么做到不一样的?
核心区别是参数量,8B 参数量少,235B 参数量大;参数量不同的原因是 235B 的训练数据集更大、训练轮数更多、模型层数也更多,不过没有仔细了解过具体原理。
10.实习的两个项目是怎么和同事协作的,是自己负责一块吗?
是自己独立负责其中一块工作。
11.第一个实习项目(自然语言分析查询系统)的具体任务是什么?
给客户开发本地化的自然语言分析查询系统,用户上传 Excel 或 CSV 文件,系统能自动识别表格内容,完成销售额总额等数值计算,也能实现部分数据可视化。
12.如果指定具体指标,要最近 12 个月每个月的求和、平均值等计算,该怎么实现?
调用本地化部署的Qwen3-Coder-30B-A3B模型,让模型在内部编写 SQL 或 Python 数字计算类代码,在本地完成计算后将结果返回给用户,绘制图表时模型会编写 matplotlib 代码实现。
13.有没有考虑过用户上传脏数据的数据清洗问题,具体怎么做到的?
首先用 Pandas 读取表格转化为 DataFrame,让系统自行判断缺失数据,将缺失数据的整行删除;对于异常值,若某一行要求是数值类型却出现非数值内容,就判定为异常值并做相应处理。
14.是否可以设计 agent 系统让大模型自己做各类数据清洗?
可行,可以借助另一个大模型先分析表格结构,判断异常值位置,再通过提示词引导大模型完成数据清洗。
15.第二个实习项目(机场 RAG 智能问答客服)为什么针对机场,是不是客服系统?
因为系统使用的是机场的航班类数据,本质是 RAG 智能问答客服系统,所以被称作机场系统。
16.为什么写的是多模态 RG,数据是多模态的吗?
数据本身不是多模态的,但系统要实现图文问答和语音问答的多模态交互功能。
17.可以举例说明这个 RAG 智能问答客服的输入、查询和输出过程吗?
输入比如 “某年某月从长沙到某地方的航班有哪些”,系统数据库存储有机场航站楼、航班、机场巴士时刻等信息,最终输出会根据用户输入的问题返回对应的答案。
18.在 RAG 向量数据库管理中是怎么做索引的?
使用 postgresql 里的 PGvactor 插件实现数据向量化并存储,检索时采用混合检索策略,将 BM25 算法的关键词检索和余弦相似度的语义检索结合。
19.PDF 文档是怎么变成向量的,几十页的长文档也能直接转吗?
先读取文档,长文档会先做文本分块,用 python 自带的 recursive text split ,按固定长度 1000、重叠 100 分块;再用Qwen-3-Embedding-8B 模型将分块后的文本转化为嵌入向量,存入向量数据库。
20.混合检索后为什么要用重排序?
使用Qwen3-Reranker-8B 模型进行重排序,对混合检索的初步候选文档做二次筛选,纠正混合检索的性能不足,提升检索精度。
21.有没有可能混合检索足够好不用重排序,或直接走重排序就行,为什么要检索加重排序?(这里有些不知如何回答)
肯定不能只使用重排序模型,单靠重排序无法筛选出准确内容,检索步骤是必须的;暂时没有对比过加与不加重排序的性能差异,但重排序能优化检索结果。
22.举例说明检索和重排序的输入输出分别是什么?
检索输入是用户的问题,输出是用户问题和检索到的内容,结合提示词后给到大语言模型;重排序输入是混合检索得到的用户问题和检索内容,输出是用户问题和重排序后的精准筛选结果。
23.动态滑动窗口装人记忆具体是怎么做的?
实现了三轮对话记忆,编写了一个类,设置存储池保存用户对话内容和模型输出结果,下一轮对话时将上一轮的问题和回答一并传入模型,超过三轮则将历史内容全部删除。
24.OCR 问答的输入是怎样的?
用户输入图片,系统先将图片内容通过 OCR 转换成文本,再结合用户输入框的文本作为最终输入。
25.若输入是游戏描述文本 + 游戏截图,如何从库里的图片 / 文字中找出相似游戏?
因图片可能含文本或不含,不能仅用 OCR,需用视觉语言模型(VLM)解析图片,再让 VLM 模型在 RAG 系统的数据库中进行比对,找出相似游戏。
26.面对游戏评论分析的开放问题,输入是大量无预设类别的游戏评论,如何输出评论类别及各类型评价情况总结?
用大参数量的 LLM 模型提取评论中的关键信息并存入存储池;将存储池中相似的关键信息归为一类,抽取对应类别的评分;单独的、无相似项的关键信息则单独列为一类。
27.存储游戏评论关键信息和评分的存储池,设计什么数据结构合适?
设计成字典格式,包含用户关注的内容、对应的评分等核心字段。
28.如何从新发布游戏的各类数据中找出有潜力、有价值的游戏,怎么定义有潜力的游戏?
有潜力的游戏可从下载量、销量、每月流水、玩家热度、宣传力度这几个维度判断,这些维度的数据表现好则说明游戏有潜力。
29.对 Agent 设计有什么了解,Agent 是怎么回事、怎么做开发、有哪些类型?
知道 Agent 是智能体,目前接触得不是很多,但后续可以学习相关内容。
30.多模态机系统的用途是什么,给谁用?
具体用途和使用对象不清楚,该系统是开发后私有化部署到客户服务器的。
31.这套系统开发完是提供 API 还是其他形式,为什么提到 Fast API?
系统是私有化部署到客户服务器,供客户自行调整;Fast API 是用来搭建系统后端的,前端使用 HTML 等技术开发。
32.大模型输入 token 量已支持几十万 / 上百万,为什么还要从库里挑出游戏重点资料,直接给所有游戏内容让大模型自己找不行吗?
理论上可以让大模型自己找,但提供重点内容能节约时间和 token 成本,提升大模型的推理效率;大模型能从重点内容中更快筛选出用户需要的信息并生成结果。
33.从原理上说,给大模型游戏重点信息(1 万 token)和所有游戏信息(几十万 token),生成内容的效果有什么差别?
效果有明显差别,1 万 token 的重点信息生成效果更好,几十万 token 的海量信息易让生成结果出现模糊情况;即便大模型有注意力机制,海量数据中易出现信息重叠(如相似游戏名),导致大模型混淆内容、返回错误答案。
34.VLM中的 V 是什么意思,怎么做到融入视觉能力的?
V 是视觉(Vision)的意思;VLM 中使用 VIT 视觉编码器,将图片切成图片 token 并排成一列,传入 Transformer 编码器,借助编码器的注意力机制让模型感知图片重要信息、抑制次要信息,最终实现视觉能力的融入。
35.Dify 具体是怎么用的?
将 Dify 部署到客户的服务器上,用 docker compose 进行部署;部署后有专属界面,可在界面中创建知识库、上传文件,还能搭建工作流,比如连接输入模块和嵌入模块。
36.Dify 自带知识库和 RAG 机制,为什么还要加 RAGflow?
RAGflow 也是部署到客户服务器的项目,和 Dify 一样,都是给客户做的私有化部署小 demo,属于实习中的其他工作内容。
37.觉得 RAG 有什么不足,后续可以怎么改进?
自己开发的 RAG 系统用的是固定长度分块,这是可改进的点;可以采用语义分块,先将文本拆成句子,用余弦相似度判断句子间的相似度,低于阈值则截断,高于阈值则合并,同时设置长度限制,超出则重新分块后再嵌入。
38.面对无现成结构化数据的复杂条件查询(如游戏装备适配角色、克制关系等),只有大量文本,该如何完成查询并提升准确性?
先对文本做结构化提取,比如提取出角色、标注角色对应的技能,将信息整理成规范的结构化内容;再把结构化后的内容嵌入向量数据库,后续进行检索时效果会更好。
39.对知识图谱的实体、关系等概念有什么了解,这和上述的结构化提取是否类似?
了解过知识图谱的基本概念,知道其由实体和关系构成并连线,之前在 B 站看过中医药问答的知识图谱项目,但具体细节记不清了。
40.用 docker compose 部署 Dify 的具体步骤是什么?
首先用 git clone 把 Dify 整个项目克隆下来,进入对应的项目目录,然后直接执行 docker compose up -d 命令启动即可;不清楚 docker compose 内部的具体原理。
41.Docker 是什么概念,和在电脑上直接启动程序有什么区别?
Docker 是容器化技术,能将应用和运行环境容器化启动,与本机系统隔离;在 Docker 创建的容器内的开发、运行环境,和服务器本地的环境是相互隔开的。
42.开发时使用的是什么操作系统和开发环境?
实习公司主要使用 Linux 操作系统。
43.现在有很多 AI 编程工具,平时是怎么编程的,用的什么工具?
平时编程用 TRAE 和 Claude Code,会借助 AI 编程工具辅助开发。
44.AI 编程和人工手写代码有什么区别?
AI 编程效率比人工高很多,能大概率避免语法和逻辑错误;开发小型项目时 AI 编程速度优势明显;但开发大型企业级项目,需要人工主导,结合 AI 编程一起完成。
45.有 10 个游戏,每个游戏有文本、图片、视频等多模态数据,如何对这些游戏做聚类,判断哪些游戏相似?
用聚类算法实现,核心是多维度判断相似度:文本层面用余弦相似度两两判断,高于阈值则判定为相似;图片层面,可先用 IOU 系数判断相交程度,更优的方式是用 VLM 视觉语言模型识别图片内容并打分,高于预设分数则判定为相似;聚类时先选一个中心游戏,以文本和图片的相似度为依据,将满足条件的游戏归为一类,不满足的则作为新的中心点,继续和未归类的游戏比对。
46.个人定位是前端还是后端,为什么会涉及 CSS、HTML 等前端内容?
个人定位偏向后端;因为实习项目的前端界面也是自己开发的,开发时借助 AI 工具完成了前端代码的编写。
47.后端开发主要用的什么技术?
主要用 Python,其中 Fast API 用得比较多。
代码题如下(当时看到脑子已经蒙了):
请你实现一个名为 get_nested_value 的函数。它接受两个参数:
data: 一个可能多层嵌套的字典。
path: 一个用点(.)作为分隔符的字符串,表示访问路径。
函数的行为需要满足以下要求:
根据 path 字符串在 data 字典中进行查找。
如果路径完全有效,则返回最终的值。
如果在查找的任何一步,键不存在,或者路径还没走完但中间的值已经不是字典了(导致无法继续深入),函数都应该返回 None。
整个调用过程不应该抛出 KeyError 或 TypeError 等异常。”
# 假设我们有这样一个数据结构
data = {
'result': {
'details': {
'user_name': 'Alice',
'scores': [98, 85, 92]
},
'status': 200
}
}
# 成功的调用:
get_nested_value(data, 'result.details.user_name') # 应该返回 'Alice'
get_nested_value(data, 'result.status') # 应该返回 200
# 失败的调用 (键不存在):
get_nested_value(data, 'result.details.age') # 应该返回 None (因为 'age' 键不存在)
# 失败的调用 (中间值不是字典):
get_nested_value(data, 'result.details.user_name.first_name') # 应该返回 None (因为 'user_name' 的值 'Alice' 是字符串,无法继续查找 'first_name')
# 失败的调用 (处理空路径或无效输入):
get_nested_value(data, '') # 应该返回 None
get_nested_value({}, 'a.b') # 应该返回 None
反问:公司的主要业务
基于游戏的各类多模态数据,建立游戏的知识库,并对游戏相关信息进行结构化的知识提取;
将上述结构化的数据,通过 RAG(检索增强生成)或模型训练的方式,为团队开发的各类 Agent(智能体)提供服务,而这些 Agent 会应用在游戏的设计、开发等各个环节中。
感受:代码题第一次遇见的不是算法,只写了个大概,没有运行出来,肯定是寄了

