夜雨聆风学习资料网

ARTICLE · 1025557

30行代码搭本地知识库,公司文档随便问

30行代码搭本地知识库,公司文档随便问
TUTORIAL · 实战教程2026.08

知识库很难搭?

30行代码搭本地知识库

公司文档随便问

RAG · Python · 本地部署

智能创作笔记

RAG效率

📦 5 Parts + Conclusion

👉 滑动

PART 01

装两个库

环境准备

PART 02

切文档建索引

代码讲解

PART 03

问它就完事

检索演示

PART 04

踩过的坑

避坑指南

PART ///

写在最后

我的建议

不用联网、数据不出公司,30行核心代码就够

公司文档散在十几个Word和PDF里,每次找东西都要翻半天。我花一晚上搭了个本地知识库,把文档喂进去,直接对话问它「报销流程怎么走」「上季度销售额多少」,它立刻翻出原文。关键是不用联网、数据不出公司,30行核心代码就够。

01

PART

先装两个库

ENV SETUP · 环境准备

一个负责把文字变成向量,一个负责快速检索。都是本地跑,免费,笔记本就能带得动。不用申请API、不用把数据传到别人的服务器,这一点对很多公司来说是硬需求。

bash

pip install sentence-transformers faiss-cpu

02

PART

把文档切好、建索引

BUILD INDEX · 代码讲解

思路其实特别朴素:把每篇文档按段落切开,每段变成一个向量存进Faiss。所谓向量,你可以理解成「这段话讲了啥」的数字指纹。问问题的时候,也是把问题变成向量,找最像的那几段原文。

这里有个细节:中文一定要用多语言模型,别用纯英文embedding,否则搜不准。我第一版偷懒用了英文模型,问「请假流程」结果它给我翻出一段英文术语表,当场翻车。

python

from sentence_transformers import SentenceTransformer

import faiss, os, glob

model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')

chunks, paths = [], []

for f in glob.glob('docs/*.txt'):

  for blk in open(f, encoding='utf-8').read().split('\n\n'):

    if blk.strip():

     chunks.append(blk.strip()); paths.append(f)

vecs = model.encode(chunks)

index = faiss.IndexFlatL2(vecs.shape[1])

index.add(vecs)

03

PART

问它就完事了

QUERY · 检索演示

跑起来,它会把最相关的三段原文和出处文件打出来。想接对话,把这三段塞给任意大模型当上下文就行,它就会用大白话回答你,还附带出处。

python

q = model.encode(['报销流程怎么走?'])

_, ids = index.search(q, k=3)

for i in ids[0]:

  print(paths[i], '→', chunks[i][:120])

效果大概是这样:

我问「年假怎么算」,它返回《员工手册》第几页那句话,而不是编造一个答案

04

PART

几个踩过的坑

PITFALLS · 避坑指南

!踩坑提示 🕳

切太碎会丢上下文,一段最好保留完整一个小节,别按句子硬切;图片里的表格、扫描件得先OCR成文字,否则它看不见。

中文用多语言模型,否则搜不准

文档多就加标题加权,命中率明显提升

///

LAST

写在最后

MY ADVICE · 我的建议

这套方案适合中小团队和个人。文档几百篇以内,笔记本就能跑,今晚就能搭起来。真要上规模、要权限管理、要多人协作,再考虑商业向量库,那又是另一套成本了。

别被「知识库」三个字吓到,本质就是切文档、转向量、按相似度找这三步。先跑通最小版本,再慢慢加功能,比一上来搞大平台实在得多。

既然看到这里了,如果觉得有用,随手点个赞、在看、转发三连吧。

点赞
在看
转发

THANKS FOR READING

相关学习资料

返回首页浏览学习资料