Hızlı Başlangıç

Bu hızlı başlangıçta, metinden bilgi çıkarmak için fonksiyon/araç çağrılama yeteneğine sahip sohbet modellerini kullanacağız.

Yalnızca fonksiyon/araç çağrılama destekleyen modellerle çıkarma yapılabilir.

Kurulum

Fonksiyon/araç çağrılama özelliğine sahip LLM'lerde bulunan yapılandırılmış çıkış yöntemini kullanacağız.

Bir model seçin, onun için bağımlılıkları yükleyin ve API anahtarlarını ayarlayın!

!pip install langchain

Şema

Öncelikle, metinden çıkarmak istediğimiz bilgileri tanımlamamız gerekiyor.

Kişisel bilgileri çıkarmak için örnek bir şema tanımlamak için Pydantic'i kullanacağız.

from typing import Optional

from langchain_core.pydantic_v1 import BaseModel, Field

class Kişi(BaseModel):
    """Bir kişi hakkında bilgi."""

    ad: Optional[str] = Field(..., description="Kişinin adı")
    saç rengi: Optional[str] = Field(
        ..., description="Kişinin saç rengi, biliniyorsa"
    )
    boy_metresi: Optional[str] = Field(
        ..., description="Metre cinsinden ölçülen boy"
    )

Şema tanımlanırken iki en iyi uygulama bulunmaktadır:

  1. Özellikleri ve şemayı belgeleyin: Bu bilgi LLM'ye gönderilir ve bilgi çıkarma kalitesini artırmak için kullanılır.
  2. LLM'ye bilgi uydurmayın! Yukarıda, özellikler için Optional kullanarak, LLM'nin cevabı bilmiyorsa None çıkarmasına izin verdik.

En iyi performans için, şemayı iyi belgeleyin ve metinde çıkarılacak bilgi yoksa modelin sonuç döndürmemesi için emin olun.

Çıkartıcı

Yukarıda tanımladığımız şemayı kullanarak bilgi çıkartıcı oluşturalım.

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(
    [
        (
            "sistem",
            "Siz bir uzman çıkarma algoritması. "
            "Metinden yalnızca ilgili bilgileri çıkarın. "
            "Çıkarması istenilen bir özelliğin değerini bilmiyorsanız, "
            "özniteliğin değeri için null döndürün.",
        ),
        ("insan", "{metin}"),
    ]
)

Fonksiyon/araç çağrılama destekleyen bir model kullanmamız gerekiyor.

from langchain_openai import ChatOpenAI

llm = ChatOpenAI()

çalıştırılabilir = prompt | llm.with_structured_output(schema=Kişi)

Şimdi test edelim

metin = "Alan Smith 6 fit boyunda ve sarı saçlıdır."
çalıştırılabilir.invoke({"metin": metin})
Kişi(ad='Alan Smith', saç rengi='sarı', boy_metresi='1.8288')

Çıkarma Üretkendir 🤯 LLM'ler üretken modellerdir, bu nedenle metinde fit cinsinden verilen kişinin boyunu doğru bir şekilde metre cinsinden çıkarabilmek gibi harika şeyler yapabilirler!

Çoklu Varlıklar

Çoğu durumda, tek bir varlık yerine bir varlık listesi çıkarmalısınız.

Bunu, pydantic'i kullanarak modelleri birbirine gömerek kolayca başarabilirsiniz.

from typing import List, Optional

from langchain_core.pydantic_v1 import BaseModel, Field


class Person(BaseModel):
    """Bir kişi hakkında bilgiler."""


    name: Optional[str] = Field(..., description="Kişinin adı")
    hair_color: Optional[str] = Field(
        ..., description="Kişinin saç rengi, biliniyorsa"
    )
    height_in_meters: Optional[str] = Field(
        ..., description="Metre cinsinden ölçülen boy"
    )


class Data(BaseModel):
    """Kişiler hakkında çıkarılan veriler."""

    people: List[Person]

Buradaki çıkarma mükemmel olmayabilir. Çıkarma kalitesini iyileştirmek için Referans Örnekleri nasıl kullanılacağını ve kılavuz bölümünü görmeye devam edin!

runnable = prompt | llm.with_structured_output(schema=Data)
text = "Benim adım Jeff, saçım siyah ve 1.83 metre boyundayım. Anna'nın saçı benimkinden aynı renkte."
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)])

Şema, çoklu varlıkların çıkarılmasını mümkün kıldığı gibi, metinde ilgili bilgi olmadığında boş bir liste sağlayarak modelin hiçbir varlık çıkarmasına da izin verir.

Bu genellikle iyi bir şeydir! Bu, modelin bu varlığı tespit etmeye zorlamadan bir varlığın zorunlu niteliklerini belirtmeyi sağlar.