LangChain create_agent()-Funktion

create_agent() ist die Kernfunktion von LangChain. Sie erstellt einen vollständigen Agenten-Graphen (StateGraph), einschließlich aller Logik wie Modellaufruf, Tool-Ausführung und Schleifensteuerung.

Syntax

Die Syntax der create_agent()-Funktion lautet wie folgt:

from langchain.agents import create_agent

agent = create_agent(
    model,                     # str | BaseChatModel:语言模型
    tools=None,                # Sequence:工具列表
    *,
    system_prompt=None,        # str | SystemMessage:系统提示
    middleware=(),             # Sequence[AgentMiddleware]:中间件列表
    response_format=None,      # ResponseFormat | type:结构化输出配置
    state_schema=None,         # type[AgentState]:自定义状态结构
    context_schema=None,       # type:运行时上下文结构
    checkpointer=None,         # Checkpointer:对话持久化
    store=None,                # BaseStore:跨会话存储
    interrupt_before=None,     # list[str]:在哪些节点前暂停
    interrupt_after=None,      # list[str]:在哪些节点后暂停
    debug=False,               # bool:是否输出详细日志
    name=None,                 # str:Agent 名称
    cache=None,                # BaseCache:缓存配置
)

model-Parameter - Modellkonfiguration

Der Parameter model akzeptiert zwei Formen: eine Zeichenkette (verarbeitet von init_chat_model()) oder eine bereits konstruierte BaseChatModel-Instanz.

Beispiel

from langchain.agents import create_agent
from langchain.chat_models import init_chat_model

# Methode 1: Eine Zeichenkette übergeben (am häufigsten)
# create_agent ruft intern init_chat_model() für die Verarbeitung auf
agent = create_agent(
    model="deepseek:deepseek-v4-flash",
    system_prompt="Du bist der Assistent von EXAMPLE",
)

# Methode 2: Eine bereits konstruierte Modellinstanz übergeben
# Geeignet für Szenarien, in denen du eine feingranulare Kontrolle über die Modellparameter benötigst
model = init_chat_model("deepseek:deepseek-v4-flash", temperature=0.3, max_tokens=500)
agent = create_agent(
    model=model,
    system_prompt="Du bist der Assistent von EXAMPLE",
)

# Methode 3: Eine Modellinstanz mit bereits gebundenen Tools übergeben
# Weniger üblich; normalerweise lässt man create_agent die Tool-Bindung selbst übernehmen
model_with_tools = init_chat_model("deepseek:deepseek-v4-flash").bind_tools([...])

Methode 1 (Übergeben eines Strings) wird empfohlen. create_agent() übernimmt intern automatisch die Modellinitialisierung, die Tool-Bindung, die strukturierte Ausgabe und andere Logik. Methode 2 eignet sich für Szenarien, in denen du dieselbe Modellinstanz außerhalb des Agenten verwenden musst.

tools-Parameter - Tool-Liste

Der tools-Parameter akzeptiert Tools in drei Formaten:

Beispiel

from langchain.tools import tool
from langchain.agents import create_agent

# Format 1: Eine mit @tool dekorierte Funktion (am häufigsten)
@tool
def search_course(keyword: str) -> str:
    """EXAMPLE-Kurse suchen"""
    return f"Suchergebnisse: {keyword} verwandte Kurse"


# Format 2: Eine Pydantic BaseModel-Klasse
from pydantic import BaseModel, Field

class WeatherQuery(BaseModel):
    """Wetter abfragen"""
    city: str = Field(description="Stadtname")


# Format 3: Ein Dictionary (das Remote-Tools oder integrierte Tools beschreibt)
mcp_tool = {
    "type": "mcp",
    "server_label": "weather_server",
    "server_url": "https://weather.example.com/sse",
    "allowed_tools": ["get_forecast"],
}

# Gemischte Verwendung
agent = create_agent(
    model="deepseek:deepseek-v4-flash",
    tools=[search_course, WeatherQuery, mcp_tool],
)

Wenn None oder eine leere Liste übergeben wird, bedeutet das, dass der Agent keine Tools zur Verfügung hat; in diesem Fall ist er einfach ein reines Konversationsmodell:

Beispiel

from langchain.agents import create_agent
from langchain.messages import HumanMessage

# Agent ohne Tools - entspricht dem direkten Aufruf des Modells
agent = create_agent(
    model="deepseek:deepseek-v4-flash",
    tools=None,
    system_prompt="Du bist der Assistent von EXAMPLE",
)

