LangChain / RAG / vektoritietokannat · Oppitunti

Tulosteen jäsentimet ja callbackit

Opi jäsentämään LLM-tulosteita tehokkaasti jäsentimien avulla sekä käyttämään callbackeja LangChain-sovellusten valvontaan ja virheenkorjaukseen.

Oppitunti 3/410 vaihetta

Tulosteen jäsentimet ja callbackit on ilmainen LangChain / RAG / vektoritietokannat-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu LangChain / RAG / vektoritietokannat-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. LangChain / RAG / vektoritietokannat-kurssilla on yhteensä 4 oppituntia.

Jäsentämättömät LLM-tulosteet

Suuret kielimallit (LLM-mallit) ovat hämmästyttäviä, mutta niiden käsittelemättömät tekstimuotoiset tulosteet voivat usein olla sekavia ja epäjohdonmukaisia. Kuvitelkaa pyytävänne LLM-mallilta luetteloa kohteista: joskus se palauttaa pilkuilla erotellun merkkijonon, joskus luettelon ja joskus jopa kokonaisen kappaleen!

Rakenteen puuttuminen vaikeuttaa tietojen luotettavaa käsittelyä ja hyödyntämistä sovelluksissa. Miten LLM-mallit saadaan tuottamaan ennakoitavassa muodossa olevia tietoja?

Mitä tulosten jäsentimet ovat?

Tulosten jäsentimet ovat LangChainin työkaluja, jotka muuntavat LLM-mallien jäsentämättömät, vapaamuotoiset tekstivastaukset jäsenneltyyn ja käyttökelpoiseen muotoon.

Ne toimivat siltana ja muuntavat raakatekstin Python-objekteiksi, kuten listoiksi, sanakirjoiksi tai Pydantic-malleiksi. Näin sovellus saa aina odotetun rakenteen mukaista dataa, mikä tekee koodista vankempaa ja helpommin hallittavaa.

Luetteloiden jäsentäminen: CommaSeparatedListOutputParser

Yksi yksinkertaisimmista tulosten jäsentimistä on CommaSeparatedListOutputParser. Se sopii erinomaisesti tilanteisiin, joissa LLM-mallin odotetaan palauttavan pilkuilla erotellun luettelon kohteista.

LangChain lisää kehotteeseen automaattisesti ohjeet, jotka opastavat LLM-mallia tuottamaan tuloksen oikeassa muodossa. Kokeilkaa tämän esimerkin suorittamista:

from langchain.prompts import PromptTemplate
from langchain_core.output_parsers import CommaSeparatedListOutputParser

# Mock LLM for demonstration without actual API calls
class MockLLM:
    def invoke(self, prompt, config=None):
        if "list 3 programming languages" in prompt:
            return "Python, Java, C++"
        return "Default response"

def main():
    parser = CommaSeparatedListOutputParser()
    prompt = PromptTemplate(
        template="List 3 programming languages.\n{format_instructions}",
        input_variables=[],
        partial_variables={
            "format_instructions": parser.get_format_instructions()
        },
    )
    
    llm = MockLLM() # In a real app, replace with ChatOpenAI, etc.
    chain = prompt | llm | parser
    
    result = chain.invoke({})
    print(f"Parsed result: {result}")
    print(f"Type: {type(result)}")

if __name__ == "__main__":
    main()

Jäsennelty tuloste Pydanticin avulla

Monimutkaisempia tietoja, kuten henkilön nimen, iän ja kaupungin, poimittaessa LangChain integroituu saumattomasti Pydanticin kanssa. Pydanticin avulla tietorakenteet voidaan määrittää Python-luokkien ja tyyppivihjeiden avulla.

PydanticOutputParser käyttää Pydantic-mallia yksityiskohtaisten ohjeiden luomiseen LLM-mallille ja ohjaa sitä tuottamaan JSON-merkkijonon, joka vastaa täsmällisesti haluttua rakennetta.

PydanticOutputParser käytännössä

