[分享创造] 用 380 行 Python 给公司做了个离线知识库(带出处、带权限)
公司制度文档散在网盘、群聊、个人电脑,新人问、老人答,答的不一定是现行版本。试过 SaaS 知识库,卡在「数据出内网」和「按人头收费」两点,就自己写了一个。 只做一件事:把 Markdown 丢进 docs/,就能提问,回答带《文档》/章节出处,能点开核对原文;文档带可见范围(普通员工查不到财务制度,财务角色能看到)。全程不联网,零第三方依赖,一个文件 380 行。 几个实现上的小设计: 分块:维护标题栈 + 段落,约 420 字一块,每块自带「《员工报销制度》/ 报销标准」这样的路径,回答时直接当引用 中文分词:二元组切分,不依赖分词库,英文数字按词切 召回:BM25 + TF-IDF 双路加权。第一版问「出差住宿报销上限」,第一条返回的是「差旅餐补」——加「查询词覆盖率」加权后才稳定命中住宿段落 回答默认抽取式,不生成。制度类问题最怕编造,返回原文让人自己核对 部署就两条命令: python3 kb.py ingest 建索引, python3 kb.py serve 起服务,目录拷到内网机器就能用。 演示( 89 秒纯录屏): https://youtu.be/cNloexteD
阅读原始来源来源记录
研究分析
变化记录
来源描述:公司制度文档散在网盘、群聊、个人电脑,新人问、老人答,答的不一定是现行版本。试过 SaaS 知识库,卡在「数据出内网」和「按人头收费」两点,就自己写了一个。 只做一件事:把 Markdown 丢进 docs/,就能提问,回答带《文档》/章节出处,能点开核对原文;文档带可见范围(普通员工查不到财务制度,财务角色能看到)。全程不联网,零第三方依赖,一个文件 380 行。 几个实现上的小设计: 分块:维护标题栈 + 段落,约 420 字一块,每块自带「《员工报销制度》/ 报销标准」这样的路径,回答时直接当引用 中文分词:二元组切分,不依赖分词库,英文数字按词切 召回:BM25 + TF-IDF 双路加权。第一版问「出差住宿报销上限」,第一条返回的是「差旅餐补」——加「查询词覆盖率」加权后才稳定命中住宿段落 回答默认抽取式,不生成。制度类问题最怕编造,返回原文让人自己核对 部署就两条命令: python3 kb.py ingest 建索引, python3 kb.py serve 起服务,目录拷到内网机器就能用。 演示( 89 秒纯录屏): https://youtu.be/cNloexteD
版本与成本证据
可供比较的近期同类记录:“Show HN: ActiveDNS, a free DNS search service” (Show HN, 2026年11月12日);“Show HN: ThreeSweep – switch macOS windows with single trackpad swipe” (Show HN, 2026年11月12日)。主题相近仅用于导航,未核验其是否属于同一需求或独立证据。
适用与受影响对象
先明确变化影响的现有工作流,再判断是否升级。发布热度不证明效果提升;接口、价格或可用性变化也可能增加迁移工作。
缺失的比较信息
待补齐:新旧行为、受影响套餐与地区、生效时间、兼容性、回退路径及同一工作量下的成本。
采用与迁移验证
保存发布或政策原文,对新旧方案运行同一个任务并比较结果与完整账单;若涉及停服,先核验截止时间再安排迁移。