Output-parsere og callback-funksjoner
Lær å strukturere LLM-utdata effektivt ved hjelp av parsere, og bruk callback-funksjoner til å overvåke og feilsøke LangChain-applikasjonene Deres.
Output-parsere og callback-funksjoner er en gratis leksjon i LangChain / RAG / vektordatabaser på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i LangChain / RAG / vektordatabaser, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i LangChain / RAG / vektordatabaser inneholder totalt 4 leksjoner.
Ustrukturerte LLM-resultater
Store språkmodeller (LLM-er) er fantastiske, men råtekstresultatene deres kan ofte være rotete og inkonsekvente. Tenk deg at du ber en LLM om en liste over elementer, og at den noen ganger gir deg en kommaseparert tekststreng, andre ganger en punktliste eller til og med et helt avsnitt!
Mangelen på struktur gjør det vanskelig for applikasjonene dine å behandle og bruke informasjonen på en pålitelig måte. Hvordan kan vi få LLM-er til å levere forutsigbare data?
Hva er resultatparsing?
Resultatparserne er verktøy i LangChain som er laget for å konvertere ustrukturerte, fritt formulerte tekstsvar fra LLM-er til et strukturert og brukbart format.
De fungerer som et bindeledd og omformer råtekst til Python-objekter som lister, ordbøker eller Pydantic-modeller. Dermed mottar applikasjonen din alltid data i forventet form, noe som gjør koden mer robust og enklere å vedlikeholde.
Parse lister: CommaSeparatedListOutputParser
En av de enkleste resultatparserne er CommaSeparatedListOutputParser. Den passer perfekt når du forventer at LLM-en returnerer en liste med elementer adskilt med komma.
LangChain legger automatisk inn instruksjoner i prompten og veileder LLM-en til å produsere resultatet i riktig format. Prøv å kjøre dette eksempelet:
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()Strukturerte resultater med Pydantic
For mer komplekse data, som å hente ut en persons navn, alder og by, har LangChain en svært god integrasjon med Pydantic. Pydantic lar deg definere dataskjemaer ved hjelp av Python-klasser med typehint.
PydanticOutputParser bruker Pydantic-modellen din til å generere detaljerte instruksjoner til LLM-en, slik at den veiledes til å returnere en JSON-streng som passer perfekt med strukturen du ønsker.
PydanticOutputParser i praksis
Her definerer vi en Person-modell i Pydantic. Parseren sørger deretter for at resultatet fra LLM-en kan konverteres direkte til en instans av denne klassen, slik at du får sterkt typede, strukturerte data.
Legg merke til hvordan parser.get_format_instructions() veileder LLM-en.
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()Overvåking med tilbakekall
Det er ikke alltid nok å bare få strukturerte resultater. Du trenger ofte å forstå hva som skjer *inne i* LangChain-applikasjonen din. Det er her tilbakekall kommer inn.
Tilbakekall lar deg koble deg til ulike hendelser som oppstår mens en kjede kjører, for eksempel når et LLM-kall starter eller avsluttes, når et verktøy brukes eller når en kjede fullføres.
- Logging: Se detaljerte trinn.
- Feilsøking: Finn problemer raskt.
- Overvåking: Følg med på ytelse og bruk.
- Strømming: Vis mellomliggende tanker fra LLM-en.
Grunnleggende overvåking: StdOutCallbackHandler
LangChain tilbyr flere innebygde tilbakekallbehandlere. StdOutCallbackHandler er et godt utgangspunkt, siden den ganske enkelt skriver ut alle viktige hendelser direkte til konsollen.
Dette gir deg sanntidsinnsikt i kjedens kjøringsflyt, inkludert inndata, utdata og eventuelle feil fra LLM-en. Legg den til i konfigurasjonen av kjeden:
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()Tilpass tilbakekall
For avanserte scenarier kan du opprette dine egne tilpassede tilbakekallbehandlere. Ved å arve fra BaseCallbackHandler kan du overstyre bestemte metoder for å reagere på hendelser akkurat slik du trenger.
Dette gjør det mulig å skreddersy logging, integrere med eksterne overvåkingssystemer eller bygge interaktive UI-elementer som oppdateres i sanntid. Viktige metoder du kan overstyre, er:
on_llm_start: Før et LLM-kall.on_chain_end: Etter at en kjede er fullført.on_tool_start: Før en agent bruker et verktøy.on_agent_action: Når en agent bestemmer seg for en handling.
Sjekk av resultatparsing og tilbakekall
Resultatparsing og tilbakekall er grunnleggende for å bygge robuste, observerbare og pålitelige LangChain-applikasjoner. La oss teste forståelsen din.
Oppsummering av leksjonen
Godt jobbet! I dag har du fått kontroll på to viktige LangChain-konsepter:
- Resultatparserne: Disse verktøyene skaper orden i LLM-svar ved å omforme ustrukturert tekst til forutsigbare Python-objekter, som lister eller Pydantic-modeller. De er avgjørende for å gjøre LLM-applikasjonene dine pålitelige.
- Tilbakekall: Du har lært hvordan tilbakekall gir dyp innsikt i kjedens kjøring. De er svært nyttige for logging, feilsøking, overvåking og også strømming av sanntidsoppdateringer fra LangChain-applikasjonene dine.
Disse byggesteinene er viktige for å lage avanserte og observerbare LLM-baserte løsninger!
Lær deg LangChain / RAG / vektordatabaser med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 12
- Leksjoner
- 48
Ofte stilte spørsmål
Er leksjonen «Output-parsere og callback-funksjoner» gratis?
Ja – hele teksten i «Output-parsere og callback-funksjoner» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av LangChain / RAG / vektordatabaser-kurset, kan du oppgradere til CoddyKit PRO. Kurset i LangChain / RAG / vektordatabaser inneholder totalt 4 leksjoner.
Hva lærer jeg i «Output-parsere og callback-funksjoner»?
Lær å strukturere LLM-utdata effektivt ved hjelp av parsere, og bruk callback-funksjoner til å overvåke og feilsøke LangChain-applikasjonene Deres. Du øver på LangChain / RAG / vektordatabaser med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med LangChain / RAG / vektordatabaser?
Ingen tidligere erfaring er nødvendig. LangChain / RAG / vektordatabaser på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.
Hvor lang tid tar leksjonen «Output-parsere og callback-funksjoner»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne LangChain / RAG / vektordatabaser-leksjonen?
Ja. Alle LangChain / RAG / vektordatabaser-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Konfigurering av LangChain-miljøet
- Prompter, LLM-er og grunnleggende kjeder
- Output-parsere og callback-funksjoner
- Minne og samtalekontekst i LangChain