大模型RAG前置基础阶段

大模型RAG前置基础阶段 终测试卷(含答案)
一、单选题(每题3分,共15分)

  1. Python 出现 IndentationError 报错根本原因是?( )
    A. 代码语法写错了
    B. Tab 和 空格缩进混用/缩进层级不一致
    C. 变量未定义
    D. 模块未安装
  2. requests 出现 nodename nor servname provided 代表?( )
    A. 网络超时
    B. DNS域名解析失败,地址不存在
    C. 接口鉴权失败
    D. 请求频率超限
  3. 以下哪个不属于向量数据库/向量检索库?( )
    A. FAISS
    B. Chroma
    C. Milvus
    D. Redis(普通KV)
  4. 本地部署 Llama3 8B 想要显存最小、效果最稳,优先选择哪种量化?( )
    A. FP16
    B. Q4_K_M
    C. INT2
    D. 不量化
  5. asyncio.gather 的核心作用是?( )
    A. 串行执行多个函数
    B. 并发批量执行协程、统一收集返回结果
    C. 提升代码可读性
    D. 解决接口报错
    二、简答题(每题6分,共30分)
  6. 简单说明:Embedding 向量嵌入 的作用?为什么 RAG 必须用向量检索而不是关键词检索?
  7. 简述 Chroma / FAISS / Milvus 三者的定位和适用场景区别。
  8. 线上大模型API(通义千问/OpenAI)和 本地Llama3 部署,各自优缺点是什么?
  9. 本地跑 Llama3 最常见的 2 个报错问题是什么?对应的解决思路?
  10. 同步 requests 和 异步 aiohttp 调用大模型接口,核心区别是什么?什么场景用异步?
    三、代码实操题(共35分)
  11. 字典数据清洗(15分)
    写一个函数,完成:过滤分数大于等于90的数据,只保留 id、content,最终返回新列表。
    raw_data = [{“id”:1,”content”:”向量数据库”,”score”:91},{“id”:2,”content”:”测试文本”,”score”:60}]
  12. 稳健版 requests 接口请求(20分)
    需求:
    1)POST 请求本地 ollama 接口:127.0.0.1:11434/api/chat
    2)传入模型名 llama3:8b、用户提问
    3)捕获超时、连接失败、异常状态码
    4)打印模型返回的回答内容
    四、场景架构题(20分)
    你现在要做一个个人本地知识库问答项目(RAG):
  13. 数据量:几百条文档、单机本地运行、不上云、不要复杂部署
  14. 模型:本地私有化大模型,不调用任何外网API
    请你写出:
    1)选用什么 向量库 + 什么大模型?
    2)完整简易流程?
    3)为什么不选 Milvus / 不选 FAISS?

参考答案
一、单选答案
1.B 2.B 3.D 4.B 5.B
二、简答标准答案(精简得分点)

  1. Embedding & 向量检索优势
    Embedding 将文本转为高维数字向量,语义相似的文本向量距离更近。关键词只能匹配字面,向量能匹配语义、近义词、相似问句,是RAG检索的核心。
  2. 三个向量库区别
    FAISS:Meta检索库,无持久化,仅检索,适合脚本实验;
    Chroma:轻量本地向量库,自带持久化、零部署,适合个人RAG、测试;
    Milvus:分布式生产向量库,海量数据、高并发、企业级项目。
  3. 线上API vs 本地Llama3
    线上:优点:开箱即用、不吃配置、免费额度多;缺点:数据外传、限流、收费、网络依赖;
    本地Llama3:优点:数据私密、无调用限制、可私有化;缺点:需要显卡/量化、部署有门槛、推理慢一点。
  4. Llama3 常见问题与解决
    1)显存OOM:使用4bit量化Q4_K_M、降低上下文长度;
    2)答非所问/重复输出:未使用Llama3官方对话模板、缺少终止符。
  5. 同步&异步区别
    同步:串行排队,一个请求完再下一个,适合单次调用;
    异步:IO等待时释放资源,并发批量请求,适合批量问答、多任务场景,速度大幅提升。
    三、代码题参考答案
  6. 数据清洗
    def filter_high_score(raw_data):
    res = []
    for item in raw_data:
     if item["score"] >= 90:
         res.append({"id": item["id"], "content": item["content"]})
    return res

raw_data = [{“id”:1,”content”:”向量数据库”,”score”:91},{“id”:2,”content”:”测试文本”,”score”:60}]
print(filter_high_score(raw_data))

  1. 稳健 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”)

四、场景题标准答案

  1. 技术选型:Chroma + Llama3-8B-Instruct(Q4_K_M量化)
  2. 简易流程:文档切片 -> Embedding向量化 -> 存入Chroma向量库 -> 用户问题向量化检索相似文档 -> 拼接上下文给Llama3 -> 输出答案
  3. 选型理由:
    不选FAISS:无持久化,重启数据丢失,不适合知识库;
    不选Milvus:需要Docker部署、太重,个人本地小场景完全没必要;
    Chroma零部署、自动持久化、适配单机小知识库,完美匹配学习场景。
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!