# 从非结构化文本中提取结构化信息:构建你的第一个抽取链
## 引言
在现代信息时代,非结构化文本数据无处不在,如社交媒体、新闻报道和用户评论等。为了利用这些数据,我们需要将其转换为结构化格式。这篇文章将指导你如何使用LangChain构建一个抽取链,以从非结构化文本中提取有用的信息。
## 主要内容
### 工具和环境设置
为了开始我们的项目,请确保你已安装LangChain。以下是安装步骤:
```bash
pip install langchain
# 或者,如果使用Conda
conda install langchain -c conda-forge
另外,我们强烈建议使用Jupyter Notebook来进行开发和测试。它提供了一个交互式环境,非常适合实验和调试。
建立信息提取模型
首先,我们需要定义一个信息提取的模式。这里,我们使用Pydantic来描述我们想要提取的个人信息的结构。
from typing import Optional
from langchain_core.pydantic_v1 import BaseModel, Field
class Person(BaseModel):
"""Information about a person."""
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")
创建抽取链
接下来,我们创建一个抽取链,使用我们定义的模式。我们利用LangChain的工具调用功能,通过自定义提示模板来实现信息抽取。
from langchain_core.prompts import ChatPromptTemplate
from langchain_mistralai import ChatMistralAI
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个专家级的信息抽取算法,只从文本中提取相关信息。"),
("human", "{text}")
])
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."
result = runnable.invoke({"text": text})
print(result)
# 输出: Person(name='Alan Smith', hair_color='blond', height_in_meters='1.83')
处理多个实体
我们可以扩展模式以处理多个实体。通过嵌套模型,我们能够从文本中提取多个个人的信息。
from typing import List
class Data(BaseModel):
"""Extracted data about people."""
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."
result = runnable.invoke({"text": text})
print(result)
# 输出: Data(people=[Person(name='Jeff', hair_color=None, height_in_meters=None), Person(name='Anna', hair_color=None, height_in_meters=None)])
常见问题和解决方案
- 提取结果不准确或不完整:尝试在提示模板中添加参考示例以提高模型的性能。
- 长文本处理:当文本长度超过模型上下文窗口时,可以考虑分段处理或使用摘要方法。
- API访问问题:由于网络限制,在某些地区可能需要使用API代理服务来提高访问稳定性。
总结与进一步学习资源
通过这篇文章,你学习了如何使用LangChain构建一个信息抽取链。接下来,你可以深入研究以下主题:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---