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:
- Özellikleri ve şemayı belgeleyin: Bu bilgi LLM'ye gönderilir ve bilgi çıkarma kalitesini artırmak için kullanılır.
- LLM'ye bilgi uydurmayın! Yukarıda, özellikler için
Optional
kullanarak, LLM'nin cevabı bilmiyorsaNone
çı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.