# 在LangChain中构建强大的信息提取链
## 引言
在处理自然语言处理任务时,从非结构化文本中提取结构化信息是一个常见的需求。本篇文章将指导你如何使用LangChain构建一个用于信息提取的链,适合初学者了解基本概念,也为专业人士提供了深度见解。
## 主要内容
### 前提条件
在开始之前,你需要对以下概念有基本了解:
- 聊天模型
- 工具和工具调用
本文假定您使用支持工具调用的模型。
### 环境设置
#### Jupyter Notebook
我们建议在Jupyter Notebook中实现此教程,因为它提供了一个交互式的环境。安装指南可以参考[Jupyter Notebook安装指导](https://jupyter.org/install)。
#### 安装LangChain
你可以通过pip或conda安装LangChain:
```bash
pip install langchain
conda install langchain -c conda-forge
更多安装细节请查看官方安装指南。
LangSmith
使用LangChain构建的应用程序可能包含多个步骤和LLM调用。为了清楚了解链中的细节,可以使用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):
"""关于个人的信息。"""
name: Optional[str] = Field(default=None, description="人的姓名")
hair_color: Optional[str] = Field(default=None, description="如已知,人的头发颜色")
height_in_meters: Optional[str] = Field(default=None, description="以米为单位的身高")
建议文档化Schema和属性以提高信息提取质量。
创建提取器
使用定义的Schema创建提取器:
from langchain_core.prompts import ChatPromptTemplate
from langchain_mistralai import ChatMistralAI
prompt = ChatPromptTemplate.from_messages(
[
("system", "你是专家级的提取算法,只提取相关信息。如果未知某属性的值,返回null。"),
("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):
"""关于多人的提取数据。"""
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)
常见问题和解决方案
- 提取不准确:尝试使用参考示例来提高性能。
- 长文本处理:如果文本过长,可以考虑使用分段处理或参考长文本处理指南。
总结和进一步学习资源
通过这篇文章,你已经掌握了使用LangChain进行基本信息提取的技能。下一步可以学习:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---