O! Lama na łańcuchu

W erze prywatności i lokalnych środowisk developerskich coraz więcej osób sięga po modele językowe uruchamiane na własnym sprzęcie. Dzięki LangChain i Ollama możesz budować aplikacje z LLM bez OpenAI i internetu. W tym wpisie pokażę, jak połączyć te dwa narzędzia i odpalić własnego lokalnego chatbota.

Co to jest LangChain?

LangChain to framework w Pythonie (i JS), który pozwala szybko budować aplikacje z użyciem modeli językowych. Oferuje integracje z różnymi źródłami danych, narzędziami, pamięcią kontekstową i modelami — zarówno zdalnymi (OpenAI, Claude), jak i lokalnymi (np. Ollama).

Co to jest Ollama?

Ollama to lekki runtime do lokalnego uruchamiania LLM-ów takich jak LLaMA, Mistral, DeepSeek czy nasz polske Bielik lub PLLuM. Modele można pobrać jednym poleceniem (przykładowo Bielika):

$ ollama run hf.co/speakleash/Bielik-11B-v2.3-Instruct-GGUF:Q6_K

Po uruchomieniu nasłuchuje na http://localhost:11434, oferując REST API gotowe do integracji.

Co będzie nam potrzebne?

  • Python 3.12
  • Ollama (Wraz z wybranym przez nas modelem)
  • Biblioteki pythona (LangChain)
$ pip install langchain langchain-community

Zróbmy sobie chat’a

Oto przykładowy kod używający model Pllum

from langchain_ollama import ChatOllama
from langchain.schema import SystemMessage, HumanMessage
from langchain_core.prompts import ChatPromptTemplate

# Inicjalizacja lokalnego modelu
llm = ChatOllama(model="hf.co/speakleash/Bielik-11B-v2.3-Instruct-GGUF:Q6_K", temperature=0)

# Prosty prompt z szablonem
prompt = ChatPromptTemplate.from_messages([
    SystemMessage(content="Jesteś Adam i jesteś Botem AI, Mieszkasz w Krakowie."),
    HumanMessage(content="{question}")  # Pytanie użytkownika
])

messages = prompt.format_messages(question="Jak masz na imię?")
response = llm.invoke(messages)

print(response.content)

Jest to bardzo prosty przykład, brakuje w nim przykładowo pamięci! Nasz bot, nie będzie pamiętać nić pomiędzy kolejnymi promptami, ale możemy temu zaradzić tworząc prostą pamięć:

from langchain_ollama import ChatOllama
from langchain.schema import SystemMessage, HumanMessage, AIMessage

# Inicjalizacja modelu
llm = ChatOllama(model="hf.co/speakleash/Bielik-11B-v2.3-Instruct-GGUF:Q6_K", temperature=0)

# Historia konwersacji
chat_history = [
    SystemMessage(content="Jesteś Adam i jesteś Botem AI, Mieszkasz w Krakowie.")
]

# Funkcja obsługująca kolejne zapytania
def chat_with_memory(question: str):
    # Dodaj wiadomość użytkownika
    chat_history.append(HumanMessage(content=question))
    
    # Odpowiedź od modelu na podstawie całej historii
    response = llm.invoke(chat_history)
    
    # Dodaj odpowiedź modelu do historii
    chat_history.append(AIMessage(content=response.content))
    
    return response.content

# Przykład użycia
print(chat_with_memory("Jak masz na imię?"))
print(chat_with_memory("Gdzie mieszkasz?"))
print(chat_with_memory("O co Cię pytałem na początku?"))

Co możemy zrobić z tym dalej?

LangChain + Ollama to potężne połączenie, które pozwala stworzyć wiele ciekawych rozwiązań.

  • możesz tworzyć lokalnych agentów
  • analizować dokumenty (np. zapisane w bazie wektorowej)
  • tworzyć własne narzędzia które będą rozszerzały możliwości Twojego bota

Photo by Nathan Van de Graaf on Unsplash