Architecture de la réduction contexte

Architecture uniquement, pas implémenté
This commit is contained in:
2026-02-09 00:11:52 +01:00
parent 8b32c0ac64
commit 8655359add
4 changed files with 39 additions and 22 deletions

View File

@@ -3,11 +3,12 @@ from langgraph.graph import MessagesState
from langgraph.prebuilt import ToolNode
from langchain.chat_models import init_chat_model
from langgraph.graph import START, END
from langchain.messages import HumanMessage, AIMessage, SystemMessage
from langchain.messages import HumanMessage, AIMessage, SystemMessage, ToolMessage
from langgraph.types import interrupt
import os
import sys
from pathlib import Path
import json
from .tools import getTools, getWeeklyReportTools
from .state import CustomState
@@ -66,6 +67,30 @@ def LLM_central(state: MessagesState):
# Appel du LLM
return {"messages": [model.invoke(state["messages"])]}
def context_shortener(state: CustomState):
""" Noeud visant à réduire la taille du contexte pour éviter une explosion de la taille de la mémoire court-terme/contexte """
raise NotImplementedError('TODO, faut que je le fasse')
# fonction de routage
def should_shorten(state: CustomState)->str:
"""
Fonction de routage, permet de savoir s'il est temps de résumer la contexte de la conversation
Args:
state (CustomState): Le State actuel
Returns:
str: Faut-il réduire le contexte ?
"""
TAILLE_CONTEXTE_MAX = 20000 #charactères
count = 0
for msg in state['messages']: count += len(msg.content) # Compter le nombre total de caractères dans le contexte
if count < TAILLE_CONTEXTE_MAX:
# OK
return 'sous la limite'
return 'réduire contexte'
# fonction de routage : Après reponse_question, si le LLM veut appeler un outil, on va au tool_node
def should_continue(state: MessagesState):
"""
@@ -82,21 +107,6 @@ def should_continue(state: MessagesState):
return "tools"
return "no_tools"
def task_ended(state: MessagesState):
"""
Vérifier si l'agent a terminé son cycle, ou s'il faut le relancer
"""
if isinstance(state, list):
ai_message = state[-1]
elif messages := state.get("messages", []):
ai_message = messages[-1]
else:
raise ValueError(f"No messages found in input state to tool_edge: {state}")
if "terminé" in ai_message.content.lower():
return END
return "continue"
weekly_report_tools = ToolNode(tools=getWeeklyReportTools())
tool_node = ToolNode(tools=getTools())
@@ -127,8 +137,7 @@ class BasicToolNode: # De mon ancien projet, https://github.com/LJ5O/Assistant/b
)
return {"messages": outputs}
# UTILS
# fonction de routage
def is_resumes_reports_already_initialised(state: CustomState)->str:
"""Permet de savoirr si les résumés de comptes-rendu ont déjà été générés.
S'ils le sont, inutile de recréer ce dossier.