Nouveau node inject_preparation_prompt
Ne change rien, mais simplifie le système
This commit is contained in:
@@ -2,7 +2,7 @@ from langgraph.graph import START, END
|
|||||||
from langgraph.graph.state import CompiledStateGraph
|
from langgraph.graph.state import CompiledStateGraph
|
||||||
from langgraph.checkpoint.memory import InMemorySaver
|
from langgraph.checkpoint.memory import InMemorySaver
|
||||||
|
|
||||||
from utils.nodes import call_to_LLM, should_continue, task_ended, BasicToolNode, tool_node, preparation_docs, weekly_report_tools
|
from utils.nodes import *
|
||||||
from utils.state import getState
|
from utils.state import getState
|
||||||
from utils.tools import getTools
|
from utils.tools import getTools
|
||||||
|
|
||||||
@@ -18,11 +18,13 @@ def getGraph()->CompiledStateGraph:
|
|||||||
# Définition des sommets du graphe
|
# Définition des sommets du graphe
|
||||||
workflow.add_node(call_to_LLM)
|
workflow.add_node(call_to_LLM)
|
||||||
workflow.add_node(preparation_docs)
|
workflow.add_node(preparation_docs)
|
||||||
|
workflow.add_node(inject_preparation_prompt)
|
||||||
workflow.add_node("tool_node", tool_node)# BasicToolNode(tools=getTools())) # N'est pas une fonction, mais une classe instanciée, je dois précisier le nom du node
|
workflow.add_node("tool_node", tool_node)# BasicToolNode(tools=getTools())) # N'est pas une fonction, mais une classe instanciée, je dois précisier le nom du node
|
||||||
workflow.add_node("weekly_report_tools", weekly_report_tools)
|
workflow.add_node("weekly_report_tools", weekly_report_tools)
|
||||||
|
|
||||||
# Arrêtes
|
# Arrêtes
|
||||||
workflow.set_entry_point("preparation_docs")
|
workflow.set_entry_point("inject_preparation_prompt")
|
||||||
|
workflow.add_edge("inject_preparation_prompt", "preparation_docs")
|
||||||
workflow.add_conditional_edges("preparation_docs", should_continue, {
|
workflow.add_conditional_edges("preparation_docs", should_continue, {
|
||||||
"tools":"weekly_report_tools",
|
"tools":"weekly_report_tools",
|
||||||
"no_tools":"call_to_LLM"
|
"no_tools":"call_to_LLM"
|
||||||
|
|||||||
@@ -4,9 +4,11 @@ from langgraph.prebuilt import ToolNode
|
|||||||
from langchain.chat_models import init_chat_model
|
from langchain.chat_models import init_chat_model
|
||||||
from langgraph.graph import START, END
|
from langgraph.graph import START, END
|
||||||
from langchain.messages import HumanMessage, AIMessage, SystemMessage
|
from langchain.messages import HumanMessage, AIMessage, SystemMessage
|
||||||
|
from langgraph.types import interrupt
|
||||||
|
|
||||||
from .tools import getTools, getWeeklyReportTools
|
from .tools import getTools, getWeeklyReportTools
|
||||||
from .state import CustomState
|
from .state import CustomState
|
||||||
|
from .InterruptPayload import InterruptPayload
|
||||||
|
|
||||||
# LLM principal
|
# LLM principal
|
||||||
llm = ChatMistralAI( # LLM sans outils
|
llm = ChatMistralAI( # LLM sans outils
|
||||||
@@ -16,21 +18,20 @@ llm = ChatMistralAI( # LLM sans outils
|
|||||||
)
|
)
|
||||||
|
|
||||||
# NODES
|
# NODES
|
||||||
|
def inject_preparation_prompt(state: CustomState):
|
||||||
|
""" Noeud qui vise juste à insérer le message indiquant au LLM comment travailler sur les résumés de comptes-rendus """
|
||||||
|
return {'messages': HumanMessage(
|
||||||
|
"Ton but est de lire les fichiers présents dans la base de données en utilisant l'outil 'search_in_files',\
|
||||||
|
afin de générer des rapports sur chaque semaine du stage qui y est décrit. Pour enregistrer chaque semaine du stage, utilise l'outil 'write_week_report'.\
|
||||||
|
Une fois terminé, fais une liste de tous les outils, logiciels, méthodes, entreprises, techniques, ect.. utilisés,\
|
||||||
|
et fais en une liste avec quelques descriptions que tu devras enregistrer avec l'outil 'write_library_tools_details_on_internship'."
|
||||||
|
)}
|
||||||
|
|
||||||
def preparation_docs(state: CustomState):
|
def preparation_docs(state: CustomState):
|
||||||
"""Noeud en charge de préparer les résumés pour chaque semaine des rapports, et la liste des outils et méthodes utilisées"""
|
"""Noeud en charge de préparer les résumés pour chaque semaine des rapports, et la liste des outils et méthodes utilisées"""
|
||||||
model = llm.bind_tools(getWeeklyReportTools()) # LLM en charge de générer des rapports hebdomadaires sur le stage
|
model = llm.bind_tools(getWeeklyReportTools()) # LLM en charge de générer des rapports hebdomadaires sur le stage
|
||||||
print(len(state['messages']))
|
|
||||||
messages = [m for m in state['messages']] # Tous les messages du stage
|
|
||||||
|
|
||||||
if 'documentsGenerationStarted' not in state.keys():
|
return {'messages': model.invoke(state['messages'])}
|
||||||
# Si ce noeud en est à son premier lancement, je lui donne la consigne de départ
|
|
||||||
messages.append(HumanMessage("Ton but est de lire les fichiers présents dans la base de données en utilisant l'outil 'search_in_files',\
|
|
||||||
afin de générer des rapports sur chaque semaine du stage qui y est décrit. Pour enregistrer chaque semaine du stage, utilise l'outil 'write_week_report'.\
|
|
||||||
Une fois terminé, fais une liste de tous les outils, logiciels, méthodes, entreprises, techniques, ect.. utilisés,\
|
|
||||||
et fais en une liste avec quelques descriptions que tu devras enregistrer avec l'outil 'write_library_tools_details_on_internship'."))
|
|
||||||
|
|
||||||
messages.append(model.invoke(messages)) # Invocation LLM
|
|
||||||
return {'messages': messages, 'documentsGenerationStarted':True} # Je passe une liste de messages, ce qui ne devrait pas ajouter un message mais redéfinir toute la liste
|
|
||||||
|
|
||||||
def call_to_LLM(state: MessagesState):
|
def call_to_LLM(state: MessagesState):
|
||||||
"""Noeud qui s'occupe de gérer les appels au LLM"""
|
"""Noeud qui s'occupe de gérer les appels au LLM"""
|
||||||
|
|||||||
@@ -10,8 +10,6 @@ class CustomState(MessagesState):
|
|||||||
ragQuery: str # Requête envoyée au RAG, pour le cross-encodeur
|
ragQuery: str # Requête envoyée au RAG, pour le cross-encodeur
|
||||||
ragDocuments: List[str] # Documents retrouvés par le RAG, pour le cross-encodeur
|
ragDocuments: List[str] # Documents retrouvés par le RAG, pour le cross-encodeur
|
||||||
|
|
||||||
documentsGenerationStarted:bool# Permet d'indiquer que la consigne de génération des documents a été envoyée
|
|
||||||
|
|
||||||
# TODO: Ajouter la source des documents sélectionnés pour la fin du rapport ?
|
# TODO: Ajouter la source des documents sélectionnés pour la fin du rapport ?
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
BIN
imgs/agent.png
BIN
imgs/agent.png
Binary file not shown.
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 26 KiB |
Reference in New Issue
Block a user