news 2026/10/20 9:56:28

文本切分器实测:分隔符顺序如何改变切分结果

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
文本切分器实测:分隔符顺序如何改变切分结果

版权与内容来源声明
本文为原创整理。文中涉及官方文档、开源仓库、论文与公开报道的内容,均在附表 A 中标注来源;引用官方原文保持原样,不作改写。文中命令、版本号与界面截图以本文成文时的实测/核验结果为准,标注「待验证」的部分请以你本地环境实际输出为判断依据。本文不推荐任何不合规的软件获取方式,也不对任何收益结果作承诺。转载请注明出处。

一、同一个 60 字上限,两种切法给出两种结果

一份 257 个字符的《订单服务说明》,带两级标题、一段代码、几处空行。把每块上限设成 60 字、重叠设成 0,只把分隔符列表换个顺序,块 1 从 49 字变成 38 字,块 2 从 44 字变成 55 字。

差别不是「多几字少几字」,而是「## 一、创建订单」这个小标题,跟不跟着它下面的正文走。

先统一两个词。切分器(text splitter):把长文档切成小段的那段程序。块(chunk):切出来的一段文本,后面通常会被算成一个向量、检索时整段塞进上下文。检索命中的单位是块,不是文档——这一点决定了后面所有结论为什么重要。

1.1 两个结果的差别落在一句话上

默认分隔符顺序下,块 1 的 49 字正好停在「## 一、创建订单」这个小标题结束的位置,紧接着那 44 字的正文(「调用方必须传 order_id 与 amount……」)被切进了块 2。

把标题类分隔符提到最前面以后,块 1 只剩 38 字(一级标题加引言段),块 2 是 55 字,开头就是「## 一、创建订单」,后面跟着它的正文。

对检索来说这是两种完全不同的结果。如果查询词更接近标题,命中的是块 1,模型拿到的是「有个叫创建订单的章节」,但拿不到「必须传 order_id 与 amount、单位是分、不接受浮点数」。标题被检索到了,内容没被带出来。

1.2 参数不是「调大调小」,是「先在哪切」

多数人调分块的方式是「效果不好就把 chunk_size 调小一点、overlap 调大一点」。但这份文档在 60 字上限下,五块长度是 49/44/45/51/57,每一块都没超过上限,参数是合规的。坏掉的是边界落在哪。

参数管的是「每块最多多长」,分隔符顺序管的是「刀先落在哪个单位上」——段落、标题、句子、词,还是字符。这两件事不在一个维度上,调前者解决不了后者。

1.3 本文只认三个能当场看的量

块数、每块长度、每块开头的字符。这三个不需要向量库、不需要模型,split_text跑一遍就能看见。

本文会跑四组配置:默认分隔符配 80 字上限(5 块,49/44/45/51/57);只给中文句号(4 块,最短一块 19 字,最长一块 134 字);把标题类分隔符提到最前、上限压到 60 字(5 块,38/55/45/51/57);以及 40 字上限配 40 字重叠(13 块,最短 3 字)。数字后面逐组拆开,先记住一件事:这四组的差别几乎全在边界位置,而不在块长上限。

二、默认值是 4000/200,先把基线校准

2.1 本机读出来的四个默认值

不传任何参数直接构造,把内部属性打印出来,是校准基线的第一步。

fromlangchain_text_splittersimportRecursiveCharacterTextSplitter d=RecursiveCharacterTextSplitter()print("chunk_size =",d._chunk_size,"| chunk_overlap =",d._chunk_overlap)print("默认 separators =",d._separators)

实测输出:chunk_size = 4000、chunk_overlap = 200,分隔符是['\n\n', '\n', ' ', '']。环境是 Python 3.13.14、langchain-core 1.6.6,切分器来自langchain_text_splitters这个包(本机也装了,只是没打出它的版本号)。

这里要纠正一个流传很广的说法:4000 才是默认值,不是 1000。旧教程里常见的chunk_size=1000, chunk_overlap=200是示例参数,写给人照着改的,被不少文章当成了默认值。截至 2026-10-19,本机这一版的默认值仍然是 4000/200。

