精选500+道高频面试题,覆盖RAG检索增强、LangChain开发、Agent智能体、Prompt工程等核心知识点,助你斩获心仪Offer
RAG(Retrieval-Augmented Generation)即检索增强生成,是一种结合了信息检索和大语言模型的技术架构。主要流程包括:文档处理、向量化、存储、检索、增强和生成六个步骤。
RAG(Retrieval-Augmented Generation)即检索增强生成,是一种结合了信息检索和大语言模型的技术架构。
Rerank(重排序)是在初步检索后,使用更精确的模型对结果进行重新排序的技术。通过两阶段检索策略,先用高效向量检索召回Top-N,再用Rerank模型精排。
Rerank(重排序)是在初步检索后,使用更精确的模型对结果进行重新排序的技术。
from sentence_transformers import CrossEncoder
reranker = CrossEncoder('BAAI/bge-reranker-base')
scores = reranker.predict([(query, doc) for doc in retrieved_docs])
ranked_docs = [doc for _, doc in sorted(zip(scores, retrieved_docs), reverse=True)]
混合检索是结合多种检索方法的技术,常见组合是向量检索+关键词检索(BM25)。向量检索擅长语义相似度,BM25擅长关键词精确匹配,两者互补。
混合检索是结合多种检索方法的技术,常见组合是向量检索+关键词检索(BM25)。
# Reciprocal Rank Fusion
vector_results = vector_search(query, top_k=20)
bm25_results = bm25_search(query, top_k=20)
scores = {}
for docs, scores_vec in vector_results:
for rank, (doc, score) in enumerate(docs):
scores[doc] += 1 / (k + rank + 1) * score
final_results = sorted(scores.items(), key=lambda x: x[1], reverse=True)
RAG系统评估需要从检索指标和生成指标两个维度进行,常用的评估框架包括RAGAS、Trulens等。
from ragas import evaluate
from ragas.metrics import faithfulness, answer_relevancy, context_relevancy
result = evaluate(
dataset=test_dataset,
metrics=[faithfulness, answer_relevancy, context_relevancy]
)
分块是将长文档切分成较小的文本块,便于向量化和检索。常见策略包括固定长度分块、递归字符分块、语义分块等。
将长文档切分成较小的文本块,便于向量化和检索。
LangChain由Models、Prompts、Chains、Agents、Memory、Tools、Indexes、Callbacks八大核心组件构成。
LangChain由以下核心组件构成:
Chain按预定义顺序执行,适合固定流程;Agent由LLM自主决策下一步,灵活度高。固定问答用Chain,多工具协作用Agent。
| 场景 | 推荐 |
|---|---|
| 固定问答流程 | Chain |
| 需要多工具协作 | Agent |
| 简单LLM调用 | Chain |
| 复杂推理任务 | Agent |
| 需要对话记忆 | 两者皆可 |
Agent是能够感知环境、做出决策并执行动作的智能系统。核心能力包括规划、推理、工具使用、记忆和反思。
Agent是能够感知环境、做出决策并执行动作的智能系统。
ReAct = Reasoning + Acting,让Agent交替进行推理和动作执行,通过思考-行动-观察的循环来解决复杂问题。
ReAct = Reasoning + Acting,让Agent交替进行推理和动作执行。
from langchain.agents import AgentType, initialize_agent, Tool
from langchain_openai import ChatOpenAI
# 定义工具
tools = [
Tool(name="Search", func=search_func, description="搜索最新信息"),
Tool(name="Calculator", func=calc_func, description="数学计算")
]
# 初始化Agent
llm = ChatOpenAI(model="gpt-4", temperature=0)
agent = initialize_agent(
tools,
llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
verbose=True
)
# 执行任务
result = agent.run("刘德华出生于哪一年?今年多大?")
好的Prompt设计遵循CRISPE框架,包括设定角色、提供背景、明确指令、指定风格、要求实验五个步骤。
Attention通过计算Query与Key的相似度,得到Value的加权求和,实现对输入序列中相关部分的"关注"。
Attention通过计算Query与Key的相似度,得到Value的加权求和,实现"关注"输入序列中的相关部分。
Attention(Q, K, V) = softmax(QK^T / √d_k) × V
# Q(Query):当前位置的查询
# K(Key):所有位置的键
# V(Value):所有位置的值
SFT是监督微调,RLHF是人类反馈强化学习,LoRA是低秩适配。三种大模型微调方法各有适用场景和成本差异。
| 方法 | 适用场景 | 成本 |
|---|---|---|
| SFT | 有大量标注数据 | 高 |
| RLHF | 需要对齐人类偏好 | 很高 |
| LoRA | 资源有限,快速微调 | 低 |