引言
在大规模文档管理中,给文档标注结构化的元数据(如标题、语调或长度)是至关重要的。这不仅有助于后续更精准的相似性搜索,也提升了整体检索效率。然而,手动执行这一过程既费时又费力。为了解决这一挑战,本文将介绍如何使用OpenAI Metadata Tagger自动化提取元数据,帮助开发者更轻松地管理大量文档。
主要内容
OpenAI Metadata Tagger简介
OpenAI Metadata Tagger是一个文档转换器,能够根据预定义的模式从文档中自动提取元数据。它使用了可配置的OpenAI Functions驱动的链,因此,若使用自定义的LLM实例,必须是支持函数的OpenAI模型。需要注意的是,这个文档转换器在处理完整文档时效果最佳,因此建议在进行任何其他拆分或处理前先执行此操作。
如何配置元数据提取
假设我们想要索引一组电影评论。我们可以通过以下方式初始化文档转换器,使用有效的JSON Schema对象定义我们的元数据提取需求:
from langchain_community.document_transformers.openai_functions import create_metadata_tagger
from langchain_core.documents import Document
from langchain_openai import ChatOpenAI
schema = {
"properties": {
"movie_title": {"type": "string"},
"critic": {"type": "string"},
"tone": {"type": "string", "enum": ["positive", "negative"]},
"rating": {"type": "integer", "description": "The number of stars the critic rated the movie"},
},
"required": ["movie_title", "critic", "tone"],
}
# 必须是支持函数的OpenAI模型
llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo-0613") # 使用API代理服务提高访问稳定性
document_transformer = create_metadata_tagger(metadata_schema=schema, llm=llm)
使用文档转换器提取元数据
一旦配置完成,可以将文档列表传递给文档转换器,并从内容中提取元数据:
original_documents = [
Document(page_content="Review of The Bee Movie\nBy Roger Ebert\n\nThis is the greatest movie ever made. 4 out of 5 stars."),
Document(page_content="Review of The Godfather\nBy Anonymous\n\nThis movie was super boring. 1 out of 5 stars.", metadata={"reliable": False}),
]
enhanced_documents = document_transformer.transform_documents(original_documents)
import json
print(
*[d.page_content + "\n\n" + json.dumps(d.metadata) for d in enhanced_documents],
sep="\n\n---------------\n\n",
)
定制化和Pydantic模式
文档转换器还支持通过Pydantic架构定义元数据提取规则,从而实现更高的灵活性。
from typing import Literal
from pydantic import BaseModel, Field
class Properties(BaseModel):
movie_title: str
critic: str
tone: Literal["positive", "negative"]
rating: int = Field(description="Rating out of 5 stars")
document_transformer = create_metadata_tagger(Properties, llm)
enhanced_documents = document_transformer.transform_documents(original_documents)
常见问题和解决方案
- 网络限制:在使用API时,由于某些地区的网络限制,开发者可能需要考虑使用API代理服务以提高访问稳定性。
- 文档完整性:确保在进行任何拆分或处理前使用完整文档以获得最佳效果。
总结和进一步学习资源
通过OpenAI Metadata Tagger,开发者可以显著提高文档管理和索引的效率。本文仅触及了该工具的一部分功能,以下是一些进一步学习资源:
参考资料
- Langchain官方文档
- OpenAI API官方文档
- Pydantic官方文档
结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---