result = agent.invoke({
    "messages": [HumanMessage(content="Ist Python für absolute Anfänger geeignet?")]
})
print(result["messages"][-1].content)

system_prompt Parameter - System-Prompt

Definiert die Verhaltensrolle und die Einschränkungsregeln des Agenten. Unterstützt Zeichenketten und SystemMessage-Objekte.

Beispiel

from langchain.agents import create_agent
from langchain.messages import SystemMessage

# Methode 1: String (einfach und direkt)
agent = create_agent(
    model="deepseek:deepseek-v4-flash",
    system_prompt="Du bist der Lernberater von EXAMPLE. Halte die Antworten prägnant, nicht mehr als 100 Zeichen.",
)

# Methode 2: SystemMessage-Objekt (kann über mehrere Agenten hinweg wiederverwendet werden)
system_msg = SystemMessage(
    content="Du bist der Lernberater von EXAMPLE. Halte die Antworten prägnant, nicht mehr als 100 Zeichen."
)
agent = create_agent(
    model="deepseek:deepseek-v4-flash",
    system_prompt=system_msg,
)

system_prompt ist optional, aber wenn er nicht angegeben wird, antwortet das Modell in der Rolle eines "Allgemeinassistenten". Für Anwendungen mit klaren Geschäftsszenarien wird empfohlen, system_prompt immer festzulegen, um die Verhaltensgrenzen des Modells einzuschränken.

state_schema Parameter - Benutzerdefinierter Zustand

Der standardmäßige AgentState enthält nur messages, jump_to und structured_response. Wenn Sie zusätzliche Statusfelder benötigen, können Sie ihn erweitern:

Beispiel

from typing import Annotated
from langchain.agents import create_agent, AgentState
from langchain.messages import HumanMessage
from langchain.tools import tool, InjectedState
from typing_extensions import TypedDict


# AgentState erweitern und benutzerdefinierte Felder hinzufügen
class LearningAgentState(AgentState):
    """Benutzerdefinierter Status, der Felder zum Lernfortschritt hinzufügt"""
    user_level: str                       # Benutzerstufe
    completed_topics: list[str]           # Liste der abgeschlossenen Themen


@tool
def track_progress(
    topic: str,
    state: Annotated[dict, InjectedState],
) -> str:
    """Den Lernfortschritt des Benutzers aufzeichnen.

    Argumente:
topic: Der Name des gerade abgeschlossenen Themas
    """

    completed = state.get("completed_topics", [])
    completed.append(topic)
    return (
        f"Lernfortschritt aufgezeichnet. Aktuell abgeschlossene {len(completed)} Themen:"
        f"{', '.join(completed)}"
    )


agent = create_agent(
    model="deepseek:deepseek-v4-flash",
    tools=[track_progress],
    state_schema=LearningAgentState,  # Benutzerdefinierten Zustand verwenden
    system_prompt="Du bist der Lernassistent von EXAMPLE.",
)

# Der Anfangswert des benutzerdefinierten Zustands muss zur Laufzeit angegeben werden
result = agent.invoke({
    "messages": [HumanMessage(content="Ich habe die Python-Grundlagen abgeschlossen. Bitte erfasse es für mich.")],
    "user_level": "Anfänger",
    "completed_topics": ["HTML-Grundlagen"],
})

print(f"Benutzerebene: {result.get('user_level')}")
print(f"Abgeschlossene Themen: {result.get('completed_topics')}")
print(f"Antwort: {result['messages'][-1].content[:100]}")

Ausgabe:

User level: 入门
Completed topics: ['HTML 基础', 'Python 基础']
Reply: Learning progress recorded. Completed 2 topics: HTML Basics, Python Basics

Rückgabewert - CompiledStateGraph

create_agent() gibt einCompiledStateGraphObjekt zurück, das der kompilierte Graph von LangGraph ist und mehrere Möglichkeiten zur Ausführung bietet:

MethodeBeschreibungAnwendungsfall
invoke(input, config)Synchroner Lauf, auf das vollständige Ergebnis wartenSkripte, einfache Schnittstellen
ainvoke(input, config)Asynchroner Lauf, auf das vollständige Ergebnis wartenWebdienste
stream(input, config, stream_mode)Synchroner Streaming-LaufZwischenschritte in Echtzeit anzeigen
astream(input, config, stream_mode)Asynchroner Streaming-LaufWebSocket, SSE
get_state(config)Aktuellen Status abrufenKonversationsstatus anzeigen/wiederherstellen
update_state(config, values)Status aktualisierenKonversationsstatus manuell ändern
Weitere Erweiterungen