# 从无结构文本中提取结构化信息的终极指南
## 引言
在现代数据驱动的世界中,从无结构文本中提取有用的信息变得日益重要。无论是将文本输入到机器学习模型中,还是自动化数据分析,提取结构化信息都是关键步骤。这篇文章将带您构建一个链,利用大语言模型(LLM)从无结构文本中提取结构化信息。
## 主要内容
### 先决条件
该指南假定您已熟悉以下概念:
- 聊天模型
- 工具
- 工具调用
### 环境设置
使用Jupyter Notebook的交互式环境,可以轻松学习和调试。您可以在[这里](https://jupyter.org/install)找到安装说明。
### 安装LangChain
使用以下命令安装LangChain:
```sh
pip install langchain
或者如果您使用Conda:
conda install langchain -c conda-forge
详细信息参考安装指南。
使用LangSmith进行调试
LangSmith提供了可视化追踪功能,帮助您查看链或代理中的内在运行情况。注册LangSmith后,配置环境变量以启用日志记录:
import getpass
import os
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = getpass.getpass()
定义信息架构
我们将使用Pydantic定义一个信息架构来提取个人信息:
from typing import Optional
from langchain_core.pydantic_v1 import BaseModel, Field
class Person(BaseModel):
name: Optional[str] = Field(default=None, description="The name of the person")
hair_color: Optional[str] = Field(default=None, description="The color of the person's hair if known")
height_in_meters: Optional[str] = Field(default=None, description="Height measured in meters")
确保架构有良好的文档,并允许LLM在没有信息时返回None。
信息提取器
创建一个信息提取器来使用上述架构:
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
prompt = ChatPromptTemplate.from_messages(
[
("system", "You are an expert extraction algorithm. [...] return null for the attribute's value."),
("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)
此示例展示了如何从文本中提取信息,并自动转换单位。
代码示例
以下代码示例演示了如何提取多个实体:
from typing import List, Optional
from langchain_core.pydantic_v1 import BaseModel, Field
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)
此代码提供了从文本中提取多个实体的能力,并且在无信息时返回空列表。
常见问题和解决方案
- 如何提高提取质量? 使用参考示例和文档化的架构描述可以显著提高提取性能。
- 如何处理长文本? 将文本分块或使用具有更大上下文窗口的模型。
总结和进一步学习资源
您现在已经掌握了使用LangChain进行文本信息提取的基础知识。探索以下资源进一步提升您的技能:
参考资料
- LangChain官方文档
- Pydantic用户指南
- Jupyter Notebook安装指南
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!