Zpět na Blog
Blog

Stavba vašeho prvního RAG systému: Jak učinit AI chytrou ohledně vašeho podnikání

Aug 17, 2025·7 min read·Shranya Mahna
#AI knowledge base#business AI#contextual AI#RAG system#retrieval augmented generation
Stavba vašeho prvního RAG systému: Jak učinit AI chytrou ohledně vašeho podnikání

Část 2 z 5: Retrieval-Augmented Generation

Vítejte zpět! Dnes se ponoříme do systémů RAG — jednoho z nejpraktičtějších způsobů, jak udělat AI užitečným pro vaše specifické obchodní potřeby.

Co přesně je RAG?

Vysvětlím vám RAG jednoduchou analogií. Představte si, že píšete písemku s otevřenými učebnicemi. Místo toho, abyste se spoléhali pouze na to, co jste si zapamatovali, můžete si v učebnicích vyhledat informace a poskytnout tak lepší, přesnější odpovědi. To je vlastně to, co RAG dělá pro AI modely.

RAG = AI Model + Vaše vlastní znalostní báze

AI model poskytuje „intelekci" pro pochopení otázek a generování odpovědí podobných lidským, zatímco vaše znalostní báze poskytuje specifické, aktuální informace o vaší firmě.

Proč by vás měl RAG zajímat?

Víte, jak to je s velkými jazykovými modely jako ChatGPT — jsou neuvěřitelně chytré, ale nic neví o vaší specifické firmě. Nemohou zákazníkům říci o vašich nejnovějších funkcích produktu, vašich firemních zásadách nebo odpovědět na otázky pomocí vaší interní dokumentace.

RAG to řeší takto:

  • Díky přesnějším a relevantnějším odpovědím AI pro vaši firmu
  • Aktuálnost informací (stačí aktualizovat dokumenty, není potřeba přetrénování)
  • Transparentnost (vidíte, které dokumenty AI použila k odpovědi)
  • Nákladová efektivita (mnohem levnější než dolaďování velkých modelů)

Pojďme si ho vytvořit společně

Ukážu vám, jak vytvořit systém RAG pomocí Googlova AI Gemini. Vytvoříme systém, který umí odpovídat na otázky o „MyNextDeveloper". Zde je postup krok za krokem:

Krok 1: Instalace potřebných nástrojů

!pip install -q -U google-generativeai langchain-google-genai langchain faiss-cpu pypdf langchain-community

Tyto knihovny se budou starat o těžkou práci za nás:

  • google-generativeai: Přístup k Googlově modelům Gemini
  • langchain-google-genai: Integrace Gemini s LangChain
  • LangChain: Framework pro vytváření AI aplikací
  • FAISS: Rychlé vyhledávání podobnosti (nalezení relevantních dokumentů)

Krok 2: Nastavení Googlova AI API

import os

from google.colab import userdata

import google.generativeai as genai
GOOGLE_API_KEY = userdata.get('GOOGLE_API_KEY') genai.configure(api_key=GOOGLE_API_KEY)

Budete si muset opatřit bezplatný klíč API z Google AI Studio a přidat ho do svého prostředí.

Krok 3: Příprava vaší znalostní báze

raw_text = """

MyNextDeveloper (MND) is a remote-first tech company founded in 2022 in Mumbai. They focus on supplying pre-vetted, highly skilled developers to startups. Their mission is to solve the trust gap between startups and engineers by emphasizing empathy, communication, and transparency.The company promotes agile practices, test-driven development, and POSH-compliant culture. MND offers services like staff augmentation, API and web development, UI/UX design, and AI/ML solutions. Their tech stack includes Angular, React, Next.js, Node.js, Django, Python, Docker, and AWS.

Clients appreciate their transparency and delivery quality. Project pricing starts at $10,000 with hourly rates between $25 and $49. MND claims startups can save up to 30% through their freelance model.

They operate globally, serving startups, Y Combinator and Techstars alumni. It is headquartered in Malabar Hill, Mumbai.

"""
# Převeďte na LangChain Document from langchain_core.documents import Document documents = [Document(page_content=raw_text)] print(f"Loaded {len(documents)} document(s).")

V reálné aplikaci by to byla vaše dokumentace produktu, FAQ, firemní zásady nebo jakékoli textové informace o vaší firmě.

Krok 4: Rozdělení informací do kusů

from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(

chunk_size=300,

chunk_overlap=50,

length_function=len,

add_start_index=True,

)
chunks = text_splitter.split_documents(documents)

print(f"Split into {len(chunks)} chunks.")

Proč rozdělujeme text? AI modely pracují lépe s menšími, zaměřenými kousky informací. chunk_overlap=50 zajišťuje, že neztrácíme kontext na hranicích kusů, zatímco add_start_index=True nám pomáhá sledovat, odkud informace pocházejí.

Krok 5: Vytvoření vložení a vektorového úložiště

from langchain_google_genai import GoogleGenerativeAIEmbeddings

from langchain_community.vectorstores import FAISS
embeddings = GoogleGenerativeAIEmbeddings(

model="models/embedding-001",

google_api_key=GOOGLE_API_KEY

)
print("Creating FAISS vector store...")

vector_store = FAISS.from_documents(chunks, embeddings)

print("FAISS vector store created.")

Nejdůležitější krok. Každý kus textu se převede na „vektor" (číselné zobrazení). Když si někdo položí otázku, najdeme kusy s vektory nejpodobnějšími vektoru otázky.

Krok 6: Nastavení systému otázka-odpověď

from langchain_google_genai import ChatGoogleGenerativeAI

from langchain.chains import RetrievalQA

