from langchain_ollama import ChatOllama
llm = ChatOllama(
model="qwen3.5:9b",
temperature=0,
# base_url="http://localhost:11434", # par défaut, à changer si Ollama est ailleurs
)
reponse = llm.invoke("En une phrase : qu'est-ce qu'un agent IA ?")
print(reponse.content)
from pathlib import Path
from langchain_core.tools import tool
@tool
def calculer(expression: str) -> str:
"""Évalue une expression arithmétique simple.
Args:
expression: une expression contenant uniquement des chiffres,
des espaces et les opérateurs + - * / ( ).
Returns:
Le résultat numérique sous forme de chaîne, ou un message d'erreur.
"""
autorise = set("0123456789+-*/(). ")
if not all(c in autorise for c in expression):
return "Erreur : caractère non autorisé. Seuls 0-9 et + - * / ( ) sont permis."
try:
resultat = eval(expression, {"__builtins__": {}}, {})
return str(resultat)
except Exception as e:
return f"Erreur de calcul : {e}"
@tool
def lire_fichier(chemin: str) -> str:
"""Lit le contenu d'un fichier texte du répertoire courant.
Args:
chemin: chemin relatif ou absolu vers un fichier texte (.txt, .md, .py, etc.).
Returns:
Le contenu du fichier, ou un message d'erreur si introuvable.
"""
p = Path(chemin)
if not p.exists():
return f"Fichier introuvable : {chemin}"
if not p.is_file():
return f"Ce n'est pas un fichier : {chemin}"
try:
return p.read_text(encoding="utf-8")
except UnicodeDecodeError:
return "Fichier binaire ou encodage non UTF-8."
except Exception as e:
return f"Erreur de lecture : {e}"
from langchain_ollama import ChatOllama
from langgraph.prebuilt import create_react_agent
from tools import calculer, lire_fichier
llm = ChatOllama(model="qwen3.5:9b", temperature=0)
SYSTEM_PROMPT = (
"Tu es un assistant en français. Tu disposes d'outils pour calculer "
"et lire des fichiers. Utilise-les dès que c'est pertinent, sans jamais "
"inventer un résultat. Réponds toujours en français."
)
agent = create_react_agent(
model=llm,
tools=[calculer, lire_fichier],
prompt=SYSTEM_PROMPT,
)
if __name__ == "__main__":
question = (
"Combien fait 1234 * 5678 ? "
"Ensuite, lis le fichier notes.txt et résume-le en deux phrases."
)
reponse = agent.invoke({"messages": [("user", question)]})
# Le dernier message est la réponse finale du modèle
print(reponse["messages"][-1].content)
请在旁边创建一个 notes.txt 小文件进行测试:
测试文件
echo "Réunion projet Hermes : on garde Ollama comme runtime principal, on évalue vLLM pour la prod, RAG sur ChromaDB. Décision : POC en 2 semaines." > notes.txt
for evenement in agent.stream(
{"messages": [("user", question)]},
stream_mode="values",
):
dernier = evenement["messages"][-1]
dernier.pretty_print()
print("---")