向量数据库的正确用法是什么? - V2EX
sillydaddy
5.47D
5.13D

向量数据库的正确用法是什么?

  •  
  •   sillydaddy 1h 26m ago 798 views
    想用它预处理文档,然后帮助提取与关键字匹配的内容。看起来很理想,但实际提取不尽人意。

    我做了个小工具,把切分后的每段,与关键字的匹配程度,可视化出来了,可以直观看到匹配度。

    从网页内容中,提取“中国人民银行的编制”,效果不错:


    从网页内容中,提取“中国人民银行的职责”,开头匹配的很好,但漏掉了接下来的那些:


    可以看到,在提取“中国人民银行的职责”匹配的句段时,会漏掉枚举的那几条。

    这可以说是段落拆分的问题,我是逐句拆分的,问题是,段落怎么才能合理拆分呢?如果必须知道哪些跟哪些是在一起的,那就相当于已经提前理解文章的内容了,就没有必要上向量数据库了。

    所以,向量数据库如何做是比较合适的呢?就比如我上面的这种应用场景。
    9 replies    2026-05-26 11:24:24 +08:00
    IsaacYoung
        1
    IsaacYoung  
       1h 21m ago
    没太研究过,不过记得之前好像看到过几个方向,楼主可以参考下:
    1. 分段的时候不要完全分割开,上一段和下一段保留一部分重叠
    2. 用语义分割,印象中好像是根据文本的结构例如段落、标题等进行分割
    cryptovae
        2
    cryptovae  
       1h 2m ago
    400 个 token 一段的情况下,上一段的后 50 个 token 和下一段开头的 50 个 token ,一起算向量,连贯性有了
    每个段落都有自己的 metadata ,包含标题,章节,目录名称,都可以拿来计算向量
    通过 LLM 提取时间线和关键词计算向量,可以增强相对应的语义检索
    sillydaddy
        3
    sillydaddy  
    OP
       39 mins ago
    @IsaacYoung
    @cryptovae
    这些方法应该能缓解,但是没有从根儿上解决。比如,如果恰好关键信息不在重叠的 token 里面呢?

    关键在于,向量搜索它会漏掉。

    如果是人来交互式的查看结果,可以把最匹配的 topK 个,优先展示出来,如果不满意,再动态增加 topK 。
    可如果是程序来处理呢?怎么保证不会漏掉呢?
    IsaacYoung
        4
    IsaacYoung  
       32 mins ago
    fennu2333
        5
    fennu2333  
       19 mins ago   1
    同语言搜索用向量 + BM25 混合搜索效果会更好些,根据你的目的调整权重。向量搜索也不是银弹,他只能解决 query 和 chuck 之间向量表征相似度的问题,还是要看你具体场景看怎么切 chunk ,如何加入更多的召回手段进行多路召回
    maolon
        6
    maolon  
       19 mins ago   1
    实际我觉得是关键字匹配的问题,关键字匹配本身是 sparse 匹配任务,对应的应该是 tfidf 这种算法搞出来的向量,但是你用的这种 embedding 模型生成向量是 desnse 的,换言之就是关键字那边语义信息不足,

    正常做法应该是问题改写,也就是从你的关键词里改写出多个问题(比如加入上下文 context 然后改写),再来匹配,或者反向操作,直接用 bm25 来处理文本片段
    sillydaddy
        7
    sillydaddy  
    OP
       19 mins ago
    @IsaacYoung 感谢分享,里面提到的「父子文档」,其实跟楼上提到的依赖预制的语义结构是一样的。这个依赖条件,其实本身也需要 LLM 的介入,否则只凭借解析文本的结构、网页的结构来确定,并不稳定。

    所以,感觉还是需要 LLM 的理解能力来介入,提取多层的抽象信息。但这里有个悖论,如果是整理出的知识,需要多次检索,那 LLM 介入一次,后续多次使用,效率比较高。但如果是我这种,只需要提取一次,那直接让 LLM 提取所需的信息就可以,就没必要再让向量数据库转一次手了。

    前者抽取多层抽象信息,感觉跟我之前提到的笔记的网状 tag 系统,不谋而合了: https://v2ex.com/t/825142
    cuimc
        8
    cuimc  
       9 mins ago
    我最近在使用 llm wiki 的形式在做,感觉还不错
    Morriaty
        9
    Morriaty  
       1 min ago
    这个悖论,它的发展历程其实就是 cursor 类以 RAG 向量匹配为核心的 CodingIDE ,逐步过渡到 ClaudeCode 类以 ReACT 多工具( grep, ls, find, mcp 等)为核心的 CodingAgent 的过程

    所以,理论上你这个中国人民银行的查询要搞好,最快的方法是接个 CC ,和一些工具函数
    About     Help     Advertise     Blog     API     FAQ     Solana     5981 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 49ms UTC 03:26 PVG 11:26 LAX 20:26 JFK 23:26
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86