Downloads · 30 days
0
chenhaodev/qwen3-8b-sport-weight-rag
qwen3-8b-sport-weight-rag is a machine learning model from chenhaodev. Use it for the machine learning task on the model card, and read the license before you ship it in a product.
这是一个给「运动指导 & 体重管理」大模型做 检索增强(RAG) 的向量知识库。 简单说:它把几本相关书拆成 465 个小片段,存成向量;当用户提问时,先在这里找最相关的几段文字,拼进提示词再让大模型回答,能明显降低"胡编乱造"。
Downloads · 30 days
0
Access
Public
Updated Sep 23, 2026
Repo size
1.6 MB
Likes
0
Public
Click a slice to open those files.
.faiss952 KB · 58%
From the Hugging Face model README
这是一个给「运动指导 & 体重管理」大模型做 检索增强(RAG) 的向量知识库。 简单说:它把几本相关书拆成 465 个小片段,存成向量;当用户提问时,先在这里找最相关的几段文字,拼进提示词再让大模型回答,能明显降低"胡编乱造"。
配套大模型(微调好的专科 LLM):chenhaodev/qwen3-8b-sport-weight-lora
(也可以用任何本地小模型,甚至本仓库根目录的 llama.cpp 小模型。)
下面从 0 开始,一步步把检索 → 问答跑通。每步都给出确切命令和"应当看到的结果",方便你判断是否成功。
| 文件 | 作用 | 公开 |
|---|---|---|
index.faiss | 向量索引(怎么检索) | ✅ 公开 |
docs_meta.enc | 加密封包,内含正文+元数据 | 🔒 需密码 |
decrypt_rag.sh | 一键解封包的脚本 | ✅ 公开 |
README.md | 本说明 | ✅ 公开 |
版权/科研声明:
docs_meta.enc里是从受版权保护书籍中抽取的原文,已加密。 仅限学术研究/科普,禁止商用。需要密码请私信仓库作者(chenhaodev)说明用途索取。
需要 Python 3.9+ 和两个库。以下命令在你的终端里逐行执行:
# (可选)建议用独立虚拟环境:
python -m venv venv && source venv/bin/activate
# 安装检索所需的库:
pip install faiss-cpu sentence-transformers numpy
验证安装是否成功(应打印版本号,不报错):
python -c "import faiss, numpy; from sentence_transformers import SentenceTransformer; print('依赖OK')"
把本仓库文件下载到本地文件夹,例如 rag/:
mkdir -p rag && cd rag
# 用 git 拉取整个仓库(最简单,能拿到 index.faiss 和脚本):
git clone https://hf-mirror.com/chenhaodev/qwen3-8b-sport-weight-rag .
# 仓库小,几秒即可。用 huggingface-cli 或直接网页下载均可。
完成后应看到 index.faiss、docs_meta.enc、decrypt_rag.sh、README.md 四个文件:
ls
# -> README.md decrypt_rag.sh docs_meta.enc index.faiss
正文文件 docs.json(book 原文片段)和 meta.json(来源标签)在加密封包里。
bash decrypt_rag.sh xch123 # 把 xch123 换成作者给你的密码
如果密码对,会在当前目录生成 docs.json 和 meta.json:
ls
# -> README.md decrypt_rag.sh docs_meta.enc docs.json index.faiss meta.json
只想"看懂怎么用"也可以不解密:检索结果已经借
index.faiss提供向量;但要看返回的正文文字就需要docs.json。所以建议还是拿到密码解出来,否则检索出的只有编号、没有可直接阅读的句子。
直接跑检索脚本(记得把里面脚本路径换成你本地的):
# retrieve_demo.py
import faiss, json
from sentence_transformers import SentenceTransformer
# 1) 加载向量模型(和建库时同一个模型,必须一致才能比较)
model = SentenceTransformer("BAAI/bge-small-zh-v1.5")
# 2) 读入索引 + 正文 + 元数据(步骤3已验证 docs.json 存在)
index = faiss.read_index("index.faiss")
docs = json.load(open("docs.json", encoding="utf-8"))
meta = json.load(open("meta.json", encoding="utf-8"))
# 3) 提问 -> 编码 -> 检索前3条
query = "中老年人如何通过运动预防骨质疏松?"
q = model.encode([query], normalize_embeddings=True)
D, I = index.search(q, 3)
for pos, (score, idx) in enumerate(zip(D[0], I[0]), 1):
print(f"[{pos}] 相似度={score:.3f} 来源={meta[idx]['label']}")
print(" ", docs[idx][:80], "...\n")
运行:
python retrieve_demo.py
应当看到:打印 3 条,来源是《骨质疏松症营养与膳食指导》之类的书,开头是"中老年"相关句子。若报 FileNotFoundError: docs.json,说明第 3 步没解密成功,回头检查密码/目录。
这是"RAG"的完整闭环:检索到相关文字后,把它们拼进提示词,再发给大模型。
# rag_qa.py (需要你有可调用的 LLM 接口)
import faiss, json
from sentence_transformers import SentenceTransformer
import openai
# --- 检索 ---
model = SentenceTransformer("BAAI/bge-small-zh-v1.5")
index = faiss.read_index("index.faiss")
docs = json.load(open("docs.json", encoding="utf-8"))
meta = json.load(open("meta.json", encoding="utf-8"))
query = "中老年人如何通过运动预防骨质疏松?"
D, I = index.search(model.encode([query], normalize_embeddings=True), 3)
context = "\n\n".join(docs[i] for i in I[0])
# --- 拼进提示词(让模型"有据可依") ---
prompt = (
"你是运动与体重管理助手,请依据下面的参考资料回答;资料没提到的请不要编造。\n\n"
"【参考资料】\n" + context + "\n\n"
"【问题】\n" + query
)
# --- 调用 LLM(此处为 llama.cpp 本地 server 示例) ---
client = openai.OpenAI(base_url="http://127.0.0.1:8080/v1", api_key="local")
resp = client.chat.completions.create(
model="qwen3-8b-sport-weight",
messages=[{"role": "user", "content": prompt}],
max_tokens=400,
)
print(resp.choices[0].message.content)
更完整的一套本地方案是「llama.cpp 小模型 + 本 RAG」。做法:
chenhaodev/qwen3-8b-sport-weight-gguf 里的 qwen3-8b-sport-weight-Q4_K_M.gguf(约 4.8GB)。llama-server 起一个 OpenAI 兼容接口(端口 8080)。rag_qa.py 连它。详见对应仓库/根目录的 LLAMA_RAG_GUIDE.md。
| 领域 | 块数 |
|---|---|
| 体重管理/上班族 | 108 |
| 运动/慢病康复 | 87 |
| 运动/骨关节康复 | 78 |
| 运动/老年康复 | 70 |
| 体重管理/胃肠 | 49 |
| 运动/骨骼健康 | 40 |
| 体重管理/糖尿病 | 33 |
共 465 块;len(docs)==len(meta)==index.ntotal==465。
| 现象 | 原因 / 解决 |
|---|---|
FileNotFoundError: docs.json | 没解密或解密到别的目录。回到第 3 步。 |
| 检索结果相似度很低/感觉不对 | 提问太短或偏题;换个说法、加关键词再试。 |
模型加载很慢 | 首次会下载 embedding 模型(BAAI/bge-small-zh-v1.5),网络慢属正常。 |
| 想重建索引 / 扩充语料 | 需原始 chunk + 同一个 embedding 模型;联系作者获取语料后重建。 |
一句话:装好两个库 → 下载 4 个文件 → 用密码解出正文 → 跑 retrieve_demo.py 看到检索结果 → 拼进提示词给大模型回答。完毕。