Nancy1906 commited on
Commit
d87b08e
·
verified ·
1 Parent(s): 07de393
Files changed (1) hide show
  1. my_tools.py +34 -20
my_tools.py CHANGED
@@ -234,35 +234,49 @@ scrape_tool = FunctionTool.from_defaults(fn=scrape_wikipedia_table, name="scrap
234
  fallback_tool= FunctionTool.from_defaults(fn=lambda q: "Procedo con conocimiento interno.", name="no_tool_solution", description="Fallback.")
235
  all_tools = [search_tool, scrape_tool, table_tool, code_tool, excel_tool, botanical_tool, reverse_tool, fallback_tool]
236
 
237
- # System prompt
238
- tool_descriptions = "\n".join([t.description for t in all_tools])
239
- #system_prompt = f"Eres Alfred...\nHerramientas:\n{tool_desc}"
240
- # Prompt de sistema REFINADO
 
 
241
  system_prompt = (
242
- "Eres Alfred, un agente ReAct eficiente y preciso. Tu objetivo es responder preguntas de forma correcta.\n"
243
- "Sigue estos pasos rigurosamente:\n"
244
- "1. ANALIZA la pregunta cuidadosamente. Identifica la información clave y el tipo de respuesta esperada.\n"
245
- "2. PLANIFICA tu enfoque: ¿Qué herramienta(s) son las más adecuadas? ¿Necesitas varios pasos?\n"
246
- "3. EJECUTA: Usa la herramienta elegida. Formula entradas claras y concisas para las herramientas.\n"
247
- " - **Prueba cada herramienta que consideres relevante ANTES de recurrir a `no_tool_solution`.**\n"
248
- " - Si una herramienta falla o no da el resultado esperado, considera si otra herramienta podría ayudar o si necesitas reformular la entrada a la herramienta.\n"
249
- "4. OBSERVA el resultado de la herramienta. ¿Es lo que esperabas? ¿Responde a la pregunta parcial o totalmente?\n"
250
- "5. VERIFICA: ¿La información obtenida es suficiente y correcta? ¿Necesitas más pasos o herramientas?\n"
251
- " - Si la pregunta involucra audio/video/imágenes o archivos en formatos que no puedes procesar con las herramientas disponibles (ej. formatos binarios sin un lector específico), informa claramente que NO PUEDES ACCEDER o procesar ese tipo de contenido.\n"
252
- " - Para archivos Excel, intenta usar `read_excel_data` si se proporciona una URL. Si solo se menciona un archivo sin URL, pregunta si pueden proporcionar el contenido en formato Markdown o CSV.\n"
253
- "6. RESPONDE: Una vez seguro de tener la respuesta final, clara y concisa, concluye tu pensamiento y proporciona la respuesta final al usuario.\n"
254
- "Prioriza el uso de herramientas específicas sobre la búsqueda web general si una herramienta especializada es aplicable.\n"
255
- "Herramientas disponibles (usa SOLO estas y con los nombres exactos):\n{tool_descriptions}"
 
 
 
 
 
 
 
 
 
 
 
256
  )
257
 
258
- # Agent init
259
  llm = GeminiLLM()
260
  alfred_agent = ReActAgent.from_tools(tools=all_tools, llm=llm, system_prompt=system_prompt, verbose=True, max_iterations=15, callback_manager=llm.callback_manager)
261
 
 
 
262
  def basic_agent_response(question: str) -> str:
263
  try:
264
  resp = alfred_agent.query(question)
265
  return resp.response or "No response."
266
  except Exception as e:
267
  return f"Error crítico: {e}"
268
-
 
234
  fallback_tool= FunctionTool.from_defaults(fn=lambda q: "Procedo con conocimiento interno.", name="no_tool_solution", description="Fallback.")
235
  all_tools = [search_tool, scrape_tool, table_tool, code_tool, excel_tool, botanical_tool, reverse_tool, fallback_tool]
236
 
237
+ # Construir descripciones de herramientas
238
+ # Cada FunctionTool tiene .name y .tool_config.description
239
+ tool_descriptions = "
240
+ ".join([f"{t.name}: {t.tool_config.description}" for t in all_tools])
241
+
242
+ # Prompt de sistema final
243
  system_prompt = (
244
+ "Eres Alfred, un agente ReAct eficiente y preciso. Tu objetivo es responder preguntas de forma correcta.
245
+ "
246
+ "Sigue estos pasos rigurosamente:
247
+ "
248
+ "1. ANALIZA la pregunta cuidadosamente. Identifica la información clave y el tipo de respuesta esperada.
249
+ "
250
+ "2. PLANIFICA tu enfoque: ¿Qué herramienta(s) son las más adecuadas? ¿Necesitas varios pasos?
251
+ "
252
+ "3. EJECUTA: Usa la herramienta elegida. Formula entradas claras y concisas para las herramientas.
253
+ "
254
+ " - **Prueba cada herramienta que consideres relevante ANTES de recurrir a `no_tool_solution`.**
255
+ "
256
+ " - Si una herramienta falla o no da el resultado esperado, considera si otra herramienta podría ayudar o si necesitas reformular la entrada a la herramienta.
257
+ "
258
+ "4. OBSERVA el resultado de la herramienta. ¿Es lo que esperabas? ¿Responde a la pregunta parcial o totalmente?
259
+ "
260
+ "5. VERIFICA: ¿La información obtenida es suficiente y correcta? ¿Necesitas más pasos o herramientas?
261
+ "
262
+ "6. RESPONDE: Una vez seguro de tener la respuesta final, clara y concisa, concluye tu pensamiento y proporciona la respuesta final al usuario.
263
+ "
264
+ "Prioriza el uso de herramientas específicas sobre la búsqueda web general si una herramienta especializada es aplicable.
265
+ "
266
+ "Herramientas disponibles (usa SOLO estos y con los nombres exactos):
267
+ "
268
+ f"{tool_descriptions}"
269
  )
270
 
271
+ # Inicializar agente
272
  llm = GeminiLLM()
273
  alfred_agent = ReActAgent.from_tools(tools=all_tools, llm=llm, system_prompt=system_prompt, verbose=True, max_iterations=15, callback_manager=llm.callback_manager)
274
 
275
+ ReActAgent.from_tools(tools=all_tools, llm=llm, system_prompt=system_prompt, verbose=True, max_iterations=15, callback_manager=llm.callback_manager)
276
+
277
  def basic_agent_response(question: str) -> str:
278
  try:
279
  resp = alfred_agent.query(question)
280
  return resp.response or "No response."
281
  except Exception as e:
282
  return f"Error crítico: {e}"