Zaktualizowano 25 wrz 2025
8 min
# pip install langchain langchain-openaifrom langchain_openai import ChatOpenAIfrom langchain_core.prompts import ChatPromptTemplate# 1) Modelllm = ChatOpenAI(model="gpt-4o-mini", temperature=0)# 2) Promptprompt = ChatPromptTemplate.from_messages( i przewodnik przesyłania strumieniowego.---## Elementy składowe, których będziesz używać w 80% przypadków### 1) Prompty i Parsowanie Wyjścia- Użyj `ChatPromptTemplate` dla ustrukturyzowanych promptów.- Parsuj wyjścia za pomocą `StrOutputParser` lub parserów JSON dla typowanych odpowiedzi.```pythonfrom langchain_core.output_parsers import StrOutputParserfrom langchain_core.prompts import ChatPromptTemplatefrom langchain_openai import ChatOpenAIllm = ChatOpenAI(model="gpt-4o-mini")prompt = ChatPromptTemplate.from_template("""Podsumuj poniższy tekst w 3 punktach:---{text}""")parser = StrOutputParserchain = prompt | llm | parsersummary = chain.invoke({"text": "LangChain pomaga budować aplikacje LLM z RAG i narzędziami."})print(summary)# pip install faiss-cpu tiktokenfrom langchain_openai import OpenAIEmbeddings, ChatOpenAIfrom langchain_community.vectorstores import FAISSfrom langchain_text_splitters import RecursiveCharacterTextSplitterfrom langchain_core.prompts import ChatPromptTemplate# Przygotuj dokumentytexts = .---## Od prototypu do produkcji: Krok po kroku### Krok 1: Zdefiniuj historię użytkownika- Kim jest użytkownik? Jakie zadanie próbuje wykonać?- Przykład: „Agent wsparcia, który odpowiada na pytania dotyczące produktu na podstawie wewnętrznej dokumentacji i ostatnich zgłoszeń.”### Krok 2: Wybierz Minimalny Opłacalny Stack- Model: Wybierz rozsądnie wyceniony, niezawodny model (np. GPT-4o-mini lub model otwarty frontier).- Dane: Zdecyduj, czy potrzebujesz teraz RAG. Jeśli tak, zacznij lokalnie od FAISS.- I/O: Użyj LCEL do szybkiej iteracji; unikaj niestandardowego kodu łączącego.### Krok 3: Zaimplementuj czystą pętlę RAG- Prawidłowo podziel dokumenty.- Indeksuj osadzenia.- Promptuj z kontekstem i cytatami.- Dodaj zabezpieczenie, aby uniknąć halucynacji, gdy nie zostanie znaleziony żaden odpowiedni kontekst.```pythonfrom langchain_core.output_parsers import StrOutputParserfrom langchain_core.prompts import ChatPromptTemplateqa_prompt = ChatPromptTemplate.from_template("""Odpowiedz na pytanie, używając WYŁĄCZNIE PONIŻSZEGO KONTEKSTU. Jeśli odpowiedź nie znajduje się w kontekście, powiedz „Nie wiem”. Uwzględnij cytowane identyfikatory dokumentów.w kontekście, powiedz „Nie wiem”. Uwzględnij cytowane identyfikatory dokumentów.KONTEKST:{context}PYTANIE: {question}""")parser = StrOutputParserrag_chain = (RunnableParallel(context=retriever, question=RunnableLambda(lambda x: x.### Krok 5: Typowane wyjścia i walidacja- Użyj `PydanticOutputParser` lub schematu JSON, aby wymusić strukturę odpowiedzi API.- Sprawdzaj poprawność pól, aby wychwycić dryf modelu.### Krok 6: Narzędzia i wywoływanie funkcji do realizacji rzeczywistych zadań- Wprowadzaj narzędzia oszczędnie.- Popularne narzędzia: kalkulator, wyszukiwanie w Internecie, wykonawca zapytań SQL, program do uruchamiania kodu.- Jasno opisz możliwości narzędzia w docstringach.### Krok 7: Utrwalanie- Strategie ograniczania szybkości i ponawiania prób.- Limity czasu i wyłączniki obwodów.- Filtry bezpieczeństwa i sprawdzanie zawartości.### Krok 8: Ocena i ciągłe doskonalenie- Testuj z użyciem złotych zbiorów danych (wejście → oczekiwane wyjście).- Oceń wierność, kompletność odpowiedzi i dokładność cytowania.- Zmierz wskaźnik trafień i opóźnienie pobierania.---## Częste wzorce i pułapki- Zacznij prosto: Łańcuchy przed agentami. Uzyskasz przewidywalność i niższy koszt.- Chunking ma znaczenie: Dostrojenie rozmiaru/nakładania się chunku może zmienić jakość pobierania bardziej niż zamiana modelu.- Wyciek promptu: Nie wkładaj wszystkiego do promptów systemowych; utrzymuj ich skupienie.- Determinizm: Ustaw `temperature=0` dla oceny i krytycznych przepływów pracy.- Strumieniowanie UX: Przesyłaj strumieniowo tokeny do interfejsu użytkownika, podczas gdy reszta systemu pobiera zasoby lub wstępnie ładuje kontekst.- Ustrukturyzowane wyjścia: Użyj parserów, aby integracja downstream była bezbolesna.---## Pełny mini projekt: Pytania i odpowiedzi na podstawie dokumentów z cytatamiTen przykład łączy wszystko: pozyskiwanie, RAG, generowanie odpowiedzi i przesyłanie strumieniowe.```python# pip install langchain langchain-openai faiss-cpu tiktokenfrom langchain_openai import ChatOpenAI, OpenAIEmbeddingsfrom langchain_text_splitters import RecursiveCharacterTextSplitterfrom langchain_community.vectorstores import FAISSfrom langchain_core.prompts import ChatPromptTemplatefrom langchain_core.output_parsers import StrOutputParserfrom langchain_core.runnables import RunnableParallel, RunnableLambda# 1) Pozyskiwaniecorpus = {"pricing": "Nasz plan Pro obsługuje 1 milion tokenów kontekstu i obejmuje priorytetowe wsparcie.","limits": "Limit szybkości API wynosi 60 żądań na minutę dla użytkowników Pro.","security": "Przechowujemy logi przez 30 dni, chyba że logowanie zostanie wyłączone przez administratora.",}splitter = RecursiveCharacterTextSplitter(chunk_size=300, chunk_overlap=50)all_chunks, ids = [], []for doc_id, text in corpus.items:for i, chunk in enumerate(splitter.split_text(text)):all_chunks.append(chunk)ids.append(f"{doc_id}-{i}")# 2) Indeksdb = FAISS.from_texts(all_chunks, OpenAIEmbeddings)retriever = db.as_retriever(k=4)# 3) Promptprompt = ChatPromptTemplate.from_template("""Jesteś asystentem wsparcia. Użyj KONTEKSTU, aby odpowiedzieć.Jeśli nie jesteś pewien, powiedz „Nie wiem”. Uwzględnij cytaty identyfikatorów źródłowych.KONTEKST:{context}PYTANIE: {question}""")# 4) Model i parserllm = ChatOpenAI(model="gpt-4o-mini", temperature=0)parser = StrOutputParser# 5) Złóż łańcuchrag = (RunnableParallel(context=retriever,question=RunnableLambda(lambda x: x["question"]) # pass-through)| prompt| llm| parser)# 6) Zadaj pytaniefor chunk in rag.stream({"question": "Jakie są limity szybkości Pro i przechowywania logów?"}):print(chunk, end="", flush=True)batch na `Runnables` dla przepustowości.prompt | llm i przetestuj za pomocą .invoke lub .stream. Oficjalne tutoriale krok po kroku pokazują, jak szybko rozpocząć prosty czat, RAG i agentów.Runnable obsługują .stream dla synchronicznego i .astream dla asynchronicznego generowania fragmentów w miarę ich napływania. Przewodnik przesyłania strumieniowego obejmuje użycie i najlepsze praktyki.
Jak opanować ChatPDF: szybsze uzyskiwanie informacji z obszernych dokumentów

Najlepsza alternatywa dla X Auto-Translation do szybkiego i dokładnego tłumaczenia dokumentów

Tłumaczenie AI Samsung niedostępne w Iranie? Praktyczne rozwiązania

Narzędzia do tłumaczenia perskiego: praktyczny przewodnik po szybszej i dokładniejszej pracy

Najlepsza alternatywa dla Grok do dogłębnych, cytowanych badań

15 najważniejszych funkcji generatora obrazów AI, które naprawdę wykorzystasz