Del 4: Autonome Agenter

Byg Agent-Netværk med
CrewAI

Det smarte ved dit nuværende setup er, at din llama-server allerede udstiller et OpenAI-kompatibelt API på port 8080. Det betyder, at du kan bruge næsten alle moderne agent-frameworks direkte mod din lokale model. Et fremragende framework at starte med er CrewAI i Python, hvor agenter samarbejder autonomt om at løse opgaver.

Det komplette to-agent workflow

Her er et script, hvor en Udvikler-agent refaktorerer koden via et FileReadTool, og en Reviewer-agent bagefter gennemtvinger type-hints og gemmer den som en fil.

Husk: pip install crewai langchain-openai crewai-tools sentence-transformers

agent_test.py
import os
from crewai import Agent, Task, Crew, Process
from langchain_openai import ChatOpenAI
from crewai_tools import FileReadTool

# 1. Peg på din kørende llama.cpp server lokalt
os.environ["OPENAI_API_KEY"] = "sk-lokal"
lokal_llm = ChatOpenAI(
    model_name="qwen2.5-coder-7b", 
    openai_api_base="http://127.0.0.1:8080/v1",
    temperature=0.1
)

fil_laeser = FileReadTool(file_path='gammel_kode.py')

# --- AGENT 1: Udvikleren ---
udvikler_agent = Agent(
    role='Senior Python Udvikler',
    goal='Læs eksisterende kode og omskriv den til at være effektiv.',
    backstory='Du er en dygtig udvikler, der rydder op i ineffektive loops.',
    llm=lokal_llm,
    tools=[fil_laeser],
    allow_delegation=False
)

# --- AGENT 2: Tech Lead / Reviewer ---
reviewer_agent = Agent(
    role='Strenge Tech Lead',
    goal='Gennemgå koden, tjek for best practices.',
    backstory='Du fokuserer på type-hints, docstrings og fejlhåndtering.',
    llm=lokal_llm,
    allow_delegation=False 
)

# --- OPGAVER ---
udvikler_opgave = Task(
    description='Brug fil-værktøjet til at læse. Refaktorér koden.',
    expected_output='Udkast til den nye kode.',
    agent=udvikler_agent
)

review_opgave = Task(
    description='Gennemgå output. Tilføj type-hints. Returner KUN rå kode uden markdown.',
    expected_output='Produktionsklar kode.',
    agent=reviewer_agent,
    output_file='refaktoreret_kode.py' # Gemmer automatisk resultatet!
)

# 3. Saml crewet (Sequential Process) med Lokal Hukommelse
mit_crew = Crew(
    agents=[udvikler_agent, reviewer_agent],
    tasks=[udvikler_opgave, review_opgave],
    process=Process.sequential,
    memory=True, 
    embedder={"provider": "huggingface", "config": {"model": "BAAI/bge-small-en-v1.5"}},
    verbose=True
)

resultat = mit_crew.kickoff()
print("\n### ENDELIGT GODKENDT RESULTAT ###\n", resultat)

Avancerede strategier for Agent-Teams

1. Skalerbarhed (Læs hele mapper)

Hvis du beder agenten "læse hele mappen" via DirectoryReadTool, oversvømmer du 8192 token kontekstvinduet. Løsningen er at bruge Python til at gennemsøge mappen (f.eks. efter .cpp filer). For hver fil genererer du dynamisk en specifik Task med et unikt FileReadTool(file_path=filsti), så modellen kun analyserer én fil ad gangen.

2. Custom Tools (Compiler Test)

Giv agenten adgang til at køre en compiler via Pythons @tool-dekoratør og subprocess. Hvis den f.eks. glemmer et semikolon i C++, returnerer værktøjet error: expected ';' before '}', hvorefter agenten selv kan rette koden og teste igen. For Python-scripts er det kritisk at tilføje timeout=10, så agenten ikke fryser systemet i et uendeligt loop under f.eks. PyVISA instrumentstyring.

3. Begrænsning af rettelses-loops & Hukommelse

Brug max_iter=4 på agenten for at undgå endeløse forsøg på at rette den samme fejl. Ved at aktivere hukommelse (memory=True) med sentence-transformers og HuggingFace-modellen BAAI/bge-small-en-v1.5, gemmer agenterne deres erfaringer i en lokal SQLite database (oftest kaldet long_term_memory.db). På den måde løser de pointer-fejl meget hurtigere næste gang.