fromllama_index.core.node_parserimportSimpleNodeParserparser=SimpleNodeParser.from_defaults(chunk_size=512,#中文文档建议设置为384tokens左右chunk_overlap=64#重叠区域,保证上下文连贯性)nodes=parser.get_nodes_from_documents(documents)
fromllama_index.core.node_parserimportMarkdownNodeParserparser=MarkdownNodeParser()nodes=parser.get_nodes_from_documents(markdown_docs)
fromllama_index.core.node_parserimportHTMLNodeParserparser=HTMLNodeParser(tags=["p","h1"])#指定需要提取的标签nodes=parser.get_nodes_from_documents(html_docs)
importnltkfromllama_index.core.node_parserimportSentenceWindowNodeParsernode_parser=SentenceWindowNodeParser.from_defaults(window_size=3,#每侧包含的句子数window_metadata_key="window",original_text_metadata_key="original_sentence",)
fromllama_index.core.node_parserimportSemanticSplitterNodeParserfromllama_index.embeddings.openaiimportOpenAIEmbeddingembed_model=OpenAIEmbedding()splitter=SemanticSplitterNodeParser(buffer_size=1,breakpoint_percentile_threshold=95,embed_model=embed_model)
fromllama_index.core.llmsimportOpenAIimportjsondefllm_chunking(text):llm=OpenAI(model="gpt-4-turbo")prompt=f"""将以下技术文档划分为逻辑单元,每个单元包含完整的技术概念:{text}返回JSON格式:[{{"title":"单元标题","content":"文本内容"}}]"""response=llm.complete(prompt)try:returnjson.loads(response.text)exceptjson.JSONDecodeError:raiseValueError("LLM响应格式错误")分块方法 | 处理速度 | 语义保持 | 实现难度 | 适用场景 |
固定分块 | ⭐⭐⭐⭐ | ⭐ | ⭐ | 快速搭建原型系统 |
滑动窗口 | ⭐⭐⭐ | ⭐⭐ | ⭐⭐ | 对话记录、访谈稿 |
结构感知分块 | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ | 特定格式的Markdown/HTML/JSON等文档 |
嵌入分块 | ⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | 叙事性长文本 |
LLM分块 | ⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 各种各样的复杂文档 |
Settings.embed_model=dashscope_embed_model()#语义分块配置Settings.node_parser=SemanticSplitterNodeParser(buffer_size=128,#保留128tokens重叠区域breakpoint_percentile_threshold=95,#95%阈值自动寻找最佳分割点embed_model=dashscope_embed_model())
| 欢迎光临 链载Ai (https://www.lianzai.com/) | Powered by Discuz! X3.5 |