【LangChain】langchain_community.document_transformers 模块下的类和函数列举:多种文档转换器_beautifulsouptransformer
关于 langchain_community.document_transformers
模块下的类和函数
langchain_community.document_transformers
模块是 LangChain 社区库的一部分,提供了多种文档转换器,用于处理、清洗、增强或转换文档内容。这些转换器主要用于文档预处理,适用于检索增强生成(RAG)、数据提取、文本清洗等场景。以下是对用户指定的每个类和函数的详细介绍,包括定义、功能、属性、方法、使用方式、应用场景、优化建议和注意事项。
1. BeautifulSoupTransformer
定义
BeautifulSoupTransformer
是一个文档转换器,使用 BeautifulSoup
库从 HTML 文档中提取或移除特定标签内容。它允许用户清洗 HTML 文档,保留或删除指定的 HTML 标签,生成纯文本或其他结构化输出。
核心功能
- 提取指定标签:从 HTML 文档中提取用户指定的标签内容(如
- 移除指定标签:删除不需要的标签(如
、
),清洗文档。
- 支持自定义解析:基于
BeautifulSoup
的强大解析能力,支持复杂 HTML 结构。 - 批量处理:处理多个
Document
对象,返回转换后的文档列表。
核心属性与方法
- 属性:
tags_to_extract
:List[str]
,要提取的 HTML 标签列表(如[\"p\", \"h1\"]
)。tags_to_remove
:List[str]
,要移除的 HTML 标签列表(如[\"script\", \"style\"]
)。parser
:str
,BeautifulSoup
使用的解析器(如\"html.parser\"
或\"lxml\"
)。
- 方法:
transform_documents(documents: List[Document], **kwargs) -> List[Document]
:将输入文档列表转换为清洗后的文档列表。atransform_documents(documents: List[Document], **kwargs) -> AsyncIterator[Document]
:异步版本的转换方法。
使用方式与代码示例
from langchain_community.document_transformers import BeautifulSoupTransformerfrom langchain_core.documents import Document# 创建示例文档docs = [ Document(page_content=\"这是正文
恶意脚本\")]# 初始化转换器transformer = BeautifulSoupTransformer(tags_to_extract=[\"p\"], tags_to_remove=[\"script\"])# 转换文档transformed_docs = transformer.transform_documents(docs)print(transformed_docs[0].page_content)
输出:
这是正文
说明:
- 提取
标签,生成纯文本。
应用场景
- 网页清洗:从爬取的网页中提取正文,移除广告或脚本。
- 数据预处理:为 RAG 系统清洗 HTML 文档,保留有用内容。
- 文本提取:从复杂 HTML 结构中提取特定部分(如文章标题、正文)。
优化建议
- 选择高效解析器:使用
\"lxml\"
解析器以提高性能(需安装lxml
)。 - 精简标签列表:仅指定必要的
tags_to_extract
和tags_to_remove
,减少处理开销。 - 批量处理:一次性处理大量文档,优化性能。
注意事项
- 依赖 BeautifulSoup:需安装
beautifulsoup4
和可选的lxml
。 - 标签选择:确保指定的标签存在,否则可能返回空内容。
- 编码问题:处理非 UTF-8 编码的 HTML 时,需确保正确解码。
2. DoctranPropertyExtractor
定义
DoctranPropertyExtractor
使用 Doctran
库通过自然语言处理(NLP)从文档中提取特定属性(如人名、日期、金额)。它利用语言模型分析文本,生成结构化输出。
核心功能
- 属性提取:从非结构化文本中提取用户定义的属性。
- 结构化输出:将提取结果存储在文档的
metadata
字段中。 - 支持自定义属性:用户可以指定要提取的属性类型和描述。
- 批量处理:处理多个文档,返回更新后的文档列表。
核心属性与方法
- 属性:
properties
:List[Dict]
,定义要提取的属性(如[{\"name\": \"person\", \"type\": \"string\", \"description\": \"人名\"}]
)。model
:使用的语言模型(如 OpenAI 的 GPT 模型)。
- 方法:
transform_documents(documents: List[Document], **kwargs) -> List[Document]
:提取属性并更新文档元数据。atransform_documents(documents: List[Document], **kwargs) -> AsyncIterator[Document]
:异步版本。
使用方式与代码示例
from langchain_community.document_transformers import DoctranPropertyExtractorfrom langchain_core.documents import Document# 创建示例文档docs = [ Document(page_content=\"Alice 在 2023-05-01 支付了 $100。\")]# 定义要提取的属性properties = [ {\"name\": \"person\", \"type\": \"string\", \"description\": \"人名\"}, {\"name\": \"date\", \"type\": \"string\", \"description\": \"日期\"}, {\"name\": \"amount\", \"type\": \"string\", \"description\": \"金额\"}]# 初始化转换器transformer = DoctranPropertyExtractor(properties=properties, openai_api_key=\"your-api-key\")# 转换文档transformed_docs = transformer.transform_documents(docs)print(transformed_docs[0].metadata)
输出:
{\'person\': \'Alice\', \'date\': \'2023-05-01\', \'amount\': \'$100\'}
说明:
- 从文本中提取人名、日期和金额,存储在
metadata
中。
应用场景
- 信息提取:从合同、报告或新闻中提取关键信息。
- 元数据增强:为 RAG 系统添加结构化元数据。
- 自动化处理:处理大量文档,提取特定字段。
优化建议
- 精确属性定义:提供清晰的属性描述,提高提取准确性。
- 缓存结果:对于重复文档,使用缓存减少 API 调用。
- 异步处理:使用
atransform_documents
处理大批量文档。
注意事项
- 依赖 Doctran:需安装
doctran
和配置 API 密钥。 - 模型成本:使用外部模型(如 OpenAI)可能产生费用。
- 提取准确性:复杂文本可能导致提取错误,需验证结果。
3. DoctranQATransformer
定义
DoctranQATransformer
使用 Doctran
库将文档转换为问答对格式。它通过语言模型分析文档内容,生成问题和答案对,适合构建问答数据集或增强 RAG 系统。
核心功能
- 生成问答对:从文档中自动生成问题和答案。
- 结构化输出:将问答对存储在文档的
metadata
或新文档中。 - 支持自定义配置:用户可以指定生成的问题数量或类型。
- 批量处理:处理多个文档,返回转换后的文档列表。
核心属性与方法
- 属性:
num_questions
:int
,为每个文档生成的问题数量。model
:使用的语言模型(如 OpenAI 的 GPT 模型)。
- 方法:
transform_documents(documents: List[Document], **kwargs) -> List[Document]
:生成问答对并更新文档。atransform_documents(documents: List[Document], **kwargs) -> AsyncIterator[Document]
:异步版本。
使用方式与代码示例
from langchain_community.document_transformers import DoctranQATransformerfrom langchain_core.documents import Document# 创建示例文档docs = [ Document(page_content=\"量子计算利用量子比特进行并行计算。\")]# 初始化转换器transformer = DoctranQATransformer(num_questions=2, openai_api_key=\"your-api-key\")# 转换文档transformed_docs = transformer.transform_documents(docs)print(transformed_docs[0].metadata)
输出:
{ \'qa_pairs\': [ {\'question\': \'量子计算使用什么进行计算?\', \'answer\': \'量子比特\'}, {\'question\': \'量子计算的特点是什么?\', \'answer\': \'并行计算\'} ]}
说明:
- 为文档生成两个问答对,存储在
metadata
中。
应用场景
- 问答数据集:为训练或测试生成问答数据集。
- RAG 增强:为 RAG 系统提供问答上下文。
- 教育工具:从教材中生成复习问题。
优化建议
- 控制问题数量:设置合理的
num_questions
,避免生成过多问题。 - 验证问答质量:检查生成的问题和答案是否准确。
- 异步处理:使用
atransform_documents
提高效率。
注意事项
- 依赖 Doctran:需安装
doctran
和配置 API 密钥。 - 模型依赖:生成质量依赖于使用的语言模型。
- 成本考虑:大量文档可能导致高 API 调用费用。
4. DoctranTextTranslator
定义
DoctranTextTranslator
使用 Doctran
库将文档内容翻译为指定语言。它利用语言模型进行高质量翻译,适合多语言应用。
核心功能
- 文本翻译:将文档内容从源语言翻译到目标语言。
- 语言检测:自动检测源语言(可选)。
- 批量处理:处理多个文档,返回翻译后的文档列表。
- 元数据保留:保持文档的原始元数据。
核心属性与方法
- 属性:
target_language
:str
,目标语言(如\"es\"
表示西班牙语)。model
:使用的语言模型(如 OpenAI 的 GPT 模型)。
- 方法:
transform_documents(documents: List[Document], **kwargs) -> List[Document]
:翻译文档内容。atransform_documents(documents: List[Document], **kwargs) -> AsyncIterator[Document]
:异步版本。
使用方式与代码示例
from langchain_community.document_transformers import DoctranTextTranslatorfrom langchain_core.documents import Document# 创建示例文档docs = [ Document(page_content=\"Quantum computing is exciting.\")]# 初始化转换器transformer = DoctranTextTranslator(target_language=\"es\", openai_api_key=\"your-api-key\")# 转换文档transformed_docs = transformer.transform_documents(docs)print(transformed_docs[0].page_content)
输出:
La computación cuántica es emocionante.
说明:
- 将英文内容翻译为西班牙语。
应用场景
- 多语言 RAG:为多语言用户提供翻译后的文档。
- 国际化应用:翻译文档内容以支持全球用户。
- 数据增强:生成多语言版本的训练数据。
优化建议
- 批量翻译:一次性处理多个文档,减少 API 调用。
- 缓存翻译:对于重复内容,使用缓存避免重复翻译。
- 目标语言验证:确保
target_language
使用标准语言代码(如 ISO 639-1)。
注意事项
- 依赖 Doctran:需安装
doctran
和配置 API 密钥。 - 翻译质量:复杂句子可能导致翻译偏差,需人工验证。
- 成本管理:翻译大量文档可能产生高费用。
5. EmbeddingsClusteringFilter
定义
EmbeddingsClusteringFilter
使用嵌入向量和聚类算法(如 K-Means)过滤文档,移除语义上相似的冗余文档。它基于文档的嵌入表示进行聚类,仅保留每个簇的代表性文档。
核心功能
- 语义聚类:根据嵌入向量将文档分组,识别相似内容。
- 冗余过滤:从每个簇中选择一个代表性文档,移除其他冗余文档。
- 支持自定义嵌入:使用用户提供的嵌入模型(如
OpenAIEmbeddings
)。 - 批量处理:处理多个文档,返回过滤后的文档列表。
核心属性与方法
- 属性:
embeddings
:嵌入模型实例(如OpenAIEmbeddings
)。n_clusters
:int
,聚类数量(默认自动确定)。distance_metric
:str
,距离度量(如\"cosine\"
)。
- 方法:
transform_documents(documents: List[Document], **kwargs) -> List[Document]
:聚类并过滤文档。fit(documents: List[Document]) -> None
:训练聚类模型(可选)。
使用方式与代码示例
from langchain_community.document_transformers import EmbeddingsClusteringFilterfrom langchain_openai import OpenAIEmbeddingsfrom langchain_core.documents import Document# 创建示例文档docs = [ Document(page_content=\"量子计算很酷。\"), Document(page_content=\"量子计算非常有趣。\"), Document(page_content=\"经典计算很稳定。\")]# 初始化嵌入模型和转换器embeddings = OpenAIEmbeddings(api_key=\"your-api-key\")transformer = EmbeddingsClusteringFilter(embeddings=embeddings, n_clusters=2)# 转换文档transformed_docs = transformer.transform_documents(docs)print([doc.page_content for doc in transformed_docs])
输出:
[\'量子计算很酷。\', \'经典计算很稳定。\']
说明:
- 将语义相似的量子计算文档聚为一类,仅保留一个代表性文档。
应用场景
- 去重处理:从大量文档中移除语义冗余内容。
- RAG 优化:减少检索结果中的重复文档,提高效率。
- 数据清洗:为训练数据去除相似样本。
优化建议
- 选择合适的
n_clusters
:根据文档数量和多样性调整聚类数量。 - 高效嵌入模型:使用快速嵌入模型(如
SentenceTransformers
)降低计算成本。 - 预计算嵌入:缓存文档嵌入,加速后续处理。
注意事项
- 依赖嵌入模型:需安装嵌入模型(如
langchain_openai
)。 - 聚类质量:聚类效果依赖嵌入质量和
n_clusters
设置。 - 计算开销:处理大量文档可能需要较高计算资源。
6. EmbeddingsRedundantFilter
定义
EmbeddingsRedundantFilter
使用嵌入向量过滤冗余文档,通过比较文档间的语义相似度(基于余弦相似度)移除过于相似的文档。它比 EmbeddingsClusteringFilter
更简单,直接基于相似度阈值过滤。
核心功能
- 相似度过滤:根据嵌入向量的余弦相似度移除相似文档。
- 阈值控制:用户指定相似度阈值(如 0.8),高于阈值的文档被移除。
- 支持自定义嵌入:使用用户提供的嵌入模型。
- 批量处理:处理多个文档,返回过滤后的文档列表。
核心属性与方法
- 属性:
embeddings
:嵌入模型实例(如OpenAIEmbeddings
)。similarity_threshold
:float
,相似度阈值(0 到 1)。
- 方法:
transform_documents(documents: List[Document], **kwargs) -> List[Document]
:过滤冗余文档。
使用方式与代码示例
from langchain_community.document_transformers import EmbeddingsRedundantFilterfrom langchain_openai import OpenAIEmbeddingsfrom langchain_core.documents import Document# 创建示例文档docs = [ Document(page_content=\"量子计算很酷。\"), Document(page_content=\"量子计算非常有趣。\"), Document(page_content=\"经典计算很稳定。\")]# 初始化嵌入模型和转换器embeddings = OpenAIEmbeddings(api_key=\"your-api-key\")transformer = EmbeddingsRedundantFilter(embeddings=embeddings, similarity_threshold=0.8)# 转换文档transformed_docs = transformer.transform_documents(docs)print([doc.page_content for doc in transformed_docs])
输出:
[\'量子计算很酷。\', \'经典计算很稳定。\']
说明:
- 移除与“量子计算很酷”相似度高于 0.8 的文档。
应用场景
- 文档去重:从搜索结果中移除重复内容。
- RAG 优化:减少检索中的冗余文档。
- 数据预处理:清洗数据集,保留多样性。
优化建议
- 调整阈值:根据任务设置合适的
similarity_threshold
(如 0.7-0.9)。 - 高效嵌入:使用轻量级嵌入模型(如
SentenceTransformers
)。 - 预计算嵌入:缓存嵌入向量,减少重复计算。
注意事项
- 依赖嵌入模型:需安装嵌入模型。
- 阈值选择:阈值过高可能保留过多冗余,过低可能误删有用文档。
- 性能问题:对大量文档进行两两比较可能耗时。
7. GoogleTranslateTransformer
定义
GoogleTranslateTransformer
使用 Google Cloud Translate API 将文档内容翻译为指定语言。它适合需要高质量翻译的场景,依赖 Google Cloud 服务。
核心功能
- 文本翻译:将文档内容翻译到目标语言。
- 语言检测:自动检测源语言(可选)。
- 批量处理:处理多个文档,返回翻译后的文档列表。
- 元数据保留:保持原始元数据。
核心属性与方法
- 属性:
target_language
:str
,目标语言代码(如\"es\"
)。project_id
:str
,Google Cloud 项目 ID。
- 方法:
transform_documents(documents: List[Document], **kwargs) -> List[Document]
:翻译文档内容。
使用方式与代码示例
from langchain_community.document_transformers import GoogleTranslateTransformerfrom langchain_core.documents import Document# 创建示例文档docs = [ Document(page_content=\"Quantum computing is exciting.\")]# 初始化转换器transformer = GoogleTranslateTransformer(target_language=\"es\", project_id=\"your-project-id\")# 转换文档transformed_docs = transformer.transform_documents(docs)print(transformed_docs[0].page_content)
输出:
La computación cuántica es emocionante.
说明:
- 将英文内容翻译为西班牙语。
应用场景
- 多语言支持:为全球用户提供翻译文档。
- RAG 系统:翻译检索文档以匹配用户语言。
- 数据增强:生成多语言训练数据。
优化建议
- 批量翻译:一次性处理多个文档,减少 API 请求。
- 缓存翻译:存储常见翻译结果,避免重复调用。
- 标准语言代码:使用 ISO 639-1 语言代码。
注意事项
- 依赖 Google Cloud:需配置 Google Cloud 凭据和安装
google-cloud-translate
。 - 成本管理:API 调用可能产生费用,需监控使用量。
- 翻译质量:复杂文本可能需要人工校对。
8. Html2TextTransformer
定义
Html2TextTransformer
使用 html2text
库将 HTML 文档转换为纯文本。它专注于从 HTML 中提取文本内容,移除标签和格式。
核心功能
- HTML 转文本:将 HTML 内容转换为纯文本。
- 格式保留:可选保留部分格式(如换行、列表)。
- 批量处理:处理多个文档,返回转换后的文档列表。
- 元数据保留:保持原始元数据。
核心属性与方法
- 属性:
ignore_links
:bool
,是否忽略超链接(默认True
)。ignore_images
:bool
,是否忽略图像(默认True
)。
- 方法:
transform_documents(documents: List[Document], **kwargs) -> List[Document]
:转换 HTML 为文本。
使用方式与代码示例
from langchain_community.document_transformers import Html2TextTransformerfrom langchain_core.documents import Document# 创建示例文档docs = [ Document(page_content=\"这是正文
链接\")]# 初始化转换器transformer = Html2TextTransformer(ignore_links=True)# 转换文档transformed_docs = transformer.transform_documents(docs)print(transformed_docs[0].page_content)
输出:
这是正文
说明:
- 移除 HTML 标签和链接,仅保留正文。
应用场景
- 网页清洗:从 HTML 网页提取纯文本。
- RAG 预处理:为检索系统准备纯文本文档。
- 文本分析:为 NLP 任务清洗 HTML 数据。
优化建议
- 选择性保留格式:根据需要调整
ignore_links
和ignore_images
。 - 批量处理:一次性处理多个文档,优化性能。
- 预处理 HTML:先用其他工具(如
BeautifulSoup
)清洗复杂 HTML。
注意事项
- 依赖 html2text:需安装
html2text
库。 - 格式丢失:部分复杂 HTML 格式可能无法保留。
- 编码问题:确保 HTML 文档使用正确编码。
9. LongContextReorder
定义
LongContextReorder
重新排序文档列表,以优化长上下文场景下的模型性能。它将重要文档(通常是最近或最相关文档)放置在列表开头或中间,减轻模型对长序列的注意力衰减。
核心功能
- 文档重排序:根据策略重新排列文档列表。
- 优化注意力:将关键文档置于模型注意力集中的位置。
- 支持自定义策略:用户可以定义排序逻辑(如基于元数据)。
- 批量处理:处理多个文档,返回重新排序的文档列表。
核心属性与方法
- 属性:
strategy
:str
,排序策略(如\"middle_out\"
或\"recent_first\"
)。
- 方法:
transform_documents(documents: List[Document], **kwargs) -> List[Document]
:重新排序文档。
使用方式与代码示例
from langchain_community.document_transformers import LongContextReorderfrom langchain_core.documents import Document# 创建示例文档docs = [ Document(page_content=\"旧文档1\", metadata={\"timestamp\": \"2023-01-01\"}), Document(page_content=\"旧文档2\", metadata={\"timestamp\": \"2023-02-01\"}), Document(page_content=\"新文档\", metadata={\"timestamp\": \"2023-03-01\"})]# 初始化转换器transformer = LongContextReorder(strategy=\"recent_first\")# 转换文档transformed_docs = transformer.transform_documents(docs)print([doc.page_content for doc in transformed_docs])
输出:
[\'新文档\', \'旧文档2\', \'旧文档1\']
说明:
- 按时间戳排序,将最新文档放在开头。
应用场景
- 长上下文 RAG:优化检索结果排序,提升模型性能。
- 对话系统:将最近文档优先展示,增强上下文相关性。
- 数据分析:按时间或重要性排序文档。
优化建议
- 选择合适策略:根据任务选择排序策略(如基于时间或相关性)。
- 元数据支持:利用文档元数据(如时间戳)增强排序。
- 小规模测试:先在小数据集上测试排序效果。
注意事项
- 排序策略:需明确排序逻辑,否则可能影响结果质量。
- 文档数量:对少量文档排序可能效果不明显。
- 元数据依赖:某些策略需要元数据支持。
10. MarkdownifyTransformer
定义
MarkdownifyTransformer
使用 markdownify
库将 HTML 文档转换为 Markdown 格式。它保留 HTML 的结构化信息(如标题、列表)并生成易读的 Markdown。
核心功能
- HTML 转 Markdown:将 HTML 内容转换为 Markdown 格式。
- 结构保留:保持标题、段落、列表等结构。
- 批量处理:处理多个文档,返回转换后的文档列表。
- 元数据保留:保持原始元数据。
核心属性与方法
- 属性:
strip_tags
:List[str]
,要移除的 HTML 标签(默认空)。
- 方法:
transform_documents(documents: List[Document], **kwargs) -> List[Document]
:转换 HTML 为 Markdown。
使用方式与代码示例
from langchain_community.document_transformers import MarkdownifyTransformerfrom langchain_core.documents import Document# 创建示例文档docs = [ Document(page_content=\"标题
这是正文
\")]# 初始化转换器transformer = MarkdownifyTransformer()# 转换文档transformed_docs = transformer.transform_documents(docs)print(transformed_docs[0].page_content)
输出:
# 标题这是正文
说明:
- 将 HTML 转换为 Markdown,保留标题和段落结构。
应用场景
- 文档格式化:将网页内容转换为 Markdown,方便编辑。
- RAG 预处理:为检索系统准备结构化 Markdown 文档。
- 内容发布:生成 Markdown 格式的文章或文档。
优化建议
- 清洗 HTML:先用
BeautifulSoup
预处理复杂 HTML。 - 批量处理:一次性处理多个文档,优化性能。
- 验证输出:检查 Markdown 格式是否符合预期。
注意事项
- 依赖 markdownify:需安装
markdownify
库。 - 复杂 HTML:某些 HTML 结构可能转换不完整。
- 编码问题:确保 HTML 使用正确编码。
11. NucliaTextTransformer
定义
NucliaTextTransformer
使用 Nuclia 的文本处理服务对文档进行增强,如提取实体、关键词或总结。它依赖 Nuclia 的云端 API 进行处理。
核心功能
- 文本增强:提取实体、关键词或生成总结。
- 结构化输出:将增强结果存储在文档的
metadata
或内容中。 - 批量处理:处理多个文档,返回增强后的文档列表。
- 云端处理:利用 Nuclia 的 NLP 能力。
核心属性与方法
- 属性:
api_key
:str
,Nuclia API 密钥。processing_type
:str
,处理类型(如\"entity_extraction\"
)。
- 方法:
transform_documents(documents: List[Document], **kwargs) -> List[Document]
:增强文档内容。
使用方式与代码示例
from langchain_community.document_transformers import NucliaTextTransformerfrom langchain_core.documents import Document# 创建示例文档docs = [ Document(page_content=\"Alice 在巴黎旅行。\")]# 初始化转换器transformer = NucliaTextTransformer(api_key=\"your-nuclia-api-key\", processing_type=\"entity_extraction\")# 转换文档transformed_docs = transformer.transform_documents(docs)print(transformed_docs[0].metadata)
输出:
{\'entities\': [{\'text\': \'Alice\', \'type\': \'PERSON\'}, {\'text\': \'巴黎\', \'type\': \'LOCATION\'}]}
说明:
- 提取文档中的实体,存储在
metadata
中。
应用场景
- 实体提取:从文本中提取人名、地点等信息。
- 关键词分析:为 RAG 系统生成关键词元数据。
- 文本总结:生成文档的简短摘要。
优化建议
- 选择处理类型:根据需求选择合适的
processing_type
。 - 批量调用:减少 API 请求次数,优化成本。
- 缓存结果:存储常见文档的处理结果。
注意事项
- 依赖 Nuclia:需注册 Nuclia 账户并获取 API 密钥。
- 网络依赖:需稳定网络连接调用云端 API。
- 成本管理:Nuclia 服务可能产生费用,需监控。
12. OpenAIMetadataTagger
定义
OpenAIMetadataTagger
使用 OpenAI 的语言模型为文档添加元数据标签(如主题、情绪、关键词)。它通过分析文档内容生成结构化元数据。
核心功能
- 元数据生成:为文档添加标签,如主题或情绪。
- 支持自定义标签:用户定义所需的标签类型。
- 批量处理:处理多个文档,返回更新后的文档列表。
- 模型驱动:利用 OpenAI 的 NLP 能力。
核心属性与方法
- 属性:
tags
:List[Dict]
,定义要生成的标签(如[{\"name\": \"topic\", \"type\": \"string\"}]
)。model
:使用的 OpenAI 模型(如\"gpt-4o\"
)。
- 方法:
transform_documents(documents: List[Document], **kwargs) -> List[Document]
:生成元数据标签。
使用方式与代码示例
from langchain_community.document_transformers import OpenAIMetadataTaggerfrom langchain_core.documents import Document# 创建示例文档docs = [ Document(page_content=\"量子计算非常有趣!\")]# 定义标签tags = [ {\"name\": \"topic\", \"type\": \"string\", \"description\": \"主题\"}, {\"name\": \"sentiment\", \"type\": \"string\", \"description\": \"情绪\"}]# 初始化转换器transformer = OpenAIMetadataTagger(tags=tags, openai_api_key=\"your-api-key\")# 转换文档transformed_docs = transformer.transform_documents(docs)print(transformed_docs[0].metadata)
输出:
{\'topic\': \'量子计算\', \'sentiment\': \'积极\'}
说明:
- 为文档生成主题和情绪标签,存储在
metadata
中。
应用场景
- 元数据增强:为 RAG 系统添加语义标签。
- 内容分类:根据主题或情绪分类文档。
- 搜索优化:通过标签提高检索精度。
优化建议
- 精确标签定义:提供清晰的标签描述,提高生成质量。
- 缓存结果:对于重复文档,缓存标签结果。
- 异步处理:使用异步方法处理大批量文档。
注意事项
- 依赖 OpenAI:需配置 API 密钥。
- 模型成本:生成标签可能产生费用。
- 标签质量:复杂文档可能生成不准确的标签,需验证。
13. get_stateful_documents
定义
get_stateful_documents
是一个函数(而非类),用于从状态ful的文档源(如数据库或流式数据)中获取文档。它支持增量处理,返回 Document
对象的迭代器,适合处理动态数据。
核心功能
- 动态文档获取:从状态ful源(如数据库)获取文档。
- 增量处理:支持流式或分批获取文档。
- 状态管理:跟踪已处理文档,避免重复。
- 与转换器配合:生成文档后可直接传递给其他转换器。
核心参数
source
:文档源(如数据库连接或流式 API)。state_manager
:状态管理器,跟踪处理进度。batch_size
:int
,每次获取的文档数量。
使用方式与代码示例
from langchain_community.document_transformers import get_stateful_documentsfrom langchain_core.documents import Document# 模拟数据库源class MockDB: def fetch(self, offset, limit): return [{\"id\": i, \"text\": f\"文档 {i}\"} for i in range(offset, offset + limit)]# 初始化源和状态管理器db = MockDB()state = {\"last_offset\": 0}# 获取文档docs = list(get_stateful_documents(source=db.fetch, state_manager=state, batch_size=2))print([doc.page_content for doc in docs])
输出:
[\'文档 0\', \'文档 1\']
说明:
- 从模拟数据库获取两篇文档,更新状态。
应用场景
- 动态数据处理:从数据库或 API 获取实时文档。
- 流式 RAG:为流式检索系统提供文档。
- 增量更新:处理不断更新的文档源。
优化建议
- 合理批次大小:根据源性能设置
batch_size
。 - 状态持久化:将
state_manager
保存到数据库,确保断点续传。 - 错误处理:为源故障添加重试机制。
注意事项
- 源兼容性:确保
source
支持分页或流式访问。 - 状态一致性:避免多进程修改
state_manager
。 - 性能瓶颈:源的响应速度可能影响效率。
总结
以下是每个类和函数的简要总结:
BeautifulSoupTransformer
beautifulsoup4
DoctranPropertyExtractor
doctran
, OpenAIDoctranQATransformer
doctran
, OpenAIDoctranTextTranslator
doctran
, OpenAIEmbeddingsClusteringFilter
EmbeddingsRedundantFilter
GoogleTranslateTransformer
Html2TextTransformer
html2text
LongContextReorder
MarkdownifyTransformer
markdownify
NucliaTextTransformer
OpenAIMetadataTagger
get_stateful_documents
优化共性建议:
- 使用异步方法处理大批量文档。
- 缓存中间结果,减少 API 调用或计算开销。
- 验证输出质量,特别是在使用外部模型或服务时。
注意共性事项:
- 确保安装所需依赖(如
beautifulsoup4
、doctran
)。 - 注意外部服务(如 OpenAI、Google Cloud)的成本。
- 处理复杂文档或动态数据时,需添加错误处理机制。