引言
在自然语言处理中,从非结构化文本中提取结构化信息是一项常见且重要的任务。本文将指导您如何使用LangChain构建一个信息提取链。通过本教程,您将了解如何定义提取架构、使用合适的模型以及处理多实体提取等关键步骤。
主要内容
设置环境
本文建议在Jupyter Notebook中进行操作,因为这能直观地理解步骤和调试代码。有关Jupyter安装的详细信息,请参考这里。
安装LangChain
您可以通过以下命令安装LangChain:
pip install langchain
或者使用Conda安装:
conda install langchain -c conda-forge
更多安装信息请查看我们的安装指南。
使用LangSmith监控链条
为了更好地监控您的应用,建议使用LangSmith进行链条追踪。通过以下命令设置您的环境变量:
import getpass
import os
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = getpass.getpass() # 输入您的API密钥
定义提取架构
我们使用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")
提取器构建
接下来,使用定义的架构创建信息提取器:
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages(
[
("system", "You are an expert extraction algorithm. Only extract relevant information from the text."),
("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)
# 输出: Person(name='Alan Smith', hair_color='blond', height_in_meters='1.83')
常见问题和解决方案
- 提取不正确的信息:确保定义的架构字段是可选的(使用Optional),这样模型可以在不确定时返回None。
- 多实体提取:使用嵌套模型来提取多个人或实体的信息。
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."
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)])
总结和进一步学习资源
通过本指南,您已经了解了如何使用LangChain进行信息提取。接下来,您可以学习如何使用参考示例提高提取质量,或探索处理长文本的方法。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---