datacipen commited on
Commit
6eeaf7b
·
verified ·
1 Parent(s): 5301792

Update agent_collaboratif_avid.py

Browse files
Files changed (1) hide show
  1. agent_collaboratif_avid.py +62 -4
agent_collaboratif_avid.py CHANGED
@@ -43,9 +43,13 @@ import asyncio
43
 
44
  # Configuration API
45
  PINECONE_API_KEY = os.environ.get("PINECONE_API_KEY")
46
- OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY")
47
- OPENAI_BASE_URL = os.environ.get("OPENAI_BASE_URL")
48
- OPENAI_MODEL_NAME = os.environ.get("OPENAI_MODEL_NAME")
 
 
 
 
49
 
50
  HUGGINGFACE_MODEL = os.environ.get("HUGGINGFACE_MODEL", "sentence-transformers/all-mpnet-base-v2")
51
  PINECONE_INDEX_NAME = "all-jdlp"
@@ -126,6 +130,7 @@ class AgentState(TypedDict):
126
  iteration_count: int
127
  errors: List[str]
128
  additional_information: List[Dict[str, Any]] # Nouvelles infos similaires
 
129
 
130
  # =============================================================================
131
  # INITIALISATION DES RETRIEVERS PINECONE
@@ -653,7 +658,53 @@ def collect_similar_information_node(state: AgentState) -> AgentState:
653
  print(f"✅ {len(similar_info)} information(s) similaire(s) trouvée(s)\n")
654
 
655
  state["additional_information"] = similar_info
656
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
657
  return state
658
 
659
  # =============================================================================
@@ -997,6 +1048,13 @@ def display_results(result: Dict[str, Any]) -> None:
997
  # FONCTION MAIN
998
  # =============================================================================
999
 
 
 
 
 
 
 
 
1000
  async def main():
1001
  """Fonction principale de l'application."""
1002
 
 
43
 
44
  # Configuration API
45
  PINECONE_API_KEY = os.environ.get("PINECONE_API_KEY")
46
+ #OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY")
47
+ #OPENAI_BASE_URL = os.environ.get("OPENAI_BASE_URL")
48
+ #OPENAI_MODEL_NAME = os.environ.get("OPENAI_MODEL_NAME")
49
+
50
+ OPENAI_API_KEY="sk-b8b00f8614a2496aa013103aaa53e753"
51
+ OPENAI_MODEL_NAME="mistralai/Mistral-Small-3.1-24B-Instruct-2503"
52
+ OPENAI_BASE_URL="https://ragarenn.eskemm-numerique.fr/sso/ch@t/api"
53
 
54
  HUGGINGFACE_MODEL = os.environ.get("HUGGINGFACE_MODEL", "sentence-transformers/all-mpnet-base-v2")
55
  PINECONE_INDEX_NAME = "all-jdlp"
 
130
  iteration_count: int
131
  errors: List[str]
132
  additional_information: List[Dict[str, Any]] # Nouvelles infos similaires
133
+ similar_info_response: str # Réponse LLM basée sur les informations similaires
134
 
135
  # =============================================================================
136
  # INITIALISATION DES RETRIEVERS PINECONE
 
658
  print(f"✅ {len(similar_info)} information(s) similaire(s) trouvée(s)\n")
659
 
660
  state["additional_information"] = similar_info
661
+
662
+ # Génération de la réponse LLM à partir des informations similaires
663
+ if similar_info:
664
+ print(f"🧠 Génération d'une synthèse LLM pour les informations similaires...")
665
+ llm = ChatOpenAI(
666
+ model=OPENAI_MODEL_NAME,
667
+ base_url=OPENAI_BASE_URL,
668
+ api_key=OPENAI_API_KEY,
669
+ temperature=0.7 # Température plus élevée pour une réponse créative/synthétisée
670
+ )
671
+
672
+ similar_info_prompt = ChatPromptTemplate.from_messages([
673
+ ("system", """Tu es un assistant expert de l'Université Gustave Eiffel spécialisé en Ville Durable.
674
+
675
+ Les informations suivantes sont des documents similaires ou apparentés à la requête initiale, mais qui n'ont pas été utilisées pour générer la réponse principale. Ton rôle est de les synthétiser et de les présenter de manière concise et utile pour l'utilisateur, en expliquant en quoi elles pourraient être intéressantes ou complémentaires.
676
+
677
+ REÇUES:
678
+ {similar_information}
679
+
680
+ Réponds de manière professionnelle, sans inventer d'informations. Mets en avant la diversité des sources et la pertinence potentielle pour l'utilisateur."""),
681
+ ("human", """Requête originale: {user_query}
682
+
683
+ Voici les informations similaires que j'ai trouvées. Peux-tu en faire une synthèse qui met en lumière leur intérêt potentiel pour ma requête originale, même si elles n'ont pas été utilisées directement dans la réponse principale ?""")
684
+ ])
685
+
686
+ similar_info_chain = similar_info_prompt | llm
687
+
688
+ try:
689
+ similar_info_text = json.dumps(
690
+ similar_info,
691
+ ensure_ascii=False,
692
+ indent=2
693
+ )
694
+ llm_response = similar_info_chain.invoke({
695
+ "user_query": state["user_query"],
696
+ "similar_information": similar_info_text
697
+ })
698
+ state["similar_info_response"] = llm_response.content
699
+ print(f"✅ Synthèse LLM des informations similaires générée.\n")
700
+ except Exception as e:
701
+ error_msg = f"Erreur lors de la génération de la synthèse des informations similaires: {str(e)}"
702
+ print(f"❌ {error_msg}")
703
+ state["errors"].append(error_msg)
704
+ state["similar_info_response"] = f"Erreur: {error_msg}"
705
+ else:
706
+ state["similar_info_response"] = "Aucune information similaire pertinente n'a été trouvée."
707
+
708
  return state
709
 
710
  # =============================================================================
 
1048
  # FONCTION MAIN
1049
  # =============================================================================
1050
 
1051
+ if result.get('similar_info_response'):
1052
+ print(f"\n{'='*80}")
1053
+ print(f"🧠 SYNTHÈSE LLM DES INFORMATIONS SIMILAIRES")
1054
+ print(f"{'='*80}")
1055
+ print(result['similar_info_response'])
1056
+ print()
1057
+
1058
  async def main():
1059
  """Fonction principale de l'application."""
1060