AGI a budoucnost AI
Budování LLM Agentů pro RAG od Základu a dál: Komplexní Průvodce
LLM jako GPT-3, GPT-4 a jejich open-source protějšky často zápasí s aktuálním získááním informací a někdy generují halucinace nebo nesprávné informace.
Retrieval-Augmented Generation (RAG) je technika, která kombinuje sílu LLM s externím získááním znalostí. RAG umožňuje uzemnit odpovědi LLM v faktických, aktuálních informacích, což významně zlepšuje přesnost a spolehlivost generovaného obsahu AI.
V tomto blogovém příspěvku prozkoumáme, jak postavit LLM agenty pro RAG od základu, ponoříme se do architektury, detailů implementace a pokročilých technik. Pokryjeme vše od základů RAG až po vytváření sofistikovaných agentů schopných komplexního uvažování a provádění úkolů.
Než začneme budovat našeho LLM agenta, pochopíme, co je RAG a proč je důležité.
RAG, nebo Retrieval-Augmented Generation, je hybridní přístup, který kombinuje získávání informací s generací textu. V systému RAG:
- Dotaz je použit k získání relevantních dokumentů z znalostní báze.
- Tito dokumenty jsou poté vloženi do jazykového modelu spolu s původním dotazem.
- Model generuje odpověď založenou na dotazu a získaných informacích.
Tento přístup má několik výhod:
- Vylepšená přesnost: Uzemňováním odpovědí v získaných informacích RAG snižuje halucinace a zlepšuje faktickou přesnost.
- Aktuální informace: Znalostní báze může být pravidelně aktualizována, což umožňuje systému přístup k aktuálním informacím.
- Průhlednost: Systém může poskytnout zdroje pro své informace, což zvyšuje důvěru a umožňuje faktické ověření.
Pochopení LLM Agentů
Když jste konfrontováni s problémem bez jednoduché odpovědi, často potřebujete následovat několik kroků, pečlivě uvažovat a pamatovat si, co jste již vyzkoušeli. LLM agenti jsou navrženi právě pro tyto typy situací v aplikacích jazykových modelů. Kombinují důkladnou analýzu dat, strategické plánování, získávání dat a schopnost učit se z předchozích akcí, aby řešili komplexní problémy.
Co jsou LLM Agenti?
LLM agenti jsou pokročilé systémy AI navržené pro vytváření komplexního textu, který vyžaduje sekvenční uvažování. Mohou uvažovat dopředu, pamatovat si předchozí konverzace a používat různé nástroje, aby upravili své odpovědi na základě situace a stylu.
Připomeňme si otázku z právní oblasti, jako je: “Jaké jsou potenciální právní důsledky porušení konkrétního typu smlouvy v Kalifornii?” Základní LLM s RAG systémem může získat nezbytné informace z právních databází.
Pro podrobnější scénář: “Vzhledem k novým zákonům o ochraně osobních údajů, jaké jsou běžné právní výzvy, kterým čelí společnosti, a jak soudy řešily tyto problémy?” Tato otázka sahá hlouběji než jen hledání faktů. Je to o pochopení nových pravidel, jejich dopadu na různé společnosti a reakcích soudů. LLM agent by rozdělil tuto úlohu na podúkoly, jako je získání nejnovějších zákonů, analýza historických případů, souhrn právních dokumentů a předpověď trendů na základě vzorců.
Komponenty LLM Agentů
LLM agenti se obecně skládají ze čtyř komponent:
- Agent/Mozek: Jádrem jazykového modelu, který zpracovává a rozumí jazyku.
- Plánování: Schopnost uvažovat, rozdělit úkoly a vyvinout konkrétní plány.
- Paměť: Udržuje záznamy o předchozích interakcích a učí se z nich.
- Použití nástrojů: Integruje různé zdroje pro provádění úkolů.
Agent/Mozek
V jádru LLM agenta je jazykový model, který zpracovává a rozumí jazyku na základě rozsáhlých dat, na kterých byl vyškolován. Začnete tím, že mu dáte konkrétní prompt, který agenta nasměruje, jak odpovědět, které nástroje použít a jaké cíle sledovat. Můžete agenta přizpůsobit osobnosti vhodné pro konkrétní úkoly nebo interakce, což zlepšuje jeho výkon.
Paměť
Komponent paměti pomáhá LLM agentům zvládat komplexní úkoly udržováním záznamu o předchozích akcích. Existují dva hlavní typy paměti:
- Krátkodobá paměť: Jedná se jako poznámka, která sleduje probíhající diskuse.
- Dlouhodobá paměť: Funkce jako deník, který ukládá informace z předchozích interakcí, aby se naučil vzorce a činil lepší rozhodnutí.
Kombinací těchto typů paměti může agent nabízet více přizpůsobené odpovědi a pamatovat si uživatelské preference s časem, vytvářející tak více propojenou a relevantní interakci.
Plánování
Plánování umožňuje LLM agentům uvažovat, rozdělit úkoly na zvládnutelné části a přizpůsobit plány, jak úkoly postupují. Plánování zahrnuje dvě hlavní fáze:
- Formulace plánu: Rozdělení úkolu na menší podúkoly.
- Reflexe plánu: Přezkoumání a hodnocení efektivity plánu, začlenění zpětné vazby pro úpravu strategií.
Metody, jako je Chain of Thought (CoT) a Tree of Thought (ToT), pomáhají v tomto procesu rozkladu, umožňující agentům prozkoumat různé cesty pro řešení problému.
Pro hlubší pohled do světa agentů AI, včetně jejich současných schopností a potenciálu, zvažte čtení “Auto-GPT & GPT-Engineer: An In-Depth Guide to Today’s Leading AI Agents”
Nastavení Prostředí
Abyste postavili náš RAG agent, musíme nastavit naše vývojové prostředí. Budeme používat Python a několik klíčových knihoven:
- LangChain: Pro orchestraci našich LLM a komponent získávání
- Chroma: Jako náš vektorový sklad pro dokumentové vložení
- OpenAI’s GPT modely: Jako náš základ LLM (můžete jej nahradit open-source modelem, pokud je preferován)
- FastAPI: Pro vytvoření jednoduchého API pro interakci s naším agentem
Začneme nastavením našeho prostředí:
<p># Vytvořte nové virtuální prostředí python -m venv rag_agent_env source rag_agent_env/bin/activate # Na Windows použijte `rag_agent_env\Scripts\activate`</p> <p># Nainstalujte požadované balíčky pip install langchain chromadb openai fastapi uvicorn
Nyní vytvořte nový soubor Pythonu nazvaný rag_agent.py a importujte nezbytné knihovny:
<p>from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import Chroma from langchain.text_splitter import CharacterTextSplitter from langchain.llms import OpenAI from langchain.chains import RetrievalQA from langchain.document_loaders import TextLoader import os</p> <p># Nastavte klíč API OpenAI os.environ["OPENAI_API_KEY"] = "your-api-key-here"</p>
Stavba Jednoduchého RAG Systému
Teď, když máme nastavené naše prostředí, postavíme základní RAG systém. Začneme vytvořením znalostní báze z sady dokumentů a poté ji použijeme k odpovědi na dotazy.
Krok 1: Příprava Dokumentů
Nejprve musíme načíst a připravit naše dokumenty. Pro tento příklad předpokládejme, že máme textový soubor nazvaný knowledge_base.txt s některými informacemi o AI a strojovém učení.
<p># Načtěte dokument loader = TextLoader("knowledge_base.txt") documents = loader.load()</p> <p># Rozdělte dokumenty na části text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0) texts = text_splitter.split_documents(documents)</p> <p># Vytvořte vložení embeddings = OpenAIEmbeddings()</p> <p># Vytvořte vektorový sklad vectorstore = Chroma.from_documents(texts, embeddings)</p>
Krok 2: Vytvoření RAG Zřetězení
Teď, když máme náš vektorový sklad, můžeme vytvořit RAG zřetězení:
<p># Vytvořte RAG zřetězení qa = RetrievalQA.from_chain_type(llm=OpenAI(), chain_type="stuff", retriever=vectorstore.as_retriever())</p>
Krok 3: Dotazování Systému
Nyní můžeme dotázat náš RAG systém:
<p>query = "Jaké jsou hlavní aplikace strojového učení?" result = qa.run(query) print(result)
Krok 4: Vytvoření LLM Agent
Zatímco náš jednoduchý RAG systém je užitečný, je poměrně omezený. Zlepšime ho vytvořením LLM agenta, který může provádět komplexnější úkoly a uvažovat o informacích, které získá.
LLM agent je systém AI, který může používat nástroje a činit rozhodnutí o akcích, které má podniknout. Vytvoříme agenta, který může nejen odpovědět na otázky, ale také provádět webové vyhledávání a základní výpočty.
Nejprve definujeme některé nástroje pro našeho agenta:
<p>from langchain.agents import Tool from langchain.tools import DuckDuckGoSearchRun from langchain.tools import BaseTool from langchain.agents import initialize_agent from langchain.agents import AgentType</p> <p># Definujte nástroj pro výpočet class CalculatorTool(BaseTool): name = "Calculator" description = "Užitečný pro matematické otázky"</p> <p>def _run(self, query: str) try: return str(eval(query)) except: return "Nemohu spočítat. Ujistěte se, že váš vstup je platný matematický výraz."</p> <p># Vytvořte instance nástrojů search = DuckDuckGoSearchRun() calculator = CalculatorTool()</p> <p># Definujte nástroje tools = [Tool(name="Search", func=search.run, description="Užitečný pro aktuální události"), Tool(name="RAG-QA", func=qa.run, description="Užitečný pro AI a strojové učení"), Tool(name="Calculator", func=calculator._run, description="Užitečný pro matematické výpočty") ]</p> <p># Inicializujte agenta agent = initialize_agent(tools, OpenAI(temperature=0), agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True )</p>
Nyní máme agenta, který může použít náš RAG systém, provádět webové vyhledávání a provádět výpočty. Otestujeme ho:
<p>result = agent.run("Jaký je rozdíl mezi dohledem a nesledovaným učením? A co je 15% z 80?") print(result)</p>
Tento agent demonstruje klíčovou výhodu LLM agentů: mohou kombinovat více nástrojů a kroků uvažování, aby odpověděli na komplexní dotazy.
Vylepšení Agentů s Pokročilými RAG Technikami
Zatímco náš současný RAG systém funguje dobře, existují several pokročilé techniky, které můžeme použít k vylepšení jeho výkonu:
a) Semantické Vyhledávání s Dense Passage Retrieval (DPR)
Místo použití jednoduchého vložení založeného na vyhledávání můžeme implementovat DPR pro přesnější semantické vyhledávání:
<p>from transformers import DPRQuestionEncoder, DPRContextEncoder</p> <p>question_encoder = DPRQuestionEncoder.from_pretrained("facebook/dpr-question_encoder-single-nq-base") context_encoder = DPRContextEncoder.from_pretrained("facebook/dpr-ctx_encoder-single-nq-base")</p> <p># Funkce pro kódování pasáží def encode_passages(passages): return context_encoder(passages, max_length=512, return_tensors="pt").pooler_output</p> <p># Funkce pro kódování dotazu def encode_query(query): return question_encoder(query, max_length=512, return_tensors="pt").pooler_output</p>
b) Rozšíření Dotazu
Můžeme použít rozšíření dotazu, aby se zlepšilo vyhledávání:
<p>from transformers import T5ForConditionalGeneration, T5Tokenizer</p>
<p>model = T5ForConditionalGeneration.from_pretrained("t5-small")
tokenizer = T5Tokenizer.from_pretrained("t5-small")</p>
<p>def expand_query(query):
input_text = f"expand query: {query}"
input_ids = tokenizer.encode(input_text, return_tensors="pt")
outputs = model.generate(input_ids, max_length=50, num_return_sequences=3)
expanded_queries = [tokenizer.decode(output, skip_special_tokens=True) for output in outputs]
return expanded_queries</p>
c) Iterativní Upravování
Můžeme implementovat iterativní proces upravování, kde agent může klást následné otázky, aby vyjasnil nebo rozšířil své počáteční vyhledávání:
<p>def iterative_retrieval(initial_query, max_iterations=3):
query = initial_query
for _ in range(max_iterations):
result = qa.run(query)
clarification = agent.run(f"Based on this result: '{result}', what follow-up question should I ask to get more specific information?")
if clarification.lower().strip() == "none":
break
query = clarification
return result</p>
# Použijte to ve svém agentovi
Implementace Víceagentního Systému
Abyste zvládli komplexnější úkoly, můžete implementovat víceagentní systém, kde se různé agenti specializují na různé oblasti. Zde je jednoduchý příklad:
<p>class SpecialistAgent:
def __init__(self, name, tools):
self.name = name
self.agent = initialize_agent(tools, OpenAI(temperature=0), agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)</p>
<p>def run(self, query):
return self.agent.run(query)</p>
<p># Vytvořte specialisty agentů
research_agent = SpecialistAgent("Research", [Tool(name="RAG-QA", func=qa.run, description="For AI and ML questions")])
math_agent = SpecialistAgent("Math", [Tool(name="Calculator", func=calculator._run, description="For calculations")])
general_agent = SpecialistAgent("General", [Tool(name="Search", func=search.run, description="For general queries")])</p>
<p>class Coordinator:
def __init__(self, agents):
self.agents = agents</p>
<p>def run(self, query):
# Určete, který agent použít
if "calculate" in query.lower() or any(op in query for op in ['+', '-', '*', '/']):
return self.agents['Math'].run(query)
elif any(term in query.lower() for term in ['ai', 'machine learning', 'deep learning']):
return self.agents['Research'].run(query)
else:
return self.agents['General'].run(query)</p>
<p>coordinator = Coordinator({'Research': research_agent, 'Math': math_agent, 'General': general_agent})</p>
<p># Otestujte víceagentní systém
result = coordinator.run("Jaký je rozdíl mezi CNN a RNN? A spočítejte 25% z 120.")
print(result)</p>
<p>Tento víceagentní systém umožňuje specializaci a může zvládat širší rozsah dotazů účinněji.</p>
Hodnocení a Optimalizace RAG Agentů
Abyste zajistili, že váš RAG agent funguje dobře, musíte implementovat metriky hodnocení a techniky optimalizace:
<h3>a) Hodnocení Relevance</h3>
Můžete použít metriky, jako je BLEU, ROUGE nebo BERTScore, pro hodnocení relevance získaných dokumentů:
[code language="PYTHON"]
from bert_score import score
<p>def evaluate_relevance(query, retrieved_doc, generated_answer):
P, R, F1 = score([generated_answer], [retrieved_doc], lang="en")
return F1.mean().item()</p>
b) Hodnocení Kvality Odpovědi
Můžete použít hodnocení lidského nebo automatického pro posouzení kvality odpovědi:
<p>from nltk.translate.bleu_score import sentence_bleu</p> <p>def evaluate_answer_quality(reference_answer, generated_answer): return sentence_bleu([reference_answer.split()], generated_answer.split())</p> <p># Použijte to pro hodnocení odpovědí vašeho agenta
Budoucí Směry a Výzvy
Jak se díváme do budoucnosti RAG agentů, objevují se několik zajímavých směrů a výzev:
a) Multimodální RAG: Rozšíření RAG o zahrnutí obrazových, audio a video dat.
b) Federovaný RAG: Implementace RAG napříč distribuovanými, soukromými znalostními bázemi.
c) Contínuální Učení: Rozvoj metod pro RAG agenty, aby aktualizovali své znalostní báze a modely s časem.
d) Etické Úvahy: Řešení problémů, jako je zkreslení, spravedlnost a transparentnost v RAG systémech.
e) Škálovatelnost: Optimalizace RAG pro velké, reálné aplikace.
Závěr
Stavba LLM agentů pro RAG od základu je složitý, ale odměňující proces. Prošli jsme základy RAG, implementovali jsme základní systém, vytvořili jsme LLM agenta, vylepšili jsme ho pokročilými technikami, prozkoumali jsme víceagentní systémy a diskutovali jsme o hodnocení a optimalizaci strategiích.














