Hướng dẫn nhanh

Trong hướng dẫn nhanh này, chúng ta sẽ sử dụng các mô hình chat có khả năng gọi chức năng/công cụ để trích xuất thông tin từ văn bản.

Trích xuất bằng cách sử dụng gọi chức năng/công cụ chỉ hoạt động với các mô hình hỗ trợ gọi chức năng/công cụ.

Thiết lập

Chúng ta sẽ sử dụng phương pháp đầu ra có cấu trúc có sẵn trên LLMs có khả năng gọi chức năng/công cụ.

Chọn một mô hình, cài đặt các phụ thuộc cho nó và thiết lập key API!

!pip install langchain

Mô hình dữ liệu

Trước tiên, chúng ta cần mô tả thông tin chúng ta muốn trích xuất từ văn bản.

Chúng ta sẽ sử dụng Pydantic để định nghĩa một mô hình ví dụ để trích xuất thông tin cá nhân.

from typing import Optional

from langchain_core.pydantic_v1 import BaseModel, Field


class Person(BaseModel):
    """Thông tin về một người."""


    name: Optional[str] = Field(..., description="Tên của người đó")
    hair_color: Optional[str] = Field(
        ..., description="Màu tóc của người đó nếu biết"
    )
    height_in_meters: Optional[str] = Field(
        ..., description="Chiều cao được đo bằng mét"
    )

Có hai phương pháp tốt khi định nghĩa mô hình dữ liệu:

  1. Ghi chú các thuộc tínhchính mô hình của nó: Thông tin này được gửi đến LLM và được sử dụng để cải thiện chất lượng trích xuất thông tin.
  2. Không bắt buộc LLM phải tạo ra thông tin! Ở đây chúng ta sử dụng Optional cho các thuộc tính cho phép LLM trả về None nếu nó không biết câu trả lời.

Để có hiệu suất tốt nhất, hãy ghi chú mô hình dữ liệu tốt và đảm bảo rằng mô hình không bị ép buộc phải trả kết quả nếu không có thông tin để trích xuất từ văn bản.

Trình trích xuất

Hãy tạo một trình trích xuất thông tin sử dụng mô hình dữ liệu chúng ta định nghĩa ở trên.

from typing import Optional

from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.pydantic_v1 import BaseModel, Field
from langchain_openai import ChatOpenAI

prompt = ChatPromptTemplate.from_messages(
    [
        (
            "system",
            "Bạn là một thuật toán trích xuất chuyên gia. Chỉ trích xuất thông tin liên quan từ văn bản. Nếu bạn không biết giá trị của một thuộc tính được yêu cầu trích xuất, hãy trả về null cho giá trị thuộc tính đó.",
        ),
        ("human", "{text}"),
    ]
)

Chúng ta cần sử dụng một mô hình hỗ trợ gọi chức năng/công cụ.

from langchain_openai import ChatOpenAI

llm = ChatOpenAI()

runnable = prompt | llm.with_structured_output(schema=Person)

Hãy thử nghiệm nó

text = "Alan Smith cao 1m83 và có mái tóc màu vàng."
runnable.invoke({"text": text})
Person(name='Alan Smith', hair_color='blond', height_in_meters='1.8288')

Trích xuất là Tạo ra 🤯 LLMs là mô hình tạo ra, vì vậy chúng có thể làm một số điều hay ho như trích xuất chiều cao của người đó ở mét mặc dù nó được cung cấp ở feet!

Multiple Entities

Trong hầu hết các trường hợp, bạn nên trích xuất một danh sách các thực thể thay vì một thực thể duy nhất.

Điều này có thể dễ dàng đạt được bằng cách sử dụng pydantic để lồng các mô hình vào nhau.

from typing import List, Optional

from langchain_core.pydantic_v1 import BaseModel, Field


class Person(BaseModel):
    """Thông tin về một người."""


    name: Optional[str] = Field(..., description="Tên của người đó")
    hair_color: Optional[str] = Field(
        ..., description="Màu tóc của người đó nếu biết"
    )
    height_in_meters: Optional[str] = Field(
        ..., description="Chiều cao được đo bằng mét"
    )


class Data(BaseModel):
    """Dữ liệu trích xuất về những người."""

    people: List[Person]

Việc trích xuất có thể không hoàn hảo ở đây. Vui lòng tiếp tục xem cách sử dụng Ví dụ tham chiếu để cải thiện chất lượng trích xuất, và xem phần hướng dẫn!

runnable = prompt | llm.with_structured_output(schema=Data)
text = "Tên tôi là Jeff, tóc tôi màu đen và tôi cao 1,8 mét. Anna có cùng màu tóc với tôi."
runnable.invoke({"text": text})
Data(people=[Person(name='Jeff', hair_color=None, height_in_meters=None), Person(name='Anna', hair_color=None, height_in_meters=None)])

Khi schema có thể chứa việc trích xuất nhiều thực thể, nó cũng cho phép mô hình trích xuất không có thực thể nếu không có thông tin liên quan trong văn bản bằng cách cung cấp một danh sách trống.

Điều này thường là điều tốt! Nó cho phép xác định các thuộc tính bắt buộc trên một thực thể mà không cần thiết phải buộc mô hình phải phát hiện thực thể này.