Jednoduchá aplikace RAG pro možnost nahrání pdf dokumentu a nastavení v rámci platformy LangFlow, bez kódování. Open source model Ollama na lokálním zařízení, nebo klasický openai model.
Zaujal mě tento návod a tak jsem neváhal a hned ho vyzkoušel u sebe na pc.
Zde je hezké schéma ohledně nastavení RAG:
Langflow je nástroj navržený pro Langchain aplikace a umožňuje nastavit aplikace bez nutnosti cokoliv programovat. Funguje v rámci uživatelského rozhraní.
Ollama je opensource model, který podporuje možnost použití nejnovější OS modelů, jako např. Llama 2 nebo Mistral.
Pokud vás zajímá více teorie ohledně jednotlivých komponent, doporučuju si přečíst dokumentaci jednotlivých komponent, ze kterých jsem vycházel. V původním návodu realizovali poradce pro zdravou výživu. Já si ve svém návodu vytvořím poradce ohledně permakultury.
Nyní pojďme rovnou k praktickému návodu:
Návod Langflow
Nejprve si nainstalujeme model Ollama do pc.
A následně spustíme v terminálu příkazy:
ollama serve
ollama pull llama2
ollama pull nomic-embed-text
ollama run llama2
Vytvoříme si složku na disku a dále pokračujeme příkazy níže (dle operačního systému). Tím nainstalujeme Langflow.
conda create -n langflow python= 3.11
conda activate langflow
pip install langflow
Spustíme LangFlow: „langflow run„
V prohlížeči dáme lokální adresu: http://127.0.0.1:7860/
Návod RAG + Ollama
Vytvoříme první projekt a v levém menu si přetáhneme následující komponenty:
- PDF Loader pro načtení pdf dokumentu .
- Text Splitter – rozdělí text na menší části (chunks).
- Model embeddings (Převod textu do vektorů).
- Vektorová databáze (databáze pro vektory).
- LLM ChatOllama (jazykový model).
- Paměť konverzace – paměť pro plynulou konverzaci.
- Retrieval Chain – propojuje jednotlivé komponenty.
Propojíme jednotlivé komponenty a nastavíme dle potřeby.
Vpravo dole dáme blesk a počkáme na načtení.
Poté můžeme (pod bleskem) kliknout na ikonku chatu a vyzkoušet funkčnost nastaveného chatbota.
Po položení několika otázek mohu konstatovat, že funguje správně.
RAG + OpenAI nastavení
Nyní si zkusíme nastavit klasický OpenAi model.
Změníme Embedding model na OpenAI a model na chat OpenAI (GPT-4 Turbo), vektorouvou databázi na Chroma. Zbytek necháme stejně. Nastavíme API klíč OpenAI.
Vyzkoušíme konverzaci.
Funguje. Model odpovídá na otázky ohledně informací z pdf správně.
Export kodu
Následně můžeme nastavení vyexportovat jako json soubor, nebo zkopírovat kód a vložit do své aplikace. Můžeme zkopírovat python i html widget s rozhraním aplikace.
import requests
from typing import Optional
BASE_API_URL = "http://127.0.0.1:7860/api/v1/process"
FLOW_ID = "6d5136ab-4dd1-4768-8e7c-530fba784763"
# You can tweak the flow by adding a tweaks dictionary
# e.g {"OpenAI-XXXXX": {"model_name": "gpt-4"}}
TWEAKS = {
"PyPDFLoader-xwCbT": {},
"RecursiveCharacterTextSplitter-B8hSX": {},
"OpenAIEmbeddings-dnlZh": {},
"Chroma-I5XEu": {},
"ConversationBufferMemory-kvQAI": {},
"ConversationalRetrievalChain-DdPhP": {},
"ChatOpenAI-Ey74W": {}
}
def run_flow(inputs: dict, flow_id: str, tweaks: Optional[dict] = None) -> dict:
"""
Run a flow with a given message and optional tweaks.
:param message: The message to send to the flow
:param flow_id: The ID of the flow to run
:param tweaks: Optional tweaks to customize the flow
:return: The JSON response from the flow
"""
api_url = f"{BASE_API_URL}/{flow_id}"
payload = {"inputs": inputs}
headers = None
if tweaks:
payload["tweaks"] = tweaks
if api_key:
headers = {"x-api-key": api_key}
response = requests.post(api_url, json=payload, headers=headers)
return response.json()
# Setup any tweaks you want to apply to the flow
inputs = {"question":""}
print(run_flow(inputs, flow_id=FLOW_ID, tweaks=TWEAKS))
Zajímavé jsou i další příklady použití LangFlow.
Celkově hodnotím aplikaci i uživatelské prostředí jako velmi srozumitelné a dobře použitelné i pro někoho, kdo neumí programovat. Já už jsem naštěstí trochu dále a aplikaci si dokážu připravit i bez tohoto rozhraní, ale docela se mi líbí ta vizuální složka, kde si můžete pospojovat jednotlivé komponenty a ihned otestovat, bez nutnosti zdlouhavého kódování. Je vidět, že i LLM rychle spějí k no code/low code platformám.