
前面把知识直接写在代码里。这节课改为读取本地.txt文件并切成小段。切分器会保留来源和每段在原文中的起始位置方便以后展示答案依据。LangChain 官方教程先在langchain-study文件夹中创建bookstore.txt用记事本保存为UTF-8星河书店营业时间 周一至周五营业到晚上八点。周六和周日营业到晚上十点。节假日营业时间以门店公告为准。 会员与优惠 注册用户也称为会员。会员购买图书可以享受九折优惠。优惠不能与其他优惠券叠加。 退货规则 顾客在购买图书后的七天内可以凭购物小票申请退货。图书需要保持完好。再保存下面的程序为unit3_lesson4_split_text.pyfrom pathlib import Path from langchain_core.documents import Document from langchain_text_splitters import RecursiveCharacterTextSplitter file_path Path(bookstore.txt) text file_path.read_text(encodingutf-8) document Document( page_contenttext, metadata{source: file_path.name}, ) splitter RecursiveCharacterTextSplitter( chunk_size60, chunk_overlap10, add_start_indexTrue, separators[\n\n, \n, 。, , ], ) chunks splitter.split_documents([document]) print(f原文长度{len(text)} 个字符) print(f切分结果{len(chunks)} 段) for number, chunk in enumerate(chunks, start1): print(f\n第 {number} 段) print(来源, chunk.metadata[source]) print(起始位置, chunk.metadata[start_index]) print(内容, repr(chunk.page_content))如果缺少切分包先在已激活的虚拟环境中安装python -m pip install -U langchain-text-splitters然后运行python unit3_lesson4_split_text.pychunk_size60表示每段目标长度约为 60 个字符chunk_overlap10允许相邻段保留部分重复内容减少重要句子被切断的风险。这里故意设置得很小方便观察。真实文档通常会用更大的值。小实验把chunk_size改为120再运行一次比较段数和每段内容。下一课我们把这些段落放入向量库检索时就能显示它们来自文件的哪个位置。