还有一项容易被忽略:length_function默认就是len,也就是按字符数算长度,不是按 token 数。中英文的「字符换 token」比例不一样,所以同一个 4000,在中英文文档里占的上下文并不是一回事。

2.2 四级优先,最后一级是逐字兜底

四个分隔符不是「四个一起用」,而是有严格的先后顺序。

层级分隔符它想保住的结构这一级缺失时会怎样
1\n\n段落段落被拆成行,标题与正文可能分开
2\n行列表、代码行被拆开
3空格英文的词英文单词被切成两半
4空串无结构,逐字切中文长句在任意字之间断开

第 4 级的空串不是「没有分隔符」,而是「每个字符之间都算一次分隔」,所以任何文本都能被切到上限以内。代价是它不认任何语义边界。

2.3 官方文档和源码各说了一半

官方文档页(docs.langchain.com的 RecursiveCharacterTextSplitter 指南)写清了三件事:默认分隔符列表是["\n\n", "\n", " ", ""];切分方式是按字符列表递归尝试;块长由length_function决定。但这一页没有写 4000 和 200 这两个数字。

数字在源码里:langchain_text_splitters/base.py里chunk_size: int = 4000、chunk_overlap: int = 200、length_function: Callable[[str], int] = len;character.py里self._separators = separators or ["\n\n", "\n", " ", ""]。文档管语义、源码管数值,两边合起来才是完整基线。

同一页还有一节专门讲中文、日文、泰文这类没有词边界的语言,明确建议把「。」加进分隔符列表,示例里也确实加了。但它没说这个「。」该排在第几位——而这恰恰是本文实测下来影响最大的地方。

三、默认分隔符在代码和长句上都会「硬切」

3.1 80 字上限:5 块,代码断成 45 和 51

沿用默认的四个分隔符,只把chunk_size压到 80,同一份文档切成 5 块:

块长度开头(按实测日志)问题
149# 订单服务说明到## 一、创建订单小标题落在块尾,正文在下一块
244调用方必须传 order_id 与 amount与自己的标题分离
345以开头围栏起头,接def create_order(...)只有开头围栏,没有结尾围栏
451return {...}加结尾围栏只有结尾围栏,没有开头围栏
557## 二、查询订单到文末两个小标题各自带着正文

块 3 到def create_order(order_id, amount):这一行的冒号就结束了,函数体整段落到块 4。渲染出来是两段坏代码:前一段有开头围栏没结尾,后一段有结尾没开头。

更值得注意的是块 1 和块 5 的对比:同一套参数,块 5 里两个小标题都跟着正文,块 1 里的小标题却独自留在末尾。原因很朴素——块 1 装到 49 字时只剩 31 字余量,塞不下 44 字的正文;块 5 的两节加起来 57 字,还有余量。标题保不保得住,取决于这一块还剩多少空间,不取决于它是标题。

3.2 中文长句:80 加 31,第二块以「证幂等」开头

换一篇纯中文、没有空行也没有空格的文本:三句客服话术重复三遍,共 111 字。默认分隔符切出来是 80 加 31 两块,第二块开头是「证幂等。重复提交不能产生两笔订单……」

「保证幂等」被从「保」和「证」之间切开。对这种文本,前三级分隔符全都不命中:没有空行、没有换行、中文也没有空格。一路降到第 4 级空串,逐字切到 80 字为止。

3.3 为什么会这样

默认分隔符表是按英文散文设计的:段落、行、词、字符。英文的词之间有空格,第 3 级能兜住大部分情况。中文没有空格,第 3 级形同虚设;一旦文本里没有空行和换行,就只剩逐字兜底。代码则是另一种情形:它的换行和空格都是「合法分隔符」,切分器并不知道围栏里面是不能切的。

四、只给一个分隔符:主语留在上一块

4.1separators=["。"]的 4 块

很多人抄到的配置是「中文就按句号切」,于是只传一个「。」。同一份文档切成 4 块:75 / 19 / 134 / 29。

块 2 只有 19 个字,内容是「。amount 单位为分,不接受浮点数」。它的主语「调用方必须传 order_id 与 amount」留在了块 1 的末尾。读者和模型看到块 2 时,拿到的是半句:谁的 amount、为什么是分,都不在块里。

块 3 更直接:134 字,超过了 80 的上限。

RecursiveCharacterTextSplitter(chunk_size=80,chunk_overlap=0,separators=["。"],).split_text(DOC)

后面几段代码都摘自同一个实测脚本,DOC就是这份订单服务说明,不再重复贴原文。

4.2 没有下一级兜底,上限会失效

递归切分的规则是:用一个分隔符切开后,如果某一段还是超限,才拿剩下的分隔符继续切。只给一个「。」,剩下的列表就是空的。

于是 134 字那段(从「。」开始,跨过整段代码,到「允许 3 秒内的延迟」)没有下一级可走,被整段保留。chunk_size是「尽量不超过」,不是硬保证:这段文本不经过合并那一步,直接把原文放进了结果,长度上限当场失效,流程也不会因此中断。

那个 19 字块也不是「切得细」,而是残余:前一块已经 75 字装不下它,它自己又短,只能单独成块。碎片块大多是这样产生的,不是设计出来的。

4.3 中文文档的分隔符顺序怎么排

按「先结构、再句子、最后兜底」排,不要只给一个。

顺序放什么理由排错了会怎样
1\n##(连同\n#)让标题和它下面的正文成为一段标题留在上一块末尾,正文进下一块
2\n\n段落边界段落被拆散,跨节合并
3。!?语义完整的最小单位句子被切在半句
4\n列表项、表格行、代码行列表项被合并或拆开
5,、长句的次级断点一个短句被硬切
6""逐字兜底超长片段被整段放行

两个细节。第一,这份表里干脆去掉了「空格」这一级:中文里空格极少,留着它,遇到混排英文的文档时就会先在英文词边界切一刀,把中文句子留在半截;如果文档里英文确实很多,可以把空格放到句末标点之后。第二,逗号一定要排在句号后面,否则句子会先被切在逗号处,等于把半句当成一块。

至于为什么不能只给一个分隔符:只给一个,丢的不只是结构层,还把兜底层一起丢了。除句号之外没有任何可退的层级,一段超长的表格或代码就会被整段放行,长度上限形同虚设——4.1 节那 134 字就是这么来的。

需要说明:这张表里第 1、2 级的先后,本文做了对照实测;第 3 到 6 级是按切分机制推出来的排序,没有逐项对比切分结果。把它们当成有依据的建议,不要当成实测结论。

五、把标题排在空行前面,标题就和正文分开了

5.1 顺序对调:49/44 变成 38/55

把上限压到 60 字,跑两组配置,只改分隔符顺序:

第一组["\n\n", "\n", ""](空行优先),5 块,49 / 44 / 45 / 51 / 57——和 80 字那组完全一样,因为每块本来就没到 60。
第二组["\n## ", "\n\n", "\n", ""](标题优先),5 块,38 / 55 / 45 / 51 / 57。

块 1 少掉的 11 个字,正是「空行 + ## 一、创建订单」这一段;它整体挪到了块 2 开头,于是 55 字的块 2 = 标题 + 正文。

RecursiveCharacterTextSplitter(chunk_size=60,chunk_overlap=0,separators=["\n## ","\n\n","\n",""],).split_text(DOC)

5.2 机制:第一个命中的分隔符决定第一刀

切分器不是「把所有分隔符一起用」,而是按列表顺序找到第一个在文本里出现的分隔符,用它把全文切一遍;切开后哪一段还超限,才拿列表里剩下的分隔符继续切。

所以列表第 1 位决定的是「全局第一刀落在什么单位上」。

  • 空行优先:全文先按段落切,标题自己是一段(它前面就是空行)。合并时按顺序往块里塞,塞到装不下就停。标题恰好被塞进块 1 的末尾,正文塞不进去。
  • 标题优先:切出来的每一段都是「标题 + 它下面的正文」。合并时要么整段进,要么整段留到下一块,标题和正文不会分家。

一句话:顺序不是偏好问题,它决定合并的最小单位是什么。

5.3 判断切分结果对不对的三条判据

不用先建索引、不用先跑模型,把块打印出来逐条看就够。

判据怎么看命中说明什么怎么改
① 标题是否与它下面第一段同块搜##,看这个标题的下一行还在不在同一块里标题孤零零在块尾,检索命中标题拿不到内容把\n##提到\n\n前面
② 有没有以标点开头的块看每块第一个字符是不是。,、!?上一块结尾没有收束,标点被甩到这一块开头把句末标点提前一级,别让标点单独当块首
③ 有没有小于 50 字的碎片块统计每块长度(80 字上限时看 50 以下)多半是残余块或参数配错先查是不是单分隔符造成的残余,再考虑 overlap

第 ② 条值得多说一句。切分器的keep_separator默认是开着的,分隔符会被保留下来,但落点是下一块的开头。空白类分隔符留下的换行会被顺手去掉,标点不会——所以块首出现一个孤立的「。」,就是「这里被切过」的显式痕迹:上一块以一个没有句号的半句收尾,这一块以一个孤立的句号起头。这是个几乎零成本的检查点。

第 ③ 条的 50 字不是定理。它是按 80 字上限给的:大约是上限的六成。上限换成 4000,就按同比例折算,或者干脆看「最短块是不是只有最长块的零头」。

切分结果自查清单:把本章三条判据做成了一张可逐项勾选的表,附了几组对照配置的块长。放在资料包里,扫码即可获取:

六、overlap 只在被切断的位置生效

6.1 0 / 10 / 30 的实测对照

chunk_size固定 60,只改chunk_overlap:

overlap块数块 2 长度现象
0544标题在块 1 末尾,正文单独成块
10544与 0 完全一样,一个字都没多
30555标题被带到块 2 开头,与正文同块
40(上限也是 40)139块数暴涨,出现 3 字碎片
forovin(0,10,30):ch=RecursiveCharacterTextSplitter(chunk_size=60,chunk_overlap=ov).split_text(DOC)print(ov,len(ch),[len(c)forcinch])

6.2 能带多少,取决于上一块尾部有多长

overlap常被理解成「每块都复制上一块的尾巴」。它不是。它只在一块装满、必须断开的那一刻起作用:从这块末尾往回留最多 overlap 个字,当作下一块的开头。而且它按整段回退,不会把某一段截掉一半——留多少,是一段一段算的。

留得下留不下,取决于断点前那一段有多长。这个例子里,断点前是「空行 + ## 一、创建订单」,正好 11 个字符:

  • overlap=10:11 大于 10,一个字都留不下,结果和 0 一模一样。
  • overlap=30:11 小于 30,整段标题被留下,块 2 变成 55 字,标题和正文在一起。

所以 overlap 不是「越大越连贯」。切点落在天然分隔符上、前一段又比 overlap 长的时候,它根本没有落点。想让标题跟着正文,改分隔符顺序是直接的;指望 overlap 顺手带过来,得先算准那段有多长。

6.3 overlap 等于 chunk_size:13 块和 3 字碎片

把chunk_size和chunk_overlap都设成 40,块数从 5 涨到 13。

块 10 只有 3 个字符,是一个孤零零的代码结尾围栏。块 3(31 字)和块 4(37 字)都含「order_id 与 amount」,只是切点不同;块 7(29 字)和块 8(39 字)都含return那一行。同一段代码被重复了两遍,还都不是完整的。

原因还是那条:一块本身就只有 40 字,却要求保留 40 字重叠。每装进下一段就必然超限,只能立刻再切一刀,于是刀刃相接、块数翻倍、内容重复。

chunk_overlap大于chunk_size时,构造切分器就会失败(参数校验不通过);等于的时候不会报错,但结果没有可用性。这条边界不要试探。经验上把 overlap 控制在块长的四分之一到三分之一,剩下的连贯性交给分隔符顺序解决。

七、结构要自己保:先按结构拆,再逐段切

7.1 「保护代码块」的分隔符反而更碎

一个自然的想法是:把代码围栏写进分隔符列表,让切分器认出来。实测相反。

对一段只有两个函数的代码,用默认分隔符加 40 字上限,切 2 块:36 和 33,一块只有开头围栏、一块只有结尾围栏。换成「保护代码块」的配置——把「换行 + 三个反引号 + 换行」和「三个反引号」都写进分隔符列表——变成 3 块:36 / 29 / 3,最后一块只有 3 个字符的结尾围栏。

原因不复杂:这段代码的第一道围栏在开头、最后一道在结尾,中间没有「前后都有换行」的围栏,所以第一项根本不命中;真正命中的是「三个反引号」这一项。它在开头和结尾各出现一次,开头那一刀切出来的前半段是空串、被丢掉,于是「开头围栏 + 两个函数」连成一段(69 字,超过 40,只能退回按换行切),结尾围栏则单独成了 3 字的一块。

**把结构标记写进分隔符列表,等于告诉切分器「这里可以切」。**它会照切,而且默认会把分隔符保留到下一块开头——保留下来的是单侧的三个反引号,配不成对。

7.2 先按结构拆,再对每段做切分

代码块、表格、公式、JSON 这类结构,切分器本身保护不了。可行的做法是两步:先从文档层面把结构整段摘出来,再对剩下的正文做递归切分。

结构切分器能自己保护吗建议做法
代码块不能按围栏整段摘出,整段作为一个块;超长再按行切,并补回首尾围栏
表格不能按「表头 + 若干行」成组切,别让一行被切开
Markdown 标题部分可以用标题类分隔符(顺序要对),或先用标题切分器分层
公式、JSON不能整段保留,超长时按语法结构切
长度口径默认按字符要按 token 控长,就换length_function,别指望改 chunk_size 等价于改 token

⚠️代码待验证

importre FENCE=re.compile(r"(`{3}.*?`{3})",re.S)defsplit_sections(text:str):"""先把围栏代码整段摘出,正文再交给切分器。"""parts,last=[],0forminFENCE.finditer(text):head=text[last:m.start()]ifhead.strip():parts.append(("text",head))parts.append(("code",m.group(1)))last=m.end()tail=text[last:]iftail.strip():parts.append(("text",tail))returnparts

拆完以后,text段交回切分器,code段整段保留。这段代码本文没有实际跑过,只是结构示范,标记为待验证;真正落地时要拿你自己的文档补一遍边界情况(比如代码块里嵌了反引号、围栏没闭合)。

7.3 诚实边界:这是几何层面的实测

上面所有数字都是几何与结构层面的观察:块数、块长、块首字符、边界落在哪个字上。没有测任何检索效果指标——没算召回,没算命中,也没验证答案对不对。

换一个分隔符顺序,能让标题和正文进同一块,这是能直接看到的事实;但「同一块之后检索是不是更准」,本文没有证据,也不作暗示。

要证明切得好,只能自己标一套检索评测集:从真实提问里取 50 到 100 条,逐条标出答案所在的原文段落,然后用两套切分参数各建一次索引,比较「答案段落有没有出现在前几条结果里」。这一步没有捷径,也没有通用参数可以代替。

顺序上也别弄反:先用三条判据看结构对不对,结构不对就先改分隔符;结构对了,再花时间标评测集看效果。结构层面就能看出的问题,不值得用评测去证明。

结构优先的切分脚本骨架:把「先摘代码块、再切正文」的两步流程写成了可改的骨架,含围栏正则和分段后的处理分支。放在资料包里,扫码即可获取:

附表 A:本文引用事实与出处对照表

事实出处(文档名 + 发布方 + 链接)本文位置
环境:Python 3.13.14、langchain-core 1.6.6,切分器来自langchain_text_splitters模块本机实测(work/2026-10-19_切分器实测.py,日志work/2026-10-19_切分器实测.log)第 2.1 节
默认chunk_size = 4000、chunk_overlap = 200、separators = ['\n\n', '\n', ' ', '']本机实测(同上脚本与日志,直接打印内部属性)第 1.3、2.1、2.2 节
chunk_size: int = 4000、chunk_overlap: int = 200、length_function: Callable[[str], int] = lenLangChain 源码langchain_text_splitters/base.py,langchain-ai/langchain,https://raw.githubusercontent.com/langchain-ai/langchain/master/libs/text-splitters/langchain_text_splitters/base.py第 2.1、2.3 节
self._separators = separators or ["\n\n", "\n", " ", ""];keep_separator默认TrueLangChain 源码langchain_text_splitters/character.py,同上仓库,https://raw.githubusercontent.com/langchain-ai/langchain/master/libs/text-splitters/langchain_text_splitters/character.py第 2.3、5.3 节
默认分隔符列表为["\n\n", "\n", " ", ""];块长由length_function决定;中文等无词边界语言建议把「。」加入分隔符Splitting recursively,LangChain 官方文档,https://docs.langchain.com/oss/python/integrations/splitters/recursive_text_splitter第 2.3、4.3 节
该官方页面未给出 4000 / 200 两个数值(数值只在源码中出现)同上页面,2026-10-19 核验第 2.3 节
默认分隔符 + 80 字上限:5 块,长度 49/44/45/51/57;代码块被切成 45 与 51,块 3 止于def行的冒号本机实测(work/2026-10-19_切分器实测.py)第 3.1 节
块 1 的 49 字恰好是「一级标题 + 引言 + ## 一、创建订单」,块 2 的 44 字是该标题下的正文(按块长与前缀复算)本机实测(同上脚本与日志)第 1.1、3.1 节
separators=["。"]+ 80 字上限:4 块,75/19/134/29;块 2 为「。amount 单位为分,不接受浮点数」,块 3 长 134 超过上限本机实测(同上脚本与日志)第 4.1、4.2 节
分隔符顺序对调(["\n\n","\n",""]与["\n## ","\n\n","\n",""],上限 60):块 1 由 49 变 38,块 2 由 44 变 55本机实测(同上脚本与日志)第 5.1 节
chunk_overlap取 0 / 10 / 30:块 2 长度为 44 / 44 / 55;overlap=10 与 0 的块内容一致本机实测(同上脚本与日志)第 6.1、6.2 节
chunk_size=40, chunk_overlap=40:13 块,块 10 长 3,块 3/4 与块 7/8 内容重叠本机实测(同上脚本与日志)第 6.3 节
中文无空格长句(111 字)默认切为 80 + 31,第二块以「证幂等」开头;["。","\n",""]切为 73 + 38,第二块以「。」开头本机实测(同上脚本与日志)第 3.2、4.1 节
代码块保护尝试(把「换行 + 三个反引号 + 换行」与「三个反引号」写进分隔符):3 块 36/29/3,末块仅 3 个字符本机实测(同上脚本与日志)第 7.1 节
length_function默认为len,按字符计数;用自定义函数包一层len后块数不变(2 块)本机实测(同上脚本与日志)第 2.1、7.2 节
核验方式:官方文档与源码于 2026-10-19 由本机直接访问上述 URL 逐字核对;实测数据取自当日脚本运行日志,未做二次加工本机核验方式说明(如实标注,供读者复核)全篇

附表 B:术语速查表

术语一句话解释在本文哪里用到
切分器把长文档切成小段的程序,英文 text splitter第 1 章
块切出来的一段文本,检索与向量化的基本单位第 1 章
chunk_size每块的长度上限,默认按字符数计第 1.2、2.1 节
chunk_overlap断开时从上一块末尾保留的最大字数第 6 章
分隔符切分时用来断句的字符串,按列表顺序递归使用第 2.2 节
递归切分一刀切完还超限,就用下一级分隔符继续切第 4.2 节
keep_separator是否保留分隔符,默认保留,落在下一块开头第 5.3 节
逐字兜底列表最后的空串,让每个字符之间都能切第 2.2、3.2 节
碎片块远短于上限的小块,多为残余而非设计第 4.2、5.3 节
代码围栏Markdown 里包住代码的三反引号第 3.1、7.1 节
RAG检索增强生成:先检索片段,再让模型照着片段回答第 1 章
token模型切词后的最小单位,与字符数不是一回事第 2.1 节
检索评测集带标注答案位置的问题集合,用来比较切分方案第 7.3 节

写在最后:这篇用到的资料

写这篇文章时,把相关的官方文档和源码又翻了一遍,顺手也整理了几份配套的东西:

  • 大模型学习路线图:从零基础到能自己动手做 Agent,按阶段说明每一步该学什么、哪些可以先跳过
  • 《LangChain + LangGraph + MCP 智能体开发实战》视频课:7 个模块,从私有化部署、Embedding+RAG 到 MCP+Agent 全流程
  • AI 大模型知识库(在线可查):Agent Skills 从入门到落地、Claude Skills 完全指南等专题,按目录浏览即可
  • 640 套 AI 大模型行业报告 + 经典 PDF 书籍:看行业落地案例和别人怎么做的时候用得上
  • 大模型零基础到精通教学视频:跟着敲一遍,比只读文档快得多

资料是我自己整理的,放在下面这个码上,扫码即可获取:






添加时备注「AI」,优先通过。

资料按「先路线、再动手、最后查漏」的顺序整理好了,建议先看学习路线那一份,照着它挑一条适合自己当前基础的路径再往下看。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/20 9:55:59

去掉向量数据库:Sirchmunk用倒排索引与反馈实现自进化搜索

最近在折腾一个新的搜索项目,名字叫 Sirchmunk,核心思路一句话就能讲清楚:完全不要向量数据库,把搜索引擎做成一个能自己根据用户反馈持续进化的系统。是的,你没看错——不依赖那些动辄几十万维度的嵌入向量&#xff0…

作者头像 李华
网站建设 2026/10/20 9:55:57

选山东效果好的背单词软件品牌推荐?先搞懂这件事再买

“背单词和阅读哪个先?顺序搞反了,再好的工具也白搭。” 家人们,我花了3个月把主流背单词工具翻了个底朝天,又请教了几位英语老师,发现大多数人焦虑的根本不是工具不够多,而是单词记忆逻辑压根没理顺。这篇…

作者头像 李华
网站建设 2026/10/20 9:54:35

单片机计算机毕设之基于WIFI的指纹刷卡门禁与摄像头云端监控装置设计 基于STM32的智能门禁云平台管理与视频监控系统设计(033009)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

作者头像 李华
网站建设 2026/10/20 9:54:24

VS+MFC实战:Gerber光绘文件读取与分行显示

简介:这份资源面向使用 Visual Studio 与 MFC 进行桌面开发的 C 学习者,以及需要查看 PCB 设计文件的工程师,解决 Gerber 文件内容难以直观浏览的问题。项目基于 MFC 框架编写,通过 CFileDialog 选择 Gerber 文件,解析…

作者头像 李华
网站建设 2026/10/20 9:54:12

碰碰好评卡核心功能全链路开发实战与落地部署经验指南

碰碰好评卡核心功能全链路开发实战与落地部署经验指南 碰碰好评卡是本地生活、电商、社区服务等场景下,连接商户与用户的评价运营工具,能够帮助商家实现公开平台好评的正向引导,同时为用户提供匹配的权益激励,近年在多个垂直行业得…

作者头像 李华
网站建设 2026/10/20 9:53:44

芯片量产背后的供应链新范式:从流片到交付的协作重构

最近一场半导体原厂的量产庆典让我琢磨了很久。按惯例,这类活动的主角应该是芯片设计团队和制造工厂,可这次台下坐着一批方案商和模组厂,其中就有做了多年物联网方案、圈内习惯叫L公司的老熟人。大家不是来捧场的,而是认真坐在那儿…

作者头像 李华