亚信科技 - 大模型开发一面

1. 个人介绍

2. 实习拷打

3. RAG 的优化,项目中 Agent 的流程

RAG 的核心链路是:文档处理 -> 建索引 -> 检索召回 -> 重排筛选 -> 上下文拼接 -> 大模型生成。它的优化也主要围绕这几步展开。

先说文档处理。原始文档不能直接粗暴切块,要先做清洗,比如去掉无效页眉页脚、目录、乱码、重复段落。然后做合理切分。切分太大,会带入噪声;切分太小,上下文会断。常见做法是按段落、标题层级、语义边界切 chunk,并适当设置 overlap。

再说检索阶段。RAG 不一定只用向量检索,通常会把 BM25、向量召回、关键词召回混合起来。向量召回解决语义相似,BM25 对精确术语命中更好,混合检索通常比单一路径稳。召回后最好加 rerank,因为向量检索返回的是“可能相关”,rerank 才是在更细粒度上排序。

然后是上下文拼接。不是把召回结果全塞给模型,而是要做截断、去重、排序、字段过滤,尽量把最有用的信息放前面。Prompt 里也要限制模型必须基于检索内容回答,如果找不到就明确说不知道,这样能减少幻觉。

常见优化点有这些:一是优化 chunk 切分策略;二是换更适合垂域的 embedding 模型;三是加入 rerank;四是做 query 改写,比如把用户问题标准化;五是多路召回融合;六是对高频问题做缓存;七是对答案做引用溯源。

Agent 的项目流程一般是:用户输入 -> 意图识别 -> 任务规划 -> 工具选择 -> 工具调用 -> 结果汇总 -> 模型生成最终回复。如果是简单单 Agent,可以由模型直接决定是否调用检索、数据库、搜索接口等工具。如果是复杂流程,前面还会加一个 Planner,把任务拆成几个子任务,再由 Executor 去执行。执行完之后把工具返回的结构化结果重新组织,再交给模型生成自然语言答案。

一个典型流程是:

用户提问后,系统先判断是闲聊、知识问答还是需要外部工具。如果是知识问答,就走 RAG;如果是查业务数据,就走数据库或 API 工具;如果问题复杂,就分步骤执行。最后把所有结果汇总成统一上下文,由大模型生成最终回答。

4. 数据处理

数据处理在大模型项目里非常关键,因为很多效果问题本质上不是模型不行,而是数据不干净、结构不合理。

常见流程包括:先采集和解析原始数据,比如 PDF、Word、网页、Excel、数据库记录;然后做清洗,去除空行、乱码、广告、模板性内容、重复内容;再做标准化,比如时间格式统一、字段名统一、中文全半角统一、标点清洗;如果是训练数据,还要做标注校验、去重、类别平衡、异常样本过滤;如果是 RAG 数据,则要做 chunk 切分、元数据补充、向量化入库。

Pandas 是最常用的工具之一,适合做表格清洗和统计。

import pandas as pd

df = pd.read_csv("data.csv")

# 去重
df = df.drop_duplicates()

# 去掉关键字段为空的数据
df = df.dropna(subset=["question", "answer"])

# 文本清洗
df["question"] = df["question"].str.strip()
df["answer"] = df["answer"].str.replace(r"\s+", " ", regex=True).str.strip()

print(df.head())

如果是文本数据,通常还会配合正则表达式做清洗,比如去特殊符号、编号、HTML 标签。

5. 正则表达式

正则表达式主要用于文本模式匹配和清洗,在 NLP 项目里很常见,尤其是做预处理、字段抽取、规则过滤的时候。它适合处理格式比较固定的内容,比如手机号、邮箱、日期、证件号、日志模板、标签内容等。

常见元字符有这些:

  • .:匹配任意字符,除了换行
  • \d:匹配数字
  • \w:匹配字母数字下划线
  • \s:匹配空白字符
  • *:前一个字符出现 0 次或多次
  • +:前一个字符出现 1 次或多次
  • ?:前一个字符出现 0 次或 1 次
  • []:字符集合
  • ():分组
  • ^:匹配开头
  • $:匹配结尾

Python 里一般用 re 模块。

import re


phone = re.findall(r"1[3-9]\d{9}", text)
email = re.findall(r"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}", text)

print(phone)
print(email)

正则的优点是快、直观、可控,缺点是泛化能力差,格式一变就容易失效。所以在实际项目里,正则更适合和模型方法结合使用,而不是完全替代模型。

6. NER

NER 就是命名实体识别,目标是从文本中识别人名、地名、组织机构名、时间、金额、疾病、药品等实体。它本质上是一个序列标注任务,也就是给句子里的每个 token 打标签。

传统方法包括 CRF、HMM;深度学习方法包括 BiLSTM-CRF、BERT-CRF;现在也常用大模型做指令抽取。如果追求稳定和结构化输出,BERT-CRF 这类监督方法仍然很常见;如果追求快速适配新领域,也可以用大模型配合 few-shot 或规则后处理。

NER 的难点主要在实体边界、实体歧义、长尾实体和嵌套实体。比如“北京大学医学部”到底整体算一个机构,还是“北京大学”和“医学部”分开标,这是边界问题。像“苹果”到底是水果还是公司,这是歧义问题。

7. 条件随机场

条件随机场,CRF,常用于序列标注任务,比如分词、词性标注、NER。它的作用不是单独提特征,而是在已有特征基础上,对标签序列做全局建模。

如果一个句子中每个位置都独立分类,模型可能输出不合理标签,比如一个位置是 I-PER,前面却不是 B-PER。CRF 的价值就在于它不仅看当前位置得分,还考虑标签转移得分,从而让整个标签序列

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

AI-Agent面试实战专栏 文章被收录于专栏

本专栏聚焦 AI-Agent 面试高频考点,内容来自真实面试与项目实践。系统覆盖大模型基础、Prompt工程、RAG、Agent架构、工具调用、多Agent协作、记忆机制、评测、安全与部署优化等核心模块。以“原理+场景+实战”为主线,提供高频题解析、标准答题思路与工程落地方法,帮助你高效查漏补缺.

全部评论

相关推荐

03-10 11:23
门头沟学院 Java
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务