大模型RAG前置基础阶段
大模型RAG前置基础阶段 终测试卷(含答案)
一、单选题(每题3分,共15分)
- Python 出现 IndentationError 报错根本原因是?( )
A. 代码语法写错了
B. Tab 和 空格缩进混用/缩进层级不一致
C. 变量未定义
D. 模块未安装 - requests 出现 nodename nor servname provided 代表?( )
A. 网络超时
B. DNS域名解析失败,地址不存在
C. 接口鉴权失败
D. 请求频率超限 - 以下哪个不属于向量数据库/向量检索库?( )
A. FAISS
B. Chroma
C. Milvus
D. Redis(普通KV) - 本地部署 Llama3 8B 想要显存最小、效果最稳,优先选择哪种量化?( )
A. FP16
B. Q4_K_M
C. INT2
D. 不量化 - asyncio.gather 的核心作用是?( )
A. 串行执行多个函数
B. 并发批量执行协程、统一收集返回结果
C. 提升代码可读性
D. 解决接口报错
二、简答题(每题6分,共30分) - 简单说明:Embedding 向量嵌入 的作用?为什么 RAG 必须用向量检索而不是关键词检索?
- 简述 Chroma / FAISS / Milvus 三者的定位和适用场景区别。
- 线上大模型API(通义千问/OpenAI)和 本地Llama3 部署,各自优缺点是什么?
- 本地跑 Llama3 最常见的 2 个报错问题是什么?对应的解决思路?
- 同步 requests 和 异步 aiohttp 调用大模型接口,核心区别是什么?什么场景用异步?
三、代码实操题(共35分) - 字典数据清洗(15分)
写一个函数,完成:过滤分数大于等于90的数据,只保留 id、content,最终返回新列表。
raw_data = [{“id”:1,”content”:”向量数据库”,”score”:91},{“id”:2,”content”:”测试文本”,”score”:60}] - 稳健版 requests 接口请求(20分)
需求:
1)POST 请求本地 ollama 接口:127.0.0.1:11434/api/chat
2)传入模型名 llama3:8b、用户提问
3)捕获超时、连接失败、异常状态码
4)打印模型返回的回答内容
四、场景架构题(20分)
你现在要做一个个人本地知识库问答项目(RAG): - 数据量:几百条文档、单机本地运行、不上云、不要复杂部署
- 模型:本地私有化大模型,不调用任何外网API
请你写出:
1)选用什么 向量库 + 什么大模型?
2)完整简易流程?
3)为什么不选 Milvus / 不选 FAISS?
参考答案
一、单选答案
1.B 2.B 3.D 4.B 5.B
二、简答标准答案(精简得分点)
- Embedding & 向量检索优势
Embedding 将文本转为高维数字向量,语义相似的文本向量距离更近。关键词只能匹配字面,向量能匹配语义、近义词、相似问句,是RAG检索的核心。 - 三个向量库区别
FAISS:Meta检索库,无持久化,仅检索,适合脚本实验;
Chroma:轻量本地向量库,自带持久化、零部署,适合个人RAG、测试;
Milvus:分布式生产向量库,海量数据、高并发、企业级项目。 - 线上API vs 本地Llama3
线上:优点:开箱即用、不吃配置、免费额度多;缺点:数据外传、限流、收费、网络依赖;
本地Llama3:优点:数据私密、无调用限制、可私有化;缺点:需要显卡/量化、部署有门槛、推理慢一点。 - Llama3 常见问题与解决
1)显存OOM:使用4bit量化Q4_K_M、降低上下文长度;
2)答非所问/重复输出:未使用Llama3官方对话模板、缺少终止符。 - 同步&异步区别
同步:串行排队,一个请求完再下一个,适合单次调用;
异步:IO等待时释放资源,并发批量请求,适合批量问答、多任务场景,速度大幅提升。
三、代码题参考答案 - 数据清洗
def filter_high_score(raw_data):
res = []
for item in raw_data:
return resif item["score"] >= 90: res.append({"id": item["id"], "content": item["content"]})
raw_data = [{“id”:1,”content”:”向量数据库”,”score”:91},{“id”:2,”content”:”测试文本”,”score”:60}]
print(filter_high_score(raw_data))
- 稳健 ollama 请求
import requests
def local_llm_chat(prompt):
url = “http://127.0.0.1:11434/api/chat"
data = {
“model”: “llama3:8b”,
“messages”: [{“role”:”user”,”content”:prompt}],
“stream”: False
}
try:
resp = requests.post(url, json=data, timeout=15)
resp.raise_for_status()
print(“模型回答:”, resp.json()[“message”][“content”])
except requests.exceptions.Timeout:
print(“请求超时”)
except requests.exceptions.ConnectionError:
print(“本地模型未启动,请先启动ollama服务”)
except Exception as e:
print(“请求异常:”, e)
local_llm_chat(“什么是RAG”)
四、场景题标准答案
- 技术选型:Chroma + Llama3-8B-Instruct(Q4_K_M量化)
- 简易流程:文档切片 -> Embedding向量化 -> 存入Chroma向量库 -> 用户问题向量化检索相似文档 -> 拼接上下文给Llama3 -> 输出答案
- 选型理由:
不选FAISS:无持久化,重启数据丢失,不适合知识库;
不选Milvus:需要Docker部署、太重,个人本地小场景完全没必要;
Chroma零部署、自动持久化、适配单机小知识库,完美匹配学习场景。
本作品采用《CC 协议》,转载必须注明作者和本文链接
关于 LearnKu
推荐文章: