Bauen von AI -Agenten mit Lama.cppBauen von AI -Agenten mit Lama.cpp
Bild des Autors

llama.cpp ist das ursprüngliche, leistungsstarke Rahmen, das viele beliebte lokale KI-Instruments, darunter Ollama, lokale Chatbots und andere LLM-Lösungen für das Gerät. Wenn Sie direkt mit llama.cpp arbeiten, können Sie den Overhead minimieren, eine feinkörnige Kontrolle gewinnen und die Leistung für Ihre spezifische {Hardware} optimieren, wodurch Ihre lokalen AI-Agenten und -Anwendungen schneller und konfigurierbarer werden

In diesem Tutorial werde ich Sie durch das Erstellen von AI -Anwendungen mit LLAMA.CPP, einer leistungsstarken C/C ++ – Bibliothek für die effiziente Ausführung von großsprachigen Modellen (LLMs), führen. Wir werden einen Lama.CPP -Server einrichten, ihn in Langchain integrieren und einen React -Agenten erstellen, der Instruments wie Websuche und eine Python -Reply verwenden kann.

1. Einrichten des lama.cpp -Servers

Dieser Abschnitt deckt die Set up von llama.cpp und seinen Abhängigkeiten ab, konfiguriert sie für die CUDA -Unterstützung, das Erstellen der erforderlichen Binärdateien und das Ausführen des Servers.

Notiz: Wir verwenden eine NVIDIA RTX 4090-Grafikkarte, die auf einem Linux-Betriebssystem mit dem CUDA Toolkit vorkonfiguriert wird. Wenn Sie keinen Zugriff auf ähnliche lokale {Hardware} haben, können Sie GPU -Instanzen aus mieten Riesig.ai für einen günstigeren Preis.

Bauen von AI -Agenten mit Lama.cppBauen von AI -Agenten mit Lama.cpp
Screenshot von Riesig.ai | Konsole

  1. Aktualisieren Sie die Paketliste Ihres Programs und installieren Sie essentielle Instruments wie Construct-Escial, CMake, Curl und Git. PCIUTILS ist für Hardwareinformationen enthalten, und für llama.cpp wird libcurl4-openSSL-dev benötigt, um Modelle aus dem Umarmungsgesicht herunterzuladen.
apt-get replace
apt-get set up pciutils build-essential cmake curl libcurl4-openssl-dev git -y
  1. Klonen Sie das offizielle Lama.cpp -Repository aus GitHub und konfigurieren Sie CMake, um den Construct zu konfigurieren.
# Clone llama.cpp repository
git clone https://github.com/ggml-org/llama.cpp

# Configure construct with CUDA assist
cmake llama.cpp -B llama.cpp/construct 
    -DBUILD_SHARED_LIBS=OFF 
    -DGGML_CUDA=ON 
    -DLLAMA_CURL=ON
  1. Kompilieren Sie llama.cpp und alle seine Instruments, einschließlich des Servers. Kopieren Sie alle kompilierten Binärdateien aus dem Lama.cpp/ Construct/ Bin/ Verzeichnis in das Hauptlama.cpp/ Verzeichnis.
# Construct all crucial binaries together with server
cmake --build llama.cpp/construct --config Launch -j --clean-first

# Copy all binaries to foremost listing
cp llama.cpp/construct/bin/* llama.cpp/
  1. Starten Sie den LLAMA.CPP-Server mit einem Unloth/Gemma-3-4B-IT-GGUF-Modell.
./llama.cpp/llama-server 
    -hf unsloth/gemma-3-4b-it-GGUF:Q4_K_XL 
    --host 0.0.0.0 
    --port 8000 
    --n-gpu-layers 999 
    --ctx-size 8192 
    --threads $(nproc) 
    --temp 0.6 
    --cache-type-k q4_0 
    --jinja
  1. Sie können testen, ob der Server korrekt ausgeführt wird, indem Sie eine Postanforderung mit Curl senden.
(foremost) root@C.20841134:/workspace$ curl -X POST http://localhost:8000/v1/chat/completions 
    -H "Content material-Kind: software/json" 
    -d '{
        "messages": (
            {"function": "consumer", "content material": "Whats up! How are you immediately?"}
        ),
        "max_tokens": 150,
        "temperature": 0.7
    }'

Ausgabe:

{"selections":({"finish_reason":"size","index":0,"message":{"function":"assistant","content material":"nOkay, consumer greeted me with a easy "Whats up! How are you immediately?" nnHmm, this looks as if an informal opening. The consumer is perhaps testing the waters to see if I reply naturally, or perhaps they genuinely wish to understand how an AI assistant conceptualizes "being" however in a pleasant method. nnI discover they used an exclamation mark, which feels heat and probably playful. Perhaps they're in a great temper or simply attempting to make dialog really feel much less robotic. nnSince I haven't got feelings, I ought to make clear that lightly however nonetheless hold it heat. The response ought to acknowledge their greeting whereas explaining my nature as an AI. nnI surprise in the event that they're asking as a result of they're interested by AI consciousness, or simply being well mannered"}}),"created":1749319250,"mannequin":"gpt-3.5-turbo","system_fingerprint":"b5605-5787b5da","object":"chat.completion","utilization":{"completion_tokens":150,"prompt_tokens":9,"total_tokens":159},"id":"chatcmpl-jNfif9mcYydO2c6nK0BYkrtpNXSnseV1","timings":{"prompt_n":9,"prompt_ms":65.502,"prompt_per_token_ms":7.278,"prompt_per_second":137.40038472107722,"predicted_n":150,"predicted_ms":1207.908,"predicted_per_token_ms":8.052719999999999,"predicted_per_second":124.1816429728092}}

2. Bauen eines AI -Agenten mit Langgraph und Lama.cpp

Lassen Sie uns nun Langgraph und Langchain verwenden, um mit dem Lama.cpp -Server zu interagieren und einen Multi -Instrument -AI -Agenten zu erstellen.

  1. Legen Sie Ihren Tavily -API -Schlüssel für Suchfunktionen ein.
  2. Damit Langchain mit dem lokalen llama.cpp-Server (der eine OpenAI-API emuliert) zusammenarbeitet, können Sie OpenAI_API_KEY auf lokale oder nicht leere Zeichenfolge festlegen, da die Base_url die Anforderungen lokal leitet.
export TAVILY_API_KEY="your_api_key_here"
export OPENAI_API_KEY=native
  1. Installieren Sie die notwendigen Python-Bibliotheken: Langgraph für die Erstellung von Agenten, Tavily-Python für das Tavily-Suchwerkzeug und verschiedene Langchain-Pakete für LLM-Interaktionen und -Instruments.
%%seize
!pip set up -U 
    langgraph tavily-python langchain langchain-community langchain-experimental langchain-openai
  1. Konfigurieren Sie Chatopenai aus Langchain, um mit Ihrem lokalen lama.cpp -Server zu kommunizieren.
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    mannequin="unsloth/gemma-3-4b-it-GGUF:Q4_K_XL",   
    temperature=0.6,
    base_url="http://localhost:8000/v1",         
)
  1. Richten Sie die Instruments ein, die Ihr Agent verwenden kann.
    • TavilySearchResults: Ermöglicht dem Agenten, das Net zu durchsuchen.
    • Pythonrepltool: Bietet dem Agenten eine Python-Leser-Eval-Print-Schleife, um Code auszuführen.
from langchain_community.instruments import TavilySearchResults
from langchain_experimental.instruments.python.software import PythonREPLTool

search_tool = TavilySearchResults(max_results=5, include_answer=True)
code_tool   = PythonREPLTool()

instruments = (search_tool, code_tool)
  1. Verwenden Sie Langgraphs Pre -erstellte Funktion create_react_agent, um einen Agenten zu erstellen, der mithilfe der LLM und den definierten Instruments (React Framework) (React Framework) erstellt und handeln kann.
from langgraph.prebuilt import create_react_agent

agent = create_react_agent(
    mannequin=llm,
    instruments=instruments,
)

3. Testen Sie den AI -Agenten mit Beispielabfragen

Jetzt testen wir den AI -Agenten und zeigen auch an, welche Werkzeuge der Agent verwendet.

  1. Diese Helferfunktion extrahiert die Namen der vom Agenten verwendeten Instruments aus der Konversationsgeschichte. Dies ist nützlich, um den Entscheidungsprozess des Agenten zu verstehen.
def extract_tool_names(dialog: dict) -> record(str):
    tool_names = set()
    for msg in dialog.get('messages', ()):
        calls = ()
        if hasattr(msg, 'tool_calls'):
            calls = msg.tool_calls or ()
        elif isinstance(msg, dict):
            calls = msg.get('tool_calls') or ()
            if not calls and isinstance(msg.get('additional_kwargs'), dict):
                calls = msg('additional_kwargs').get('tool_calls', ())
        else:
            ak = getattr(msg, 'additional_kwargs', None)
            if isinstance(ak, dict):
                calls = ak.get('tool_calls', ())
        for name in calls:
            if isinstance(name, dict):
                if 'title' in name:
                    tool_names.add(name('title'))
                elif 'operate' in name and isinstance(name('operate'), dict):
                    fn = name('operate')
                    if 'title' in fn:
                        tool_names.add(fn('title'))
    return sorted(tool_names)
  1. Definieren Sie eine Funktion, um den Agenten mit einer bestimmten Frage auszuführen und die verwendeten Instruments und die endgültige Antwort zu drucken.
def run_agent(query: str):
    end result = agent.invoke({"messages": ({"function": "consumer", "content material": query})})
    raw_answer = end result("messages")(-1).content material
    tools_used = extract_tool_names(end result)
    return tools_used, raw_answer
  1. Fragen wir den Agenten nach den Prime 5 Nachrichten. Es sollte das Instrument tavily_search_results_json verwenden.
instruments, reply = run_agent("What are the highest 5 breaking information tales?")
print("Instruments used ➡️", instruments)
print(reply)

Ausgabe:

Instruments used ➡️ ('tavily_search_results_json')
Listed below are the highest 5 breaking information tales primarily based on the offered sources:

1.  **Gaza Humanitarian Disaster:** Ongoing battle and challenges in Gaza, together with the Eid al-Adha vacation, and the retrieval of a Thai hostage's physique.
2.  **Russian Drone Assaults on Kharkiv:** Russia continues to focus on Ukrainian cities with drone and missile strikes.
3.  **Wagner Group Departure from Mali:** The Wagner Group is leaving Mali after heavy losses, however Russia's Africa Corps stays.
4.  **Trump-Musk Feud:** A dispute between former President Trump and Elon Musk might have implications for Tesla inventory and the U.S. area program.
5.  **Schooling Division Staffing Cuts:** The Biden administration is looking for Supreme Court docket intervention to dam deliberate staffing cuts on the Schooling Division.
  1. Bitten wir den Agenten, den Python -Code für die Fibonacci -Serie zu schreiben und auszuführen. Es sollte das Instrument Python_repl verwenden.
instruments, reply = run_agent(
    "Write a code for the Fibonacci collection and execute it utilizing Python REPL."
)
print("Instruments used ➡️", instruments)
print(reply)

Ausgabe:

Instruments used ➡️ ('Python_REPL')
The Fibonacci collection as much as 10 phrases is (0, 1, 1, 2, 3, 5, 8, 13, 21, 34).

Letzte Gedanken

In diesem Leitfaden habe ich ein kleines quantisiertes LLM verwendet, das manchmal mit Genauigkeit zu kämpfen hat, insbesondere bei der Auswahl der Werkzeuge. Wenn Ihr Ziel darin besteht, produktionsbereite KI-Agenten aufzubauen, empfehle ich dringend, die neuesten Modelle in voller Größe mit Lama.cpp auszuführen. Größere und neuere Modelle liefern im Allgemeinen bessere Ergebnisse und zuverlässigere Ausgaben

Es ist wichtig zu beachten, dass das Einrichten von llama.cpp im Vergleich zu benutzerfreundlichen Instruments wie Ollama schwieriger sein kann. Wenn Sie jedoch bereit sind, die Zeit zum Debuggen, Optimieren und Anpassung von llama.cpp für Ihre spezifische {Hardware} zu investieren, lohnt sich die Leistungssteigerungen und die Flexibilität.

Einer der größten Vorteile von llama.cpp ist die Effizienz: Sie benötigen keine Excessive-Finish-{Hardware}, um loszulegen. Es läuft bei regulären CPUs und Laptops ohne spezielle GPUs intestine und macht die lokale KI für quick alle zugänglich. Und wenn Sie jemals mehr Strom benötigen, können Sie jederzeit eine erschwingliche GPU -Instanz von einem Cloud -Anbieter mieten.

Abid Ali Awan (@1abidaliawan) ist ein zertifizierter Datenwissenschaftler, der es liebt, maschinelles Lernenmodelle zu bauen. Derzeit konzentriert er sich auf die Erstellung von Inhalten und das Schreiben von technischen Blogs über maschinelles Lernen und Datenwissenschaftstechnologien. Abid hat einen Grasp -Abschluss in Technologiemanagement und einen Bachelor -Abschluss in Telekommunikationstechnik. Seine Imaginative and prescient ist es, ein KI -Produkt zu bauen, das ein Diagramm neuronales Netzwerk für Schüler mit psychische Erkrankungen mit kämpfender Krankheiten unterhält.

Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert