最近在梳理 AI 方向的学习路径时,发现很多人把大模型、智能体、数据处理分开来学,结果到了真正做项目的时候,要么模型调不通,要么 Agent 跑起来没有数据支撑。AI、Agent、Data 这三块内容其实是一条完整的技术链路:数据是燃料,模型是引擎,智能体是执行者。这篇文章会围绕这条主线展开,整理一份适合初学到进阶的系统学习路线,同时把平时面试中常见的典型问题做一个分类梳理,帮助你既能看懂方向,也能直接用在项目准备和面试复习中。
1. 背景与核心概念
1.1 为什么 AI x Agent x Data 成了热门方向
过去几年,大语言模型(LLM)解决了“机器能不能理解自然语言”的问题,但单靠模型本身,能做的事情有限。模型只能根据训练数据和输入的上下文生成回答,无法主动获取外部信息,也无法操作真实世界的系统。于是 Agent(智能体)成了新的技术焦点,它让模型具备感知、规划、调用工具、执行任务的能力。
与此同时,Agent 再聪明也需要数据支撑。无论是 RAG 增强检索、知识库问答,还是业务数据的分析洞察,都离不开数据工程。没有高质量的数据,模型和 Agent 就像没有原料的工厂,效果一定打折。这三者组合起来,正好对应企业在落地 AI 应用时的完整流程:数据接入、模型推理、智能决策与执行。
1.2 AI、Agent、Data 三者的关系
AI 是基础能力,包括传统机器学习、深度学习,以及当下最受关注的大语言模型。大模型擅长理解语义、生成文本、代码和结构化内容,但存在幻觉、知识时效性不足、无法调用外部系统等问题。
Agent 是 AI 能力的执行载体。一个标准 Agent 通常包含大模型作为“大脑”,通过规划模块把任务拆解成步骤,通过工具调用模块执行搜索、计算、操作数据库等行为,并使用记忆模块保存上下文。常见的架构有 ReAct、Plan-and-Execute、Multi-Agent 协作等。
Data 是整个体系的地基。数据决定了模型能力的上限,也决定了 Agent 对业务场景的适配程度。关键技术包括数据清洗、向量化、索引构建、RAG 检索、数据质量管理等。没有数据,Agent 只能泛泛而谈;有了高质量数据,Agent 才能回答得准、执行得对。
1.3 适合哪些读者
这篇路线和面试分析适合以下几类人:
- 刚接触 AI,想系统了解大模型、Agent、数据工程关系的学习者;
- 正在准备 AI 应用开发、大模型工程、Agent 开发岗位面试的开发者;
- 已经在做业务系统,想引入大模型和智能体能力的技术人员;
- 需要规划团队技术方向,想把 AI x Agent x Data 落地到项目中的架构师。
学完这篇文章,你至少能理清学习顺序、知道每个阶段要掌握什么技术,并且能回答面试中常见的核心问题。
2. 学习路线总览
在给出细节之前,先看整体路线。我建议把学习分为四个阶段,每个阶段有明确目标和产出。
| 阶段 | 学习目标 | 核心内容 | 阶段性产出 |
|---|---|---|---|
| 第一阶段 | AI 基础与大模型原理 | Python、机器学习基础、Transformer、Prompt 工程 | 能独立调用大模型 API 完成对话应用 |
| 第二阶段 | Agent 开发入门 | 函数调用、ReAct 模式、LangChain / 自研 Agent | 跑通一个能调用工具完成任务的 Agent |
| 第三阶段 | Data 工程与知识库 | 数据清洗、向量化、RAG、评估体系 | 完成一个基于本地知识库的问答系统 |
| 第四阶段 | AI x Agent x Data 融合实战 | 复杂业务场景、多智能体、生产级部署 | 完成一个综合项目并有可演示效果 |
这个路线的核心思路是:先让模型“能对话”,再让模型“能行动”,最后让模型“有依据”。顺序不能乱,因为每一层都依赖前一层的知识。
2.1 第一阶段:AI 基础与大模型原理
第一阶段的目标不是从零推导数学公式,而是建立正确的心智模型。你需要理解大模型的工作原理,包括 Token、上下文窗口、温度参数、嵌入(Embedding)等概念。
推荐学习内容包括:
- Python 基础和数据处理库(NumPy、Pandas),能写脚本处理数据;
- 深度学习基础概念,如神经网络、反向传播,不做数学推导也能理解大致流程;
- Transformer 结构的基本原理,重点理解自注意力机制;
- 主流大模型 API 的使用,例如 OpenAI、Claude、国内大模型等,学会写 Prompt、处理流式输出;
- Prompt 工程基础,包括角色设定、Few-shot、Chain-of-Thought。
这个阶段建议不要纠结于训练自己的模型,先把 API 用熟、把交互体验调好。
2.2 第二阶段:Agent 开发入门
Agent 的本质是“模型 + 工具 + 执行循环”。当你已经熟悉模型 API 之后,下一步就是让模型学会调用工具。
需要学习的关键内容:
- Function Calling(函数调用):模型根据用户指令输出结构化参数,程序解析后调用真实函数;
- ReAct(Reasoning + Acting)模式:模型交替进行思考、行动、观察,直到完成任务;
- 工具的注册与调度:如何定义工具 Schema,如何让模型选择工具;
- 记忆与多轮对话:短期记忆、长期记忆、滑动窗口、向量记忆;
- 主流框架的使用与原理:LangChain、LlamaIndex、AutoGen、自研 Agent 循环。
这个阶段的重点不是“会用某个框架”,而是理解 Agent 的运行机制。框架只是封装了循环逻辑,真正要掌握的是当模型调用工具出错、上下文过长、任务被拆解失败时,程序应该如何应对。
2.3 第三阶段:Data 工程与知识库
Agent 解决了“会做”的问题,Data 解决“知道什么”的问题。这一阶段要围绕数据处理和检索增强展开。
核心技能包括:
- 数据采集与清洗:从 PDF、网页、数据库、API 中获取数据,进行格式转换和去重;
- 文本切分(Chunking):按章节、段落、语义切分文本,控制块大小和重叠度;
- 向量化(Embedding):使用 Embedding 模型把文本转成向量;
- 向量数据库选型:如 Chroma、FAISS、Milvus、Qdrant,理解相似度检索的底层逻辑;
- RAG 流水线:建立索引、查询改写、检索、重排、生成;
- 评估体系:回答准确性、检索命中率、幻觉率、响应时延。
这个阶段容易踩坑的地方是“只看检索结果不看生成质量”。RAG 最终输出的是生成结果,检索只是中间步骤。你需要一套评估方法,否则很难判断系统改得好不好。
2.4 第四阶段:AI x Agent x Data 融合实战
前三个阶段是单个点上的学习,第四阶段要把它们串起来。
你需要自己设计一个完整项目,例如:
- 企业内部知识库问答机器人;
- 数据分析 Agent:用户用自然语言提问,Agent 自动写 SQL、查库、可视化;
- 个性化学习助手:根据用户行为数据,调用外部工具学习路径推荐;
- 多智能体协作系统:一个 Agent 负责拆解任务,另一个负责检索,另一个负责生成最终结果。
在这个阶段,除了技术实现,还要考虑工程化问题:成本控制、限流、缓存、日志追踪、权限管理、模型切换、灰度发布等。
3. 核心技术栈拆解
3.1 LLM 的关键概念
学习 AI x Agent x Data,首先要清楚大模型的基础概念。
Token 是模型处理文本的最小单位。中文场景下一个字可能对应一个或多个 Token,Token 数量决定了 API 调用成本和上下文上限。上下文窗口是模型一次能“看到”的最大 Token 数,超过之后需要做截断或压缩。
温度(Temperature)是生成的随机性参数。低温适合翻译、代码生成等需要确定性结果的场景,高温适合创意写作。Top-p 同样控制生成多样性,通常会结合 Temperature 一起调整。
Embedding 是文本的向量表示。语义上相似的文本,向量之间的距离应该更近。RAG 系统的核心依赖就是 Embedding 的质量。不同 Embedding 模型的维度不同,例如常见的 768、1024、1536 维度,维度越高一般信息容量越大,但存储和计算成本也越高。
3.2 Prompt 工程与结构化输出
Prompt 工程是 AI 应用开发的基本功。一个好的 Prompt 能显著提升输出稳定性,减少幻觉。
系统提示词(System Prompt)通常用来设定角色、规则、输出格式。用户消息则是具体请求。在设计 Prompt 时,要注意以下几点:
- 明确角色和任务边界,避免模型既当顾问又当执行者;
- 输出格式尽量用 JSON 或 Markdown,方便程序解析;
- 使用 Few-shot 示例,让模型模仿输入输出模式;
- 对关键约束使用“必须/禁止/如果……那么……”等强指令;
- 复杂任务拆成多个步骤,而非一次提问。
结构化输出是 Agent 开发中的重点。调用函数接口时,模型需要返回符合格式的 JSON,例如工具名称、参数、参数类型。如果不做校验,模型偶尔会返回缺少字段的 JSON,程序一旦解析失败,整个 Agent 循环就会中断。
3.3 RAG 实现原理
RAG(Retrieval-Augmented Generation,检索增强生成)是目前解决大模型幻觉和知识时效性问题最主流的方式。
RAG 的基本流程是:
- 用户输入问题;
- 系统对问题进行改写或意图识别;
- 从向量库中检索相关内容;
- 把检索结果和原始问题拼接成 Prompt;
- 大模型基于检索内容生成回答。
RAG 的关键在检索环节。你必须先对文档做预处理,包括清洗、分段、向量化、索引构建。用户查询进来时,也要做同样的向量化,再到索引中找最相似的 Top-K 文本块。
实际项目中,RAG 的效果瓶颈往往不在模型,而在数据质量。比如文档切分太碎导致语义不完整,向量化模型和查询场景不匹配,检索结果没有按相关性重排等。
3.4 Agent 框架与工具调用
Agent 的核心能力之一是工具调用。一个工具描述通常包含工具名称、功能介绍、输入参数类型和含义。模型通过函数调用机制输出一个结构化的调用请求,程序执行对应函数后把结果回传给模型,模型再生成最终回答。
工具调用设计要注意以下几点:
- 工具描述要清晰,模型才能准确选择;
- 参数校验必须由程序完成,不能依赖模型输出;
- 工具执行可能超时或报错,要有异常处理机制;
- 工具权限必须最小化,避免 Agent 被提示词注入后操作敏感系统。
主流 Agent 框架,如 LangChain、AutoGen,本质上是把“模型对话”和“工具执行”粘合起来。它们提供了现成的 Agent 循环、内存管理、工具注册机制。但在生产环境中,很多团队会基于原生 Function Calling 自研轻量 Agent,这样更容易控制成本、追踪日志和扩展功能。
3.5 记忆、规划与多智能体
Agent 的“记忆”分为两层:
短期记忆保存在对话上下文中,用来维持多轮对话的连贯性。当上下文超过窗口限制时,可以截断早期消息或做摘要压缩。
长期记忆通常存放在向量数据库中,Agent 需要时通过检索把相关历史记忆加载到上下文中。例如,用户偏好、历史任务记录、业务规则等都可以作为长期记忆。
规划能力是 Agent 智能程度的体现。简单的 Agent 只执行单步任务,复杂的 Agent 需要先把任务拆解为子任务,再逐个执行。ReAct 是一种常用的规划模式,模型按“思考 -> 行动 -> 观察”循环推进。多智能体系统则把不同职责分配给不同的 Agent,如 Planner、Retriever、Writer、Reviewer,它们之间通过消息协作。
多智能体不是银弹,它的主要问题是协调成本高、Token 消耗大、错误传播快。小项目优先用单 Agent,必要时再拆成多 Agent。
3.6 Data 工程与数据质量
数据工程是 AI 项目最容易低估的一环。大模型时代的数据工程与传统数据仓库有很大不同,核心变化在于:
- 处理对象从结构化表扩展到文本、图片、音视频等非结构化数据;
- 处理目标从 BI 报表扩展为向量索引和知识图谱;
- 数据评估标准从准确性、完整性扩展为相关性、时效性、一致性。
常见的数据问题包括:PDF 表格解析错误、网页标签文本噪声、重复文档、切分后上下文断裂、敏感信息未脱敏等。在做知识库项目时,建议先建立数据评估清单,明确数据来源、更新频率、格式标准、清洗规则。
4. 完整实战案例:构建一个最小可运行的 RAG Agent
前面讲的都是方法论,下面用一个具体案例把 AI、Agent、Data 串起来。这个项目会构建一个基于本地知识库的问答 Agent,用户提问后,系统先从知识库中检索相关内容,再调用大模型生成回答。
为了让案例便于独立运行,模型调用部分我们用模拟接口演示流程,你可以按需替换为真实的大模型 API。
4.1 创建项目结构
先创建一个项目目录,命名为 rag_agent_demo,结构如下:
rag_agent_demo/ ├── data/ │ └── sample_knowledge.txt ├── src/ │ ├── __init__.py │ ├── embedder.py │ ├── retriever.py │ ├── llm.py │ └── agent.py ├── requirements.txt └── main.py创建目录和文件的命令:
mkdir -p rag_agent_demo/data rag_agent_demo/src cd rag_agent_demo4.2 准备依赖
requirements.txt 中只需要标准库和简单的第三方库。如果你要接真实向量库,可以再按需添加。
numpy>=1.24.0这里不锁定具体版本,因为不同项目环境差异较大。如果只跑本示例,numpy 不是必需的,但后面做向量相似度计算时会更方便。
4.3 准备知识库数据
data/sample_knowledge.txt 内容如下:
RAG(Retrieval-Augmented Generation)是一种检索增强生成技术,它结合信息检索与大语言模型,从外部知识库中检索相关内容,辅助模型生成更准确的回答。 Agent 是人工智能中的智能体概念,能够感知环境、进行规划决策,并通过调用工具执行任务。 向量数据库是一种存储高维向量的数据库,支持相似度检索,常用的包括 Chroma、Milvus、Qdrant 和 FAISS。 Embedding 是将文本转换为向量的技术,相似语义的文本在向量空间中距离更近。 Prompt 工程是通过设计提示词来引导大模型输出的方法,常见的技巧包括角色设定、Few-shot 示例和链式思考。4.4 编写核心代码
先实现一个简单的 Embedder,这里用字符级 n-gram 模拟向量化,避免依赖大型模型:
文件路径:src/embedder.py
from typing import List class SimpleEmbedder: """基于字符 n-gram 的简单文本向量化实现。 真实项目中可替换为 OpenAI Embedding、SentenceTransformers 等模型。 """ def __init__(self, n: int = 3): self.n = n def vectorize(self, text: str) -> List[int]: """把文本转换为词频向量。""" ngrams = self._extract_ngrams(text) # 固定一个较大的向量空间,这里用哈希方式简化处理 vec = [0] * 256 for g in ngrams: index = hash(g) % 256 vec[index] += 1 return vec def _extract_ngrams(self, text: str) -> List[str]: text = text.lower().replace(" ", "") if len(text) <= self.n: return [text] if text else [] return [text[i:i + self.n] for i in range(len(text) - self.n + 1)]接着实现向量检索器:
文件路径:src/retriever.py
import math from typing import List, Tuple from src.embedder import SimpleEmbedder class VectorRetriever: def __init__(self, embedder: SimpleEmbedder): self.embedder = embedder self.chunks = [] self.chunk_vectors = [] def add_document(self, text: str, chunk_size: int = 50): """把文档按指定长度切块并向量化。""" # 简单按固定字符数切分,实际项目中建议按语义段落切分 for i in range(0, len(text), chunk_size): chunk = text[i:i + chunk_size] if chunk.strip(): self.chunks.append(chunk) self.chunk_vectors.append(self.embedder.vectorize(chunk)) def cosine_similarity(self, vec1: List[int], vec2: List[int]) -> float: dot = sum(a * b for a, b in zip(vec1, vec2)) norm1 = math.sqrt(sum(a * a for a in vec1)) norm2 = math.sqrt(sum(b * b for b in vec2)) if norm1 == 0 or norm2 == 0: return 0.0 return dot / (norm1 * norm2) def search(self, query: str, top_k: int = 2) -> List[Tuple[str, float]]: query_vec = self.embedder.vectorize(query) scored = [] for i, vec in enumerate(self.chunk_vectors): score = self.cosine_similarity(query_vec, vec) scored.append((self.chunks[i], score)) scored.sort(key=lambda x: x[1], reverse=True) return scored[:top_k]然后写一个 LLM 调用模块。这里先用模拟函数演示流程,真实项目中你只需要替换为对应的大模型 SDK:
文件路径:src/llm.py
import json def call_llm(system_prompt: str, user_prompt: str) -> str: """模拟大模型生成接口。 真实项目中替换为: ```python import openai resp = openai.ChatCompletion.create( model="gpt-4", messages=[ {"role": "system", "content": system_prompt}, {"role": "user", "content": user_prompt} ] ) return resp["choices"][0]["message"]["content"] ``` 这里为了演示流程,返回一个模板化的回答。 """ return "基于检索内容,我为你生成了一份回答。这里是模拟输出,接入真实大模型后会生成更准确的答案。"最后写 Agent 主逻辑。Agent 负责把检索结果和用户问题拼装成 Prompt,并调用大模型生成答案:
文件路径:src/agent.py
import json from src.retriever import VectorRetriever from src.llm import call_llm class RAGAgent: def __init__(self, retriever: VectorRetriever): self.retriever = retriever def run(self, question: str) -> str: # 1. 检索 retrieved_chunks = self.retriever.search(question, top_k=2) if not retrieved_chunks: return "没有检索到相关知识,请换个问题试试。" context = "\n".join([chunk for chunk, score in retrieved_chunks]) # 2. 构造 Prompt system_prompt = "你是一个基于检索知识回答问题的助手。只能依据给定材料回答,如果材料中找不到答案,请直接说明。" user_prompt = f"根据以下材料回答问题:\n\n【材料】\n{context}\n\n【问题】\n{question}" # 3. 调用大模型 result = call_llm(system_prompt, user_prompt) # 4. 返回附带引用,便于排查 return { "answer": result, "retrieved_chunks": retrieved_chunks, "context": context, }主程序 main.py:
文件路径:main.py
from src.embedder import SimpleEmbedder from src.retriever import VectorRetriever from src.agent import RAGAgent def main(): # 1. 加载数据 with open("data/sample_knowledge.txt", "r", encoding="utf-8") as f: text = f.read() # 2. 构建索引 embedder = SimpleEmbedder(n=3) retriever = VectorRetriever(embedder) retriever.add_document(text, chunk_size=50) print(f"文档切块数量:{len(retriever.chunks)}") # 3. 创建 Agent agent = RAGAgent(retriever) # 4. 提问 questions = ["RAG 是什么?", "向量数据库有哪些?", "什么是 Agent?"] for q in questions: print(f"\n问题:{q}") result = agent.run(q) print(f"回答:{result['answer']}") print("检索引用:") for chunk, score in result["retrieved_chunks"]: print(f" [{score:.4f}] {chunk}") if __name__ == "__main__": main()4.5 运行与验证
在项目根目录执行:
python main.py预期输出类似于:
文档切块数量:5 问题:RAG 是什么? 回答:基于检索内容,我为你生成了一份回答。这里是模拟输出,接入真实大模型后会生成更准确的答案。 检索引用: [0.1234] RAG(Retrieval-Augmented Generation)是一种检索增强生成技术,它结合信息检索与大语言模型,从外部知识库中检索相关内容,辅助模型生成更准确的回答。 [0.0987] Prompt 工程是通过设计提示词来引导大模型输出的方法,常见的技巧包括角色设定、Few-shot 示例和链式思考。 问题:向量数据库有哪些? 回答:基于检索内容,我为你生成了一份回答。这里是模拟输出,接入真实大模型后会生成更准确的答案。 检索引用: [0.1123] 向量数据库是一种存储高维向量的数据库,支持相似度检索,常用的包括 Chroma、Milvus、Qdrant 和 FAISS。这个案例虽然简单,但已经包含了 RAG Agent 的完整链路:数据导入、切分、向量化、检索、Prompt 组装、模型生成。把其中的模拟 LLM 替换成真实大模型接口,把 SimpleEmbedder 替换成真实 Embedding 模型,就能变成可用的系统。
5. 典型面试问题分析
AI x Agent x Data 方向的面试通常分为四个模块。下面按模块列出典型问题,并给出解答思路。
5.1 AI 基础类
这类问题主要考察你对大模型的理解是否扎实。
面试题 1:谈谈你对大模型幻觉的理解,有哪些缓解方案?
幻觉指模型生成的内容看似合理但与事实不符。产生原因包括训练数据不完整、模型为了迎合用户而编造内容、Prompt 引导不足等。
缓解方案:
- 使用 RAG 引入外部知识,限制模型只依据检索内容回答;
- 在 Prompt 中明确要求“不知道就回答不知道”;
- 对输出结果进行二次校验,比如用另一个模型评估;
- 使用低温参数减少随机性;
- 对高风险场景增加人工审核环节。
面试题 2:大模型的上下文窗口有限,如何处理长文档?
常见思路包括:
- 文档切分成多个 chunk,只检索与问题相关部分(RAG);
- 对长对话做摘要压缩;
- 使用滑动窗口保留最近消息;
- 使用 MapReduce 模式,先对每个 chunk 单独处理,再汇总结果。
面试题 3:什么是 Embedding?为什么它能表示语义相似度?
Embedding 是把文本映射为稠密向量的过程。因为训练时模型学习到了词语之间的共现关系和语义联系,所以相似的语义在向量空间中位置接近。计算相似度时常用余弦相似度。
5.2 Agent 开发类
Agent 是当前面试的高频模块,重点考察你对 Agent 运行机制和框架原理的理解。
面试题 1:ReAct 模式是什么?它解决了什么问题?
ReAct 是 Reasoning(推理)和 Acting(行动)的结合。模型在每一步先输出 Thought(推理),再决定是否调用工具,最后观察工具结果并继续推理。它解决了单纯大模型不能获取实时信息、不能执行操作的问题,同时让推理过程更可解释、可追踪。
面试题 2:Function Calling 的原理是什么?如何保证工具参数正确?
Function Calling 是模型输出与程序交互的桥梁。模型根据用户请求生成一个包含工具名称和参数的 JSON,程序解析后执行函数。要保证参数正确,可以这样设计:
- 每个工具提供详细的 JSON Schema,包括参数类型、必填项和说明;
- 程序端做严格的参数校验和类型转换;
- 参数缺失时让模型补充,而不是直接报错;
- 工具执行结果返回给模型时附带执行状态。
面试题 3:Agent 如何管理多轮对话的记忆?
短期记忆直接使用上下文消息,超过窗口时做截断或摘要。长期记忆通过向量库存储,Agent 在需要时检索相关历史。总结型记忆是另一种方式:每轮对话结束后生成摘要存入记忆库,后续对话直接加载摘要。
面试题 4:Agent 陷入死循环怎么办?
Agent 可能因为工具调用失败、模型反复选择同一动作而陷入循环。解决方案包括:
- 设置最大迭代步数;
- 对工具调用次数做限制;
- 记录上次动作,如果模型重复选择相同动作则干预;
- 增加异常检测,当工具持续报错时主动停止并返回兜底回答。
5.3 Data 与 RAG 类
数据方向和 RAG 的面试题,通常围绕检索质量和数据链路展开。
面试题 1:RAG 中检索效果不好,通常从哪些方面优化?
检索效果不好可能有几个原因:
- 切分不合理:chunk 太大导致噪声多,太小导致语义不完整;
- Embedding 模型不匹配:代码、中文、专业领域要选用合适的模型;
- 没有重排:Top-K 检索结果可能相关度排序不准;
- 查询不清晰:用户问题太模糊,需要先做查询改写或意图识别;
- 数据质量差:文档重复、格式错乱、过时信息多。
优化路径:先检查数据质量,再调节切分参数,然后比较不同 Embedding 模型,最后引入重排序模型。
面试题 2:向量检索和关键词检索各有什么优缺点?如何结合?
向量检索擅长语义匹配,对同义改写、模糊表达效果好,但需要合适的数据量和 Embedding 模型。关键词检索(如 BM25)精度可控、解释性强,但对语义理解深度有限。
常见方案是混合检索:关键词检索和向量检索并行执行,再用 RRF(Reciprocal Rank Fusion)合并排序结果。这样做在不同领域和查询类型下更稳定。
面试题 3:如何评估一个 RAG 系统的效果?
评估分为两部分:
- 检索质量:召回率、命中率、相关性排序;
- 生成质量:忠实度(是否忠实于检索内容)、准确性、完整性、可读性。
在实际项目中,可以构建一个小规模测试集,每条数据包含问题、标准答案、参考文档。每次修改系统后跑一遍测试集,观察指标变化。
5.4 系统设计与工程化类
这类问题面向有经验开发者,考察综合设计能力。
面试题 1:设计一个企业知识库问答系统,你会怎么设计?
回答时需要覆盖完整链路:
- 数据层:支持多种格式文档导入,做解析、清洗、切分、向量化;
- 存储层:使用 PostgreSQL 存元数据,向量库存 Embedding;
- 检索层:做混合检索 + 重排;
- 生成层:大模型 + Prompt 模板 + 引用溯源;
- 权限层:文档级权限控制,避免越权访问;
- 运营层:反馈收集、日志记录、模型版本管理。
还要说明方案的取舍:为什么用 RAG 而不是微调?RAG 更适合知识高频更新的场景,成本低、可解释性强;微调适合改变模型风格和固定任务格式,但对知识更新不友好。
面试题 2:Agent 生产环境部署要注意哪些问题?
关键点包括:
- 成本控制:限制模型调用次数,使用缓存和模型路由;
- 安全性:工具权限最小化,防提示词注入;
- 可观测性:记录每一步的思考、工具调用和结果,便于排查;
- 限流和降级:模型 API 不稳定时能切换到备用模型或返回兜底话术;
- 数据隐私:用户输入不能随意传给第三方模型,敏感数据要做脱敏。
6. 常见问题与排查思路
学习这套体系时,新手容易遇到几类问题。下面按现象列出排查思路。
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| Agent 不调用工具 | 工具描述不清晰,或 Prompt 没有说明何时用工具 | 检查工具 Schema,加入 Few-shot 示例,明确工具使用条件 |
| 工具参数解析失败 | 模型返回 JSON 不完整或字段类型不对 | 程序做参数校验,使用更严格的输出格式约束 |
| RAG 回答与资料无关 | 检索结果相关性差 | 检查切分粒度、Embedding 模型、是否加入重排 |
| 检索结果重复或缺失 | 文档去重不充分,切分后信息被割裂 | 增加去重逻辑,调整切分重叠度 |
| 多轮对话后效果变差 | 上下文过长导致关键信息被截断 | 做摘要压缩或使用长期记忆检索 |
| 模型调用超时 | API 响应慢,无重试机制 | 设置超时和指数退避重试,提供熔断降级 |
| 成本快速上升 | 每次请求都带大量上下文 | 裁剪历史消息,减少重复检索,增加缓存 |
这里尤其要注意工具调用失败的排查流程:先看模型返回的原始输出,确认它是否生成工具调用;再看参数是否符合 Schema;最后看工具执行是否正常。大多数问题都出现在这三个环节的衔接处。
7. 最佳实践与工程建议
7.1 从简单方案开始,不要一开始就上多智能体
很多人在学习阶段就想着用 AutoGen 搭多智能体系统,结果被对话卡死、Token 耗尽、结果不可控。建议先做单 Agent + 少量工具,确认链路跑通后再逐步扩展。多 Agent 协作带来的收益只有在任务足够复杂、子任务边界清晰时才能体现。
7.2 数据质量优先于模型技巧
在做 RAG 系统时,与其花大量时间调整 Prompt,不如先清洗数据。一个错误的事实进入知识库,再好的 Prompt 也无法输出正确答案。建议在项目初期就建立数据验证清单,包括格式校验、去重、敏感信息检查、更新机制。
7.3 日志和追踪是 Agent 系统工程的第一要务
Agent 的每一步都可能出错,没有日志几乎无法排查。建议在 Agent 循环中加入结构化日志,至少记录以下内容:
- 用户原始输入;
- 模型每次输出的思考内容和工具调用;
- 工具执行结果和执行耗时;
- 最终回答内容和引用来源。
一旦线上出了问题,这些日志能帮你快速定位是模型选择错误、工具执行错误还是检索质量问题。
7.4 对模型输出保持怀疑
大模型的输出具有随机性,同一 Prompt 在不同参数下可能产生不同结果。在面向用户的场景中,要对模型输出做边界约束:
- 高敏感操作必须经过人工确认;
- 金融、医疗等场景不能直接让 Agent 执行写操作;
- 对输出做敏感词过滤或合规检查。
7.5 建立离线评估闭环
不建议每次改完 Prompt 或检索逻辑就直接上生产。建议构建一个小规模离线测试集,包含典型问题、边界问题和错误案例。每次修改后,统一跑一遍评测,记录指标后再决定是否上线。这套流程能避免“改一个 bug 引出三个新问题”的尴尬。
7.6 关注成本与性能平衡
大模型 API 的调用成本不可忽视。实用建议:
- 简单任务用轻量模型,复杂任务用强模型;
- 对相同的问题使用语义缓存,命中缓存直接返回;
- 控制上下文 Token 数,不必要的内容不要塞进 Prompt;
- 批量任务优先通过异步队列处理。
8. 总结与下一步
这篇文章把 AI、Agent、Data 三个方向串成了完整的学习体系。学习顺序建议是:先掌握大模型基础调用的能力,再学习 Agent 的工具调用和任务执行机制,然后深入数据工程和 RAG 构建,最后做综合实战项目。配套的典型面试问题覆盖了大模型原理、Agent 运行机制、RAG 优化、系统设计几个高频模块,你可以对照自查,看哪些地方还有盲区。
下一步你可以做三件事:第一,把文中最小 RAG Agent 案例跑通,并替换成真实大模型接口,体验完整链路;第二,选一个自己熟悉的业务场景,设计一个单 Agent 应用,例如个人知识问答助手或数据分析助手;第三,整理一份自己的面试问答笔记,把容易卡壳的问题写成文字答案,而不只是理解概念。
如果准备了简历项目,建议把项目的痛点、方案选型、数据来源、评估方式和失败经验都写清楚。面试官真正想听的是你如何做技术决策,以及踩坑后的反思。
本篇文章作为技术路线和学习笔记,核心目标是帮你少走弯路。不用急着学完所有内容,按照自己的基础和实际项目需求,分阶段推进就好。