微信扫码
添加专属顾问
我要投稿
Agentic Chunking技术,革新RAG的信息检索与生成效率。 核心内容: 1. RAG系统中分块技术的重要性与现有方法的局限 2. Agentic Chunking的核心理念:利用LLM实现智能决策分块 3. Agentic Chunking的实现机制探索和代码示例
在检索增强生成(Retrieval-Augmented Generation, RAG)的浪潮中,我们正经历着一场信息检索与大型语言模型(LLM)融合的革命。RAG 系统的核心在于其能够根据外部知识库检索相关信息,并将其作为上下文提供给 LLM,从而生成更准确、更具事实性的回答。而这一过程中,「“分块(Chunking)”」——即将原始文档分割成更小、更易于管理的片段——扮演着至关重要的角色。
然而,当前主流的分块方法,无论是固定大小、递归分块、基于文档结构,甚至是最先进的语义分块,都或多或少存在局限性。它们多依赖于预设规则、结构启发式或简单的语义相似度来切分文本,往往难以完美捕获复杂文档的深层语境和用户查询的动态意图。
这正是 **Agentic Chunking(基于代理或 LLM 的智能分块)**登场并有望彻底改变 RAG 范式的舞台。
让我们快速回顾一下现有方法的不足,以理解为何 Agentic Chunking 至关重要:
这些方法的共同局限在于,它们是「被动且静态的」。它们无法预判未来的查询,也无法像人类一样理解文档的深层含义,从而智能地决定“哪些信息应该被打包在一起以应对某种潜在的提问”。
Agentic Chunking 的核心思想在于,它将文本分块的过程提升到了**“智能决策”「的层面。它不再仅仅是机械地切割文本,而是利用大型语言模型(LLM)的强大」理解、推理和生成能力**,来动态、有策略地划分信息单元。
可以将其想象成一个拥有阅读理解能力的“智能代理”:它在阅读文档时,会思考这份文档可能被如何提问,哪些信息是相互关联的,哪些概念是完整的。它甚至可以在分块的同时,为每个块生成一个高度精炼的摘要或元数据,以更好地代表该块的内容。
Agentic Chunking 的实现机制是多样的,且仍在快速发展中。以下是一些可能的探索方向及对应的概念代码示例:
这种方法利用 LLM 读取大段文本,然后指令其提取其中的关键概念、实体或生成精炼的摘要。每个摘要或概念簇可以成为一个“智能块”。
「示例场景:」 处理一份冗长的研究论文。传统分块可能切断关键发现。通过 LLM 提取,我们可以得到包含核心洞察的浓缩块。
from langchain.chains import create_extraction_chain
from langchain_openai import ChatOpenAI
from langchain.schema import Document
from typing import List, Dict
# 初始化你的 LLM 模型
# 实际应用中请替换为你的 OpenAI API Key 或其他 LLM 提供商
llm = ChatOpenAI(temperature=0, model="gpt-4o")
# 定义你希望从文本中提取的结构化信息模式。
# 这相当于定义你的“智能块”应该包含哪些语义元素。
chunk_schema = {
"properties": {
"main_finding": {"type": "string", "description": "本文段落的主要发现。"},
"methodology_used": {"type": "string", "description": "本部分应用的关键方法。"},
"key_entities": {"type": "array", "items": {"type": "string"}, "description": "文中提及的重要实体或概念。"},
"summary_of_section": {"type": "string", "description": "本段落的简洁摘要。"}
},
"required": ["main_finding", "summary_of_section"], # 确保这些字段总是被提取
}
# 创建一个基于 LLM 的信息提取链
extraction_chain = create_extraction_chain(chunk_schema, llm)
long_research_text_section = """
本研究提出了一种名为“GraphFormer”的新型深度学习架构,用于...
我们的方法论涉及一个多阶段过程:首先,进行数据预处理,包括...
实验结果表明,GraphFormer 在...数据集上显著优于基线模型。
未来的工作将侧重于整合外部知识图谱并解决可扩展性问题...
"""
# Agentic Chunking 步骤:LLM 提取结构化信息以形成概念上的“块”
print("--- 1. 基于 LLM 的摘要与提取示例 ---")
extracted_chunk_data = extraction_chain.run(long_research_text_section)
print(f"提取的块数据: {extracted_chunk_data}")
# 这些 extracted_chunk_data(例如,一个字典列表)现在代表了你的“智能块”。
# 你可以对这些数据进行向量化(例如,向量化 'summary_of_section'),或将其作为带有元数据的块存储。
通过精心设计的提示词,引导 LLM 识别文本中的逻辑单元、主题切换点,并按指令输出这些单元。
「示例场景:」 一个公司内部的 Wiki 页面,混合了政策、会议记录和项目更新。一个巧妙的提示词可以指导 LLM 将不同类型的内容精确分离成独立的块。
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(temperature=0, model="gpt-4o")
# 提示词明确指示 LLM 如何根据内容类型进行分块
prompt = PromptTemplate(
input_variables=["full_document_text"],
template="""你是一个智能文档分块器。你的目标是根据内容类型,将提供的文档分割成逻辑部分。
识别并提取以下类型的段落:
- 政策 (例如,人力资源规则、安全指南)
- 会议记录 (例如,讨论摘要、行动项)
- 项目更新 (例如,进度报告、任务列表)
对于每种段落类型,提供提取的文本。如果某种类型不存在,请注明。
文档:
{full_document_text}
输出格式 (使用明确的分隔符):
---政策_开始---
[提取的政策文本]
---政策_结束---
---会议记录_开始---
[提取的会议记录文本]
---会议记录_结束---
---项目更新_开始---
[提取的项目更新文本]
---项目更新_结束---
"""
)
chunking_chain = LLMChain(llm=llm, prompt=prompt)
# 包含混合内容的示例文档
mixed_document = """
## 公司安全政策更新
即日起,所有员工必须对内部系统使用 MFA。
如果违反,将面临纪律处分。
新政策将于下周一生效。
## 团队会议记录 - 2025年5月20日
参会人员:张三、李四、王五。
讨论:项目X状态、Q3 计划。
行动项:李四跟进客户反馈。
下次会议:下周三上午10点。
## Alpha 项目每周更新
当前状态:开发完成80%。
下一步:下周开始质检阶段。
风险:依赖外部供应商 API。
预计完成日期:2025年7月15日。
"""
print("\n--- 2. 指令工程引导分块示例 ---")
# Agentic Chunking: LLM 根据提示词指令解析并分块
response = chunking_chain.run(full_document_text=mixed_document)
print(response)
# 后续处理:你可以解析这些带分隔符的部分,将其转换为独立的块。
这是一种更复杂的策略,涉及多个 LLM 代理(或一个 LLM 模拟不同角色)之间的协作。例如,一个“分块代理”LLM 可能与一个“查询代理”LLM 进行模拟对话,预判用户可能提出的问题,并据此优化分块策略。
「示例场景:」 处理一份复杂的法律合同。一个“分块代理”可能会向一个“查询代理”(模拟律师或用户)提问:“律师可能会对这份合同的哪些方面感兴趣?”根据“查询代理”的反馈,分块代理会智能地将相关的法律条款(例如,终止条款、赔偿责任条款)组合在一起,即使它们在物理上可能相距甚远。
# 概念性代理协作分块工作流 (伪代码)
class ChunkingAgent:
def __init__(self, llm):
self.llm = llm
def propose_initial_chunks(self, document_section: str) -> List[Dict]:
"""LLM 初步识别潜在的块边界和主题。"""
# 提示词:识别文档中的主要逻辑部分及其主题
prompt = f"Given this text, identify distinct logical sections and their main topics:\n{document_section}"
response = self.llm.invoke(prompt).content
# 假设 LLM 返回一个 JSON 字符串,包含多个 {text: "...", topic: "..."}
# 实际解析会更复杂,这里简化
return [{"text": section, "topic": "identified"} for section in response.split("\n\n")] # 简化为按段落分割
def refine_chunks_based_on_queries(self, proposed_chunks: List[Dict], simulated_queries: List[str]) -> List[Dict]:
"""根据模拟查询,LLM 进一步优化块。"""
refined_chunks = []
for chunk_info in proposed_chunks:
chunk_text = chunk_info["text"]
# 询问 LLM:这个块对于这些类型的查询来说是否完整且有用?
# 如果不完整,LLM 建议如何修改或与周围上下文合并。
prompt = f"Considering typical queries like: {', '.join(simulated_queries)}\nIs the following text a complete and useful chunk? If not, suggest how to modify it or combine with surrounding context.\nText: {chunk_text}"
refinement_response = self.llm.invoke(prompt).content
# 实际应用中,这里会解析 LLM 的反馈,然后进行块的修改或合并操作
refined_chunks.append({"text": refinement_response, "original_topic": chunk_info["topic"]}) # 简化处理
return refined_chunks
class QuerySimulationAgent:
def __init__(self, llm):
self.llm = llm
def generate_simulated_queries(self, document_context: str, num_queries: int = 5) -> List[str]:
"""LLM 生成用户可能提出的假设性问题。"""
prompt = f"Generate {num_queries} diverse hypothetical questions a user might ask about the following document content, focusing on different aspects:\n{document_context}"
response = self.llm.invoke(prompt).content
# 假设 LLM 返回以换行符分隔的问题列表
return [q.strip() for q in response.split('\n') if q.strip()]
# --- 主 Agentic 分块流程 ---
doc_text = """
法律合同:甲方(供应商)和乙方(客户)同意以下条款:
1. 服务范围:甲方将提供软件开发服务...
2. 支付条款:乙方应在服务完成后的30天内支付...
3. 终止条款:任一方可在提前90天书面通知后终止本协议...
4. 知识产权:所有开发成果的知识产权归甲方所有,但乙方享有永久使用权...
... (更多合同内容) ...
"""
chunking_agent = ChunkingAgent(llm)
query_agent = QuerySimulationAgent(llm)
# 步骤 1:查询代理模拟潜在查询
# 初始上下文可以是文档的开头或摘要,用于引导查询生成
sim_queries = query_agent.generate_simulated_queries(doc_text[:300]) # 模拟对合同开头部分的查询
print("\n--- 3. 代理协同决策示例 ---")
print(f"模拟生成的查询: {sim_queries}")
# 步骤 2:分块代理提出初步块
proposed_chunks = chunking_agent.propose_initial_chunks(doc_text)
print(f"初步建议的块 (简化): {[c['text'][:50] + '...' for c in proposed_chunks]}")
# 步骤 3:分块代理根据模拟查询优化块
final_chunks = chunking_agent.refine_chunks_based_on_queries(proposed_chunks, sim_queries)
print(f"最终优化后的块 (简化): {[c['text'][:50] + '...' for c in final_chunks]}")
# 这些 final_chunks 现在根据潜在的用户查询类型进行了优化。
LLM 在分块的同时,直接将块内信息提取成结构化的格式(如 JSON),或用于构建局部知识图谱。这些结构化数据本身就是块,或者作为块的丰富元数据,极大地增强了检索的精确性。
「示例场景:」 一份产品规格文档。LLM 不仅分块文本,还直接提取出产品名称、特性、价格、兼容性等关键属性,并以 JSON 格式输出。这些结构化数据可以被直接用于过滤检索,或构建产品的知识图谱。
from langchain.chains.openai_functions import create_structured_output_chain
from langchain.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from pydantic import BaseModel, Field
from typing import List, Optional
# 确保你的 LLM 支持函数调用 (例如,GPT-4o, GPT-4-0613, Gemini 1.5 Pro)
llm = ChatOpenAI(model="gpt-4o", temperature=0)
# 定义 Pydantic 模型,用于规范化 LLM 提取的结构化输出。
# 这相当于定义了你的“智能结构化块”的蓝图。
class ProductSpecChunk(BaseModel):
product_name: str = Field(..., description="产品的名称。")
model_number: Optional[str] = Field(None, description="产品的型号。")
key_features: List[str] = Field(..., description="产品的主要特性列表。")
price_usd: float = Field(..., description="产品在美国的美元价格。")
compatibility: List[str] = Field(..., description="兼容的设备或系统列表。")
description_summary: str = Field(..., description="产品描述的简要总结。")
# 创建一个链,它将信息提取到 Pydantic 模型中。
# 这就是你的“智能结构化分块器”。
structured_chunk_extractor = create_structured_output_chain(ProductSpecChunk, llm)
product_document_section = """
隆重推出全新“量子飞跃”智能手表,型号 QL-2025。
这款革命性设备配备 1.5 英寸 AMOLED 显示屏、24/7 心率监测、内置 GPS 和 5 ATM 防水功能。
售价为 299.99 美元,兼容 iOS (版本 15 及更高) 和 Android (版本 12 及更高) 智能手机。
其时尚的设计和超长续航电池使其成为您日常探险的完美伴侣。
"""
print("\n--- 4. 结构化输出与知识图谱结合示例 ---")
# Agentic Chunking: LLM 提取结构化数据
structured_chunk = structured_chunk_extractor.run(product_document_section)
print("提取的结构化块数据 (Pydantic 模型):")
print(structured_chunk.dict())
# 这个 structured_chunk(一个 Pydantic 对象,可转换为字典/JSON)
# 现在可以被直接存储、向量化(例如,向量化 'description_summary' 字段),
# 或用于构建知识图谱,其中其他字段作为过滤或增强检索的元数据。
如果 Agentic Chunking 能够成功落地,它将带来以下颠覆性的变革:
尽管潜力巨大,Agentic Chunking 仍面临诸多挑战:
设想一下,一个 Agentic Chunking 驱动的 RAG 系统:
未来,Agentic Chunking 可能会与以下技术深度融合:
Agentic Chunking 代表了 RAG 分块策略的下一个前沿。它将分块从一个相对机械的预处理步骤,提升为一个由人工智能驱动的智能决策过程。尽管面临计算成本和复杂性的挑战,但其在提高检索相关性、优化上下文利用以及处理复杂非结构化数据方面的巨大潜力,预示着它将彻底改变我们构建和体验 RAG 系统的方式。
随着 LLM 技术和相关工程实践的不断成熟,Agentic Chunking 必将从概念走向现实,为我们带来更加智能、精准和高效的知识检索与生成体验。
构建基于 Dify Agent 和 Semantic Kernel 的智能运维系统:从告警到自动修复
Semantic Kernel 与 LangChain 比较:探索智能决策与大语言模型的协同作用
构建企业级多智能体系统:AutoGen + Semantic Kernel 实践指南
用 CrewAI 构建团队 Agent 系统,角色协同完成 RAG 任务
张量的力量:PyTorch 中的 Tensor 操作秘籍
AI Agent 工具盘点:AutoGPT、CrewAI、LangGraph、AgentVerse 谁更适合 DevOps?
DeepSeek API 和 Dify)" data-itemshowtype="0" linktype="text" data-linktype="2">AI 驱动的运维 - 实体识别方法与提示词 (基于 DeepSeek API 和 Dify)
基于 LangChain 和 Confluence 构建 AI Agent
学习如何优化LLM训练:数据预处理与实战策略解析
MCP Client with Python" data-itemshowtype="5" linktype="text" data-linktype="2">Building Langchain MCP Client with Python
Manus - 面向 Java 开发者的开源通用智能体" data-itemshowtype="11" linktype="text" data-linktype="2">JManus - 面向 Java 开发者的开源通用智能体
基于AutoGen的多Agent系统架构设计与工程实践
从规则到Transformer:自然语言处理的演进与变革
深入理解哈达玛积:从零开始掌握深度学习中的关键操作
MCP Server 实践之旅第 3 站:MCP 协议亲和性的技术内幕
来自分析师的洞察:一体化数据库成为 GenAI 时代的数据底座
Spring AI Alibaba + Nacos 动态 MCP Server 代理方案
智领未来:Semantic Kernel 智能体框架如何重塑智能 DevOps 自动化
Qwen2 开源全解读:部署、微调与工程实践
从零开始开发 MCP Server
顶会论文解读
MCP Server 实践之旅第 1 站:MCP 协议解析与云上适配
Semantic Kernel 与 LangChain 比较:探索智能决策与大语言模型的协同作用
MCP 规范新版本特性全景解析与落地实践
小白也能看懂的 MCP 介绍
构建企业级多智能体系统:AutoGen + Semantic Kernel 实践指南
利用自一致性策略与多路径推理,打造下一代 AI 驱动的智能 SRE 系统
深入学习 BERT论文
GGUF 深度学习与应用:本地运行 AI 模型的新标准
LangGraph Agents
RAG实践:探索如何在Colab 上构建 RAG 模型:结合 LlamaIndex 与 HuggingFace
Open-Source-AI-Stack
如何用 Jenkins、OpenAI 和 Conda 打造高效的自动化开发环境?
RAG 调优指南:Spring AI Alibaba 模块化 RAG 原理与使用
新手村教程!用Pandas玩转机器学习中的线性代数
小白也能懂!用Pandas学线性代数核心概念
FlashMLA开源推理框架解析:专为LLM优化的高性能引擎
NVIDIA Hopper架构解析:重新定义AI与超算的硬件基石
深入掌握 Pandas 的 iloc 方法:基于位置的精准数据索引
基于 PyTorch 和 DeepSeek R1 训练智能告警预测模型
使用 pd.get_dummies 进行独热编码:从入门到实践
人工智能|VLLM:解锁大模型推理的终极神器,效率提升10倍!
人工智能|VLLM 技术解析:大模型推理性能优化的工程实践
巧用通义灵码,提升前端研发效率
保姆级教程!DeepSeek+Chatbox 10分钟教会你实现AI客户端应用和智能助手
人工智能|梯度校验与高级优化
人工智能|机器学习:解锁智能时代的密码
人工智能|反向传播算法
人工智能|模型蒸馏
人工智能 |春节入门学习神经网络的基础知识
学习笔记:向量、向量数据库与强化学习
人工智能:提示词实践在运维(SRE/DevOps)领域的应用
提示词生成工具与框架:帮助你提升AI应用的效率与质量
从人工到自动化到AIOps再到ChatOps:大模型在运维领域的应用
人工智能|数据挖掘学习总结:关联分析与Apriori算法
《月狐报告 | AI 产业全景洞察报告 2025》学习
人工智能|学习笔记:从余弦到向量数据库
如何利用AI进行“微调”提升模型表现?从三年级数学到各类应用场景的实践
人工智能|春节阅读DeepSeek-R1 发布,性能对标 OpenAI o1 正式版
打造AI之核心:特征工程的艺术与技巧
人工智能|OpenCV-Python
人工智能|视频识别
人工智能|chatGPT原理理解01
人工智能|Training large language models on Amazon SageMaker
人工智能|What is LSTM?
人工智能|数学基础|回归分析理论
《深度学习入门二》人工“碳”索意犹尽,智能“硅”来未可知
人工智能:深度学习入门一
机器学习|简单线性回归
机器学习|Generative AI
机器学习|cost function 学习
机器学习|学习率
机器学习|房价预测案例学习|sklearn.linear_model LinearRegression
机器学习|数学基础矩阵,逆矩阵,向量空间,线性变换
机器学习|数学基础之概率统计基础
机器学习|相关数学基础理论
机器学习|聚类分析
机器学习|从Prometheus数据中学习
机器学习|深度学习认识
机器学习一些概念理解
机器学习|系统搭建的流程
机器学习概述学习
机器学习|XGBoost算法解析
机器学习:贝叶斯定理学习
机器学习决策树的分裂到底是什么?这篇文章讲明白了!
机器学习从统计学习开始
机器学习的两次浪潮
人工智能:提示词实践在运维(SRE/DevOps)领域的应用
智能化转型:提高业务效率的人工智能代理类型
探索未来科技:计算机科学、人工智能、微电子学与自动化控制的交叉与融合
拥抱人工智能驱动的产业智能革命:从IT硬件到数据核心资产的演变
感知器:人工智能发展的里程碑
人工智能|人工智能领域知名的论文
人工智能|从GPU到PyTorch 训练入门
人工智能|打造你自己的ChatGPT:从数据到部署的完整指南
人工智能,github有哪些开源的知名的人工智能项目
人工智能,开源的大模型有哪些
人工智能,体验 TensorRT 加速 Stable Diffusion 图像创作
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-05-31
RAG(检索增强生成):提升大语言模型性能的终极指南
2025-05-31
DO-RAG:一种使用知识图谱增强检索辅助生成的领域特定问答框架 - 清华大学等
2025-05-30
2025年GitHub上十大RAG框架深度解析:从技术原理到实战应用
2025-05-30
90%企业不知道的RAG优化秘籍:Dify原生集成RAGflow (2)
2025-05-30
RAG其实并没有你想的那么简单,Late Chunking vs Contextual Retrieval解决上下文难题
2025-05-30
基于Gemini与Qdrant构建生产级RAG管道:设计指南与代码实践
2025-05-30
RAG和向量数据库之间有什么关系?
2025-05-30
RAG相关术语快速了解
2024-10-27
2024-09-04
2024-05-05
2024-07-18
2024-06-20
2024-06-13
2024-07-09
2024-07-09
2024-05-19
2024-07-07
2025-05-30
2025-05-29
2025-05-29
2025-05-23
2025-05-16
2025-05-15
2025-05-14
2025-05-14