引言
在现代信息管理中,为文档添加结构化元数据(如标题、语调或长度)有助于提高后续相似性搜索的精准度。然而,对于大量文档,手动进行标签化过程既耗时又乏味。本文将介绍如何使用OpenAI Metadata Tagger来自动提取文档元数据,从而实现高效文档管理。
主要内容
1. OpenAI Metadata Tagger概述
OpenAI Metadata Tagger是一种文档转换器,通过OpenAI Function驱动的链,依据提供的模式从每个文档提取元数据。使用时需要传递一个支持函数的OpenAI模型。
2. 设置与使用
2.1 初始化文档转换器
假设需要对一组电影评论进行标签化,可以使用有效的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"],
}
llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo-0613") # 使用API代理服务提高访问稳定性
document_transformer = create_metadata_tagger(metadata_schema=schema, llm=llm)
2.2 文档标签化
可以直接将文档列表传递给文档转换器,从内容中提取元数据:
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模式初始化文档转换器:
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)
print(
*[d.page_content + "\n\n" + json.dumps(d.metadata) for d in enhanced_documents],
sep="\n\n---------------\n\n",
)
常见问题和解决方案
-
网络访问问题
- 由于某些地区的网络限制,开发者可能需要使用API代理服务来提高访问稳定性。
-
不完整文档
- 确保先对完整文档进行转换,再进行任何分割或处理。
总结和进一步学习资源
OpenAI Metadata Tagger为文档自动化标记提供了一种便捷且高效的解决方案。为了进一步探索这项技术,可以查阅以下资源:
参考资料
- OpenAI API 文档
- LangChain 项目指南
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---