Django 搭建 AI 本地知识库:文档上传、向量检索与智能问答
Django 搭建 AI 本地知识库文档上传、向量检索与智能问答把 PDF 上传到服务器再调用一次大模型并不等于拥有“本地知识库”。一个真正可用的 Django 知识库至少要解决六件事文件归属、文本切块、向量生成、相似度检索、权限过滤和答案引用。本文以 PostgreSQL、pgvector 和 Django ORM 为主线并把方案放进本地 RuyiDjangoCRM 的文档与多租户搜索边界中验证。最重要的结论是先确定用户能看哪些文档再在可见集合内做向量排序不能先搜全库再补权限。一条完整的知识库链路上传后的原始文件仍然要保留便于重新解析和审计真正用于检索的是切块后的文本。每个文本块至少记录原文档主键和组织主键页码或章节位置原始文本嵌入模型名称与版本固定维度的向量内容哈希避免重复入库。安装扩展pipinstallpgvector psycopg[binary]在 PostgreSQL 中启用向量类型CREATEEXTENSIONIFNOTEXISTSvector;用 Django 模型保存文本块和向量fromdjango.dbimportmodelsfrompgvector.djangoimportHnswIndex,VectorFieldclassKnowledgeChunk(models.Model):org_idmodels.UUIDField(db_indexTrue)documentmodels.ForeignKey(common.Document,on_deletemodels.CASCADE)positionmodels.PositiveIntegerField()contentmodels.TextField()content_hashmodels.CharField(max_length64,db_indexTrue)embedding_modelmodels.CharField(max_length80)embeddingVectorField(dimensions1536)classMeta:constraints[models.UniqueConstraint(fields[document,content_hash],nameuq_document_chunk_hash,)]indexes[HnswIndex(namechunk_embedding_hnsw,fields[embedding],m16,ef_construction64,opclasses[vector_cosine_ops],)]向量维度必须和嵌入模型一致。换模型时不要悄悄覆盖旧向量应记录模型版本并安排重建否则同一列里混入不同向量空间排序结果没有意义。切块不是越碎越好固定字符数切块适合做最小实验但生产系统应优先保留标题、段落、列表和代码块等结构。块太大召回内容噪声多块太小语义被截断还会增加向量数量和成本。defchunk_text(text:str,size:int800,overlap:int120):start0whilestartlen(text):yieldtext[start:startsize]startsize-overlap这个函数足以验证流程但面对 Markdown、PDF 表格和代码文档时应替换为结构化解析器并把页码或标题锚点一起保存。先做权限过滤再做向量排序RuyiDjangoCRM 的真实文档查询会同时检查组织、创建者、被分享用户和团队。向量检索必须复用同一套可见性条件fromdjango.db.modelsimportQfrompgvector.djangoimportCosineDistancedefsearch_chunks(profile,query_vector,limit5):visible_documentsDocument.objects.filter(orgprofile.org,statusactive,).filter(Q(created_byprofile.user)|Q(shared_toprofile)|Q(teams__inprofile.teams.all()))return(KnowledgeChunk.objects.filter(org_idprofile.org_id,document__invisible_documents).annotate(distanceCosineDistance(embedding,query_vector)).order_by(distance)[:limit])如果先从全库取前 20 个相似块再在 Python 中删除无权访问的结果既可能泄露标题、分数和片段也可能导致合法结果被越权结果挤出前 20 名。权限条件必须进入数据库查询本身。管理员分支也要显式处理。不要为了“方便”把所有知识库查询统一成管理员视角更不能依赖前端隐藏结果。让回答带上可核验引用检索结果不要只拼正文还要给每一块分配稳定引用编号context\n\n.join(f[{i}]{chunk.document.title}/ 片段{chunk.position}\n{chunk.content}fori,chunkinenumerate(chunks,start1))promptf 只依据下面资料回答。每个关键结论使用 [1] 这样的编号引用 资料不足时明确说不知道不要补写不存在的事实。{context}引用不是装饰。服务端还应保存本次回答命中的块主键、距离和文档版本以便用户点击原文也便于后续复盘错误召回。本地验证暴露出的两个误区我用一个可重复的关键词向量实验验证了上传后切成 3 块、余弦排序、返回引用片段的完整链路相关 11 项单元测试全部通过。这个实验故意不冒充真实语义模型关键词向量只能证明检索管线正确不能证明语义质量。第二个误区是只测“能搜到”。RuyiDjangoCRM 的搜索测试还验证了跨组织隔离、普通用户只能看到自己创建或被分配的对象以及组织内知识条目的可见规则。AI 知识库接入后这些测试应继续存在并增加“越权向量即使更相似也不能返回”的回归用例。结论一个可靠的本地知识库不是模型回答得像不像人而是每条材料从哪里来、谁有权看到、命中了哪一段、换模型后如何重建都能被解释和复现。参考资料pgvector 官方项目pgvector-python 的 Django 用法

相关新闻

AI因材施教方案落地失败的9大隐形陷阱(一线校企联合复盘报告·仅限本周开放)

AI因材施教方案落地失败的9大隐形陷阱(一线校企联合复盘报告·仅限本周开放)

更多请点击: https://kaifayun.com 第一章:AI因材施教方案落地失败的9大隐形陷阱(一线校企联合复盘报告仅限本周开放) 在超过37所中小学与12家教育科技企业的联合实践复盘中,83%的AI教学系统在部署6个月内出现显著效果…

2026/11/10 0:54:41 阅读更多 →
《鸣潮》3.5版图形渲染问题修复:MDO异常与远景贴图错误解决方案

《鸣潮》3.5版图形渲染问题修复:MDO异常与远景贴图错误解决方案

这次我们来看一个针对《鸣潮》3.5版本特定图形问题的修复工具。如果你在游戏中遇到了MDO显示异常、远距离贴图错误或模型加载闪烁等问题,这个工具可能正是你需要的。它不是外挂,也不是修改游戏核心文件,而是通过调整游戏配置文件或注入特定图…

2026/11/5 22:23:45 阅读更多 →
智谱AutoClaw一键部署:1分钟搞定AI Agent与飞书集成

智谱AutoClaw一键部署:1分钟搞定AI Agent与飞书集成

1. 项目概述:从“高门槛”到“一键即用”的转变 如果你最近关注AI Agent领域,大概率被“OpenClaw”和“AutoClaw”这两个词刷屏了。它们代表了当前最前沿的AI自动化工作流构建平台,简单来说,就是能让你的AI助手(Agent…

2026/11/8 13:51:08 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/10 23:32:01 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/10 23:32:03 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/11 2:31:33 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/11 17:16:37 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/11 17:16:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/10 23:32:10 阅读更多 →

日新闻

周新闻

月新闻