Tässä määritämme Person-Pydantic-mallin. Jäsennin varmistaa sen jälkeen, että LLM-mallin tuloste voidaan muuntaa suoraan tämän luokan ilmentymäksi, jolloin saatte vahvasti tyypitettyä ja jäsenneltyä dataa.

Huomatkaa, kuinka parser.get_format_instructions() ohjaa LLM-mallia.

from langchain.prompts import PromptTemplate
from langchain_core.output_parsers import PydanticOutputParser
from pydantic import BaseModel, Field

# Mock LLM for demonstration
class MockLLM:
    def invoke(self, prompt, config=None):
        if "extract information about a person" in prompt:
            # LLM would output JSON matching Pydantic schema
            return '{"name": "Alice", "age": 30, "city": "New York"}'
        return "Default response"

class Person(BaseModel):
    name: str = Field(description="The person's name")
    age: int = Field(description="The person's age")
    city: str = Field(description="The city the person lives in")

def main():
    parser = PydanticOutputParser(pydantic_object=Person)
    prompt = PromptTemplate(
        template="Extract information about a person from the text 'Alice is 30 years old and lives in New York'.\n{format_instructions}",
        input_variables=[],
        partial_variables={
            "format_instructions": parser.get_format_instructions()
        },
    )
    
    llm = MockLLM() # In a real app, replace with ChatOpenAI, etc.
    chain = prompt | llm | parser
    
    result = chain.invoke({})
    print(f"Parsed result: {result}")
    print(f"Type: {type(result)}")
    print(f"Name: {result.name}, Age: {result.age}")

if __name__ == "__main__":
    main()

Valvonta takaisinsoittojen avulla

Pelkkien jäsenneltyjen tulosteiden saamisen lisäksi on usein tarpeen ymmärtää, mitä LangChain-sovelluksen *sisällä* tapahtuu. Tässä takaisinsoitot ovat hyödyksi.

Takaisinsoittojen avulla voitte kytkeytyä ketjun suorituksen aikana tapahtuviin erilaisiin tapahtumiin, kuten LLM-kutsun alkamiseen tai päättymiseen, työkalun käyttöön tai ketjun valmistumiseen.

  • Lokitus: Näette yksityiskohtaiset vaiheet.
  • Virheenkorjaus: Paikannatte ongelmat nopeasti.
  • Valvonta: Seuraatte suorituskykyä ja käyttöä.
  • Suoratoisto: Näytätte LLM-mallin välivaiheen ajatuksia.

Perusvalvonta: StdOutCallbackHandler

LangChain sisältää useita valmiita takaisinsoittokäsittelijöitä. StdOutCallbackHandler on hyvä lähtökohta, sillä se tulostaa kaikki merkittävät tapahtumat suoraan konsoliin.

Näin saatte reaaliaikaisen näkymän ketjun suoritusvirtaan, mukaan lukien LLM-syötteet, tulosteet ja mahdolliset virheet. Lisätkää se ketjun määrityksiin:

from langchain.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain.callbacks import StdOutCallbackHandler
from langchain_core.runnables import RunnablePassthrough
from langchain_core.messages import AIMessage, HumanMessage

# Mock Chat Model for demonstration purposes
class MockChatModel:
    def invoke(self, messages, config=None):
        callbacks = config.get("callbacks", []) if config else []
        
        # Extract input text from messages
        input_text = ""
        if isinstance(messages, list) and messages:
            input_text = messages[0].content if isinstance(messages[0], HumanMessage) else str(messages[0])
        else:
            input_text = str(messages)

        # Simulate on_llm_start event
        for handler in callbacks:
            if hasattr(handler, 'on_llm_start'):
                handler.on_llm_start({"name": "MockChatModel"}, [input_text])
        
        # Simulate LLM processing and response
        response_content = f"Mock response for: '{input_text[:50]}...'"
        
        # Simulate on_llm_end event
        for handler in callbacks:
            if hasattr(handler, 'on_llm_end'):
                handler.on_llm_end(response_content)
        
        return AIMessage(content=response_content)

def main():
    handler = StdOutCallbackHandler()
    llm = MockChatModel() # Replace with actual LLM like ChatOpenAI
    
    prompt = PromptTemplate.from_template("Tell me a short fact about {topic}.")
    
    chain = (
        {"topic": RunnablePassthrough()} # Input for the prompt
        | prompt
        | llm
        | StrOutputParser()
    )
    
    print("--- Running chain with StdOutCallbackHandler ---")
    # Pass the handler to the chain's invoke method via config
    result = chain.invoke("Python programming language", config={"callbacks": [handler]})
    print(f"\nFinal Result: {result}")

if __name__ == "__main__":
    main()

Takaisinsoittojen mukauttaminen

Edistyneemmissä tilanteissa voitte luoda omia mukautettuja takaisinsoittokäsittelijöitä. Perimällä luokan BaseCallbackHandler voitte korvata tiettyjä metodeja ja reagoida tapahtumiin juuri tarvitsemallanne tavalla.

Tämä mahdollistaa erittäin tarkasti mukautetun lokituksen, integroinnin ulkoisiin valvontajärjestelmiin sekä reaaliajassa päivittyvien vuorovaikutteisten käyttöliittymäelementtien rakentamisen. Korvattavia keskeisiä metodeja ovat:

  • on_llm_start: Ennen LLM-kutsua.
  • on_chain_end: Ketjun suorittamisen jälkeen.
  • on_tool_start: Ennen kuin agentti käyttää työkalua.
  • on_agent_action: Kun agentti päättää toiminnasta.

Tulosten jäsentimien ja takaisinsoittojen tarkistus

Tulosten jäsentimet ja takaisinsoitot ovat olennaisia vankkojen, valvottavien ja luotettavien LangChain-sovellusten rakentamisessa. Testataan ymmärrystänne.

Oppitunnin yhteenveto

Hienoa työtä! Opitte tänään kaksi tärkeää LangChain-käsitettä:

  • Tulosten jäsentimet: Nämä työkalut tuovat järjestystä LLM-vastauksiin muuntamalla jäsentämättömän tekstin ennakoitaviksi Python-objekteiksi, kuten listoiksi tai Pydantic-malleiksi. Ne ovat ratkaisevan tärkeitä LLM-sovellusten luotettavuuden kannalta.
  • Takaisinsoitot: Opitte, kuinka takaisinsoitot tarjoavat syvällistä tietoa ketjun suorituksesta. Ne ovat korvaamattomia lokituksessa, virheenkorjauksessa, valvonnassa ja jopa LangChain-sovellusten reaaliaikaisten päivitysten suoratoistossa.

Nämä rakennuspalikat ovat olennaisia kehittyneiden ja valvottavien LLM-pohjaisten ratkaisujen luomisessa!

Aloita maksutta

Opi LangChain / RAG / vektoritietokannat tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
12
Oppitunnit
48

Usein kysytyt kysymykset

Onko oppitunti ”Tulosteen jäsentimet ja callbackit” ilmainen?

Kyllä – oppitunnin ”Tulosteen jäsentimet ja callbackit” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko LangChain / RAG / vektoritietokannat-kurssin, päivitä CoddyKit PROhon. LangChain / RAG / vektoritietokannat-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Tulosteen jäsentimet ja callbackit”?

Opi jäsentämään LLM-tulosteita tehokkaasti jäsentimien avulla sekä käyttämään callbackeja LangChain-sovellusten valvontaan ja virheenkorjaukseen. Harjoittelet LangChain / RAG / vektoritietokannat-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni LangChain / RAG / vektoritietokannat-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin LangChain / RAG / vektoritietokannat-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Tulosteen jäsentimet ja callbackit”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä LangChain / RAG / vektoritietokannat-oppitunnilla?

Kyllä. Jokainen LangChain / RAG / vektoritietokannat-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. LangChain-ympäristön määrittäminen
  2. Promptit, LLM:t ja perusketjut
  3. Tulosteen jäsentimet ja callbackit
  4. Muisti ja keskustelukonteksti LangChainissa
← Takaisin: LangChain / RAG / vektoritietokannat