Fonction create_agent() de LangChain
create_agent() est la fonction principale de LangChain. Elle crée un graphe Agent complet (StateGraph), incluant toute la logique telle que l'appel du modèle, l'exécution des outils et le contrôle de boucle.
Syntaxe
La syntaxe de la fonction create_agent() est la suivante :
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:缓存配置
)
Paramètre model - Configuration du modèle
Le paramètre model accepte deux formes : une chaîne (traitée par init_chat_model()) ou une instance BaseChatModel déjà construite.
Exemple
from langchain.chat_models import init_chat_model
# Méthode 1 : Passer une chaîne (la plus courante)
# create_agent appelle en interne init_chat_model() pour le traitement
agent = create_agent(
model="deepseek:deepseek-v4-flash",
system_prompt="Vous êtes l'assistant de EXAMPLE",
)
# Méthode 2 : Passer une instance de modèle déjà construite
# Convient aux scénarios où vous avez besoin d'un contrôle fin sur les paramètres du modèle
model = init_chat_model("deepseek:deepseek-v4-flash", temperature=0.3, max_tokens=500)
agent = create_agent(
model=model,
system_prompt="Vous êtes l'assistant de EXAMPLE",
)
# Méthode 3 : Passer une instance de modèle avec des outils déjà liés
# Moins courant ; généralement, laissez create_agent gérer lui-même la liaison des outils
model_with_tools = init_chat_model("deepseek:deepseek-v4-flash").bind_tools([...])
La méthode 1 (passer une chaîne) est recommandée. create_agent() gère automatiquement l'initialisation du modèle, la liaison des outils, la sortie structurée et d'autres logiques en interne. La méthode 2 convient aux scénarios où vous devez utiliser la même instance de modèle en dehors de l'Agent.
Paramètre tools - Liste d'outils
Le paramètre tools accepte les outils sous trois formats :
Exemple
from langchain.agents import create_agent
# Format 1 : Une fonction décorée avec @tool (le plus courant)
@tool
def search_course(keyword: str) -> str:
"""Rechercher des cours EXAMPLE"""
return f"Résultats de recherche : cours liés à {keyword}"
# Format 2 : une classe Pydantic BaseModel
from pydantic import BaseModel, Field
class WeatherQuery(BaseModel):
"""Interroger la météo"""
city: str = Field(description="Nom de la ville")
# Format 3 : un dictionnaire (décrivant des outils distants ou des outils intégrés)
mcp_tool = {
"type": "mcp",
"server_label": "weather_server",
"server_url": "https://weather.example.com/sse",
"allowed_tools": ["get_forecast"],
}
# Utilisation mixte
agent = create_agent(
model="deepseek:deepseek-v4-flash",
tools=[search_course, WeatherQuery, mcp_tool],
)
Passer None ou une liste vide signifie que l'Agent n'a aucun outil disponible ; dans ce cas, il s'agit simplement d'un modèle de conversation pur :
Exemple
from langchain.messages import HumanMessage
# Agent sans outils - équivalent à appeler directement le modèle
agent = create_agent(
model="deepseek:deepseek-v4-flash",
tools=None,
system_prompt="Vous êtes l'assistant de EXAMPLE",
)
result = agent.invoke({
"messages": [HumanMessage(content="Python convient-il aux débutants complets ?")]
})
print(result["messages"][-1].content)
Paramètre system_prompt - Prompt système
Définit le rôle comportemental et les règles de contrainte de l'Agent. Prend en charge les chaînes et les objets SystemMessage.
Exemple
from langchain.messages import SystemMessage
# Méthode 1 : chaîne (simple et directe)
agent = create_agent(
model="deepseek:deepseek-v4-flash",
system_prompt="Vous êtes le conseiller pédagogique d'EXAMPLE. Gardez des réponses concises, pas plus de 100 caractères.",
)
# Méthode 2 : objet SystemMessage (peut être réutilisé entre plusieurs Agents)
system_msg = SystemMessage(
content="Vous êtes le conseiller pédagogique d'EXAMPLE. Gardez des réponses concises, pas plus de 100 caractères."
)
agent = create_agent(
model="deepseek:deepseek-v4-flash",
system_prompt=system_msg,
)
system_prompt est facultatif, mais s'il n'est pas fourni, le modèle répondra dans le rôle d'un « assistant polyvalent ». Pour les applications ayant des scénarios métier clairs, il est recommandé de toujours définir system_prompt afin de contraindre les limites de comportement du modèle.
Paramètre state_schema - État personnalisé
L'AgentState par défaut inclut uniquement messages, jump_to et structured_response. Si vous avez besoin de champs d'état supplémentaires, vous pouvez l'étendre :
Exemple
from langchain.agents import create_agent, AgentState
from langchain.messages import HumanMessage
from langchain.tools import tool, InjectedState
from typing_extensions import TypedDict
# Étendre AgentState et ajouter des champs personnalisés
class LearningAgentState(AgentState):
"""État personnalisé, ajout de champs liés à la progression d'apprentissage"""
user_level: str # Niveau de l'utilisateur
completed_topics: list[str] # Liste des sujets terminés
@tool
def track_progress(
topic: str,
state: Annotated[dict, InjectedState],
) -> str:
"""Enregistrer la progression d'apprentissage de l'utilisateur.
Arguments :
topic: Le nom du sujet qui vient d'être terminé
"""
completed = state.get("completed_topics", [])
completed.append(topic)
return (
f"Progression d'apprentissage enregistrée. {len(completed)} sujets actuellement terminés :"
f"{', '.join(completed)}"
)
agent = create_agent(
model="deepseek:deepseek-v4-flash",
tools=[track_progress],
state_schema=LearningAgentState, # Utilisation d'un état personnalisé
system_prompt="Vous êtes l'assistant d'apprentissage d'EXAMPLE.",
)
# La valeur initiale de l'état personnalisé doit être fournie à l'exécution
result = agent.invoke({
"messages": [HumanMessage(content="J'ai terminé d'apprendre les bases de Python. Veuillez l'enregistrer pour moi.")],
"user_level": "Débutant",
"completed_topics": ["Bases HTML"],
})
print(f"Niveau utilisateur : {result.get('user_level')}")
print(f"Sujets terminés : {result.get('completed_topics')}")
print(f"Réponse : {result['messages'][-1].content[:100]}")
Sortie :
User level: 入门 Completed topics: ['HTML 基础', 'Python 基础'] Reply: Learning progress recorded. Completed 2 topics: HTML Basics, Python Basics
Valeur de retour - CompiledStateGraph
create_agent() renvoie un objetCompiledStateGraph, qui est le graphe compilé de LangGraph et propose plusieurs modes d'exécution :
| Méthode | Description | Cas d'utilisation |
|---|---|---|
| invoke(input, config) | Exécution synchrone, attendre le résultat complet | Scripts, interfaces simples |
| ainvoke(input, config) | Exécution asynchrone, attendre le résultat complet | Services web |
| stream(input, config, stream_mode) | Exécution de streaming synchrone | Afficher les étapes intermédiaires en temps réel |
| astream(input, config, stream_mode) | Exécution de streaming asynchrone | WebSocket、SSE |
| get_state(config) | Obtenir l'état actuel | Afficher/restaurer l'état de la conversation |
| update_state(config, values) | Mettre à jour l'état | Modifier manuellement l'état de la conversation |