from langchain_core.prompts import PromptTemplate
retriever = vector_store.as_retriever(search_kwargs={"k": 3})
llm = ChatGoogleGenerativeAI(

model="gemini-1.5-flash",

temperature=0.3,

google_api_key=GOOGLE_API_KEY

)
prompt_template = """

You are an AI assistant that answers questions based on the provided context.

If the answer is not available in the context, politely state that you don't know.
Context:

{context}
Question:

{question}
Answer:

"""

RAG_PROMPT = PromptTemplate.from_template(prompt_template)
qa_chain = RetrievalQA.from_chain_type(

llm=llm,

chain_type="stuff",

retriever=retriever,

return_source_documents=True,

chain_type_kwargs={"prompt": RAG_PROMPT}

)

temperature=0.3 udržuje odpovědi zaměřené a faktické, zatímco search_kwargs={"k": 3} znamená, že pro každou otázku načteme 3 nejvýznamnější kusy.

Krok 7: Vyzkoušejte si to

questions = [

"What does MyNextDeveloper (MND) do?",

"Where is MND headquartered?",

"What services does MND offer?",

"What technologies does MND use?",

"How does MND help startups save money?",

"What is the capital of France?"  # This should trigger "I don't know"

]
for i, question in enumerate(questions):

print(f"nQuestion {i+1}: {question}")

response = qa_chain.invoke({"query": question})

print(f"Answer: {response['result']}")

if 'source_documents' in response:

print("Source Documents:")

for doc in response['source_documents']:

print(f"- Content (truncated): {doc.page_content[:150]}...")

Ukázka výstupu:

Question 1: What does MyNextDeveloper (MND) do?

Answer: MyNextDeveloper (MND) is a remote-first tech company that supplies pre-vetted, highly skilled developers to startups. They offer services such as staff augmentation, API and web development, UI/UX design, and AI/ML solutions. Their goal is to bridge the trust gap between startups and engineers through empathy, communication, and transparency.
Question 6: What is the capital of France?

Answer: I'm sorry, but I don't know the capital of France. The provided text is about a company called MND and doesn't contain information about France's capital.

Všimněte si, jak systém správně odpovídá na otázky o MND, ale zdvořile odmítá odpovídat na otázky mimo svou znalostní bázi.

Google Colab

Zde je odkaz na google colab pro tento článek, který lze spustit jediným kliknutím: odkaz

Aplikace v reálném světě

Zde je několik praktických způsobů, jak můžete používat systémy RAG:

Zákaznická podpora: Nahrajte své FAQ, příručky produktů a lístky podpory. Nechte AI Handle běžné otázky 24/7.

Interní znalostní báze: Nahrajte firemní zásady, postupy a dokumentaci. Zaměstnanci si mohou klást otázky v přirozeném jazyce místo hledání v souborech.

Asistent v prodeji: Nahrajte specifikace produktů, ceny a případové studie. Váš prodejní tým má okamžitý přístup k jakékoli informaci, kterou potřebuje během hovorů.

Tvorba obsahu: Nahrajte váš stávající obsah, příspěvky na blogu a marketingové materiály. Vytvářejte nový obsah, který je v souladu s vaším hlasem značky.

Omezení (Pojďme být upřímní)

RAG není dokonalý:

  • Kvalita závisí na vašich datech: Smetí dovnitř, smetí ven
  • Může halucinovat: Někdy si AI vymyslí informace, které znějí věrohodně
  • Vyžaduje údržbu: Musíte průběžně aktualizovat svou znalostní bázi
  • Náklady na zvážení: Volání API se mohou hromadit při těžké spotřebě

Klíčové poznatky z implementace

Z našeho funkčního příkladu jsou zde některé důležité technické aspekty, které je třeba zvážit:

Velikost kusu je důležitá: Použili jsme 300 znaků s 50znakovou překryvem. To vyvažuje zachování kontextu s přesností vyhledávání.

Kvalita vložení: Googlův model embedding-001 poskytuje dobrá vložení pro obecné účely, ale pro specializovaný obsah možná budete potřebovat vložení specifická pro doménu.

Strategie vyhledávání: Parametr k=3 znamená, že načteme 3 nejrelevantní kusy. Toto můžete přizpůsobit podle vašeho případu použití.

Prompt Engineering: Náš prompt explicitně říká AI, aby řekla „Nevím", když informace nejsou dostupné. To zabrání halucinacím.

Tipy pro úspěch

  1. Začněte v malém: Začněte s jedním specifickým případem použití místo toho, abyste se snažili pokrýt vše
  2. Udržujte dokumenty aktualizované: Zastaralé informace vedou k frustrovaným uživatelům
  3. Důkladně testujte: Vyzkoušejte spoustu různých otázek, abyste pochopili, kde váš systém funguje dobře a kde ne
  4. Monitorujte použití: Sledujte, jaké otázky si lidé kladou, abyste vylepšili svou znalostní bázi
  5. Iterujte velikost kusu: Experimentujte s různými velikostmi kusů a hodnotami překryvu pro váš specifický obsah

Co bude dál

V našem příštím článku prozkoumáme jemné ladění — převzetí existujícího AI modelu a jeho trénování speciálně pro váš případ použití. Zatímco RAG dává AI přístup k vašim informacím, jemné ladění ve skutečnosti mění to, jak si AI „myslí" o vaší doméně.

RAG je často nejlepší výchozí bod, protože je jednodušší, transparentnější a snadněji se udržuje. Ale někdy potřebujete tu extra úroveň přizpůsobení, kterou může poskytnout pouze jemné ladění.


Chystá se: Článek 3 — "Fine-Tuning LLMs: Teaching AI to Speak Your Language"