Update app.py
Browse files
app.py
CHANGED
|
@@ -203,7 +203,20 @@ class SearchRequest(BaseModel):
|
|
| 203 |
def build_prompt(user_input: str, web_context: Optional[str] = None) -> str:
|
| 204 |
"""Construye el prompt con contexto web opcional"""
|
| 205 |
if web_context:
|
| 206 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 207 |
return f"### Instrucción:\n{user_input}\n\n### Respuesta:\n"
|
| 208 |
|
| 209 |
def format_search_results(search_data: Dict) -> str:
|
|
@@ -212,15 +225,12 @@ def format_search_results(search_data: Dict) -> str:
|
|
| 212 |
|
| 213 |
if search_data.get("wikipedia") and search_data["wikipedia"].get("success"):
|
| 214 |
wiki = search_data["wikipedia"]
|
| 215 |
-
context_parts.append(f"Wikipedia - {wiki['title']}
|
| 216 |
|
| 217 |
if search_data.get("web_results"):
|
| 218 |
-
|
| 219 |
-
|
| 220 |
-
|
| 221 |
-
|
| 222 |
-
if web_snippets:
|
| 223 |
-
context_parts.append("Resultados web:\n" + "\n".join(web_snippets))
|
| 224 |
|
| 225 |
return "\n\n".join(context_parts) if context_parts else ""
|
| 226 |
|
|
@@ -286,11 +296,24 @@ async def generate(req: PromptRequest):
|
|
| 286 |
# Realizar búsqueda web si está activada
|
| 287 |
if req.use_web_search:
|
| 288 |
try:
|
| 289 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 290 |
web_context = format_search_results(search_results)
|
| 291 |
|
| 292 |
if web_context:
|
| 293 |
-
print(f"🔍 Búsqueda web completada
|
|
|
|
| 294 |
except Exception as e:
|
| 295 |
print(f"Error en búsqueda web: {e}")
|
| 296 |
|
|
|
|
| 203 |
def build_prompt(user_input: str, web_context: Optional[str] = None) -> str:
|
| 204 |
"""Construye el prompt con contexto web opcional"""
|
| 205 |
if web_context:
|
| 206 |
+
# Formato especial para búsqueda web con instrucciones claras
|
| 207 |
+
return f"""### Instrucción del sistema:
|
| 208 |
+
Eres un asistente que busca información en internet. Debes resumir la información encontrada de forma clara y útil.
|
| 209 |
+
|
| 210 |
+
### Información encontrada en la web:
|
| 211 |
+
{web_context}
|
| 212 |
+
|
| 213 |
+
### Pregunta del usuario:
|
| 214 |
+
{user_input}
|
| 215 |
+
|
| 216 |
+
### Respuesta:
|
| 217 |
+
Hola, encontré esto en la web:
|
| 218 |
+
|
| 219 |
+
"""
|
| 220 |
return f"### Instrucción:\n{user_input}\n\n### Respuesta:\n"
|
| 221 |
|
| 222 |
def format_search_results(search_data: Dict) -> str:
|
|
|
|
| 225 |
|
| 226 |
if search_data.get("wikipedia") and search_data["wikipedia"].get("success"):
|
| 227 |
wiki = search_data["wikipedia"]
|
| 228 |
+
context_parts.append(f"[Wikipedia - {wiki['title']}]\n{wiki['summary']}\nFuente: {wiki['url']}")
|
| 229 |
|
| 230 |
if search_data.get("web_results"):
|
| 231 |
+
for i, result in enumerate(search_data["web_results"][:4], 1):
|
| 232 |
+
snippet = result['snippet'][:300].strip()
|
| 233 |
+
context_parts.append(f"[Resultado {i}: {result['title']}]\n{snippet}\nFuente: {result['url']}")
|
|
|
|
|
|
|
|
|
|
| 234 |
|
| 235 |
return "\n\n".join(context_parts) if context_parts else ""
|
| 236 |
|
|
|
|
| 296 |
# Realizar búsqueda web si está activada
|
| 297 |
if req.use_web_search:
|
| 298 |
try:
|
| 299 |
+
# Extraer la consulta de búsqueda del mensaje del usuario
|
| 300 |
+
search_query = user_input
|
| 301 |
+
|
| 302 |
+
# Si el mensaje es una pregunta larga, extraer palabras clave
|
| 303 |
+
if len(user_input.split()) > 8:
|
| 304 |
+
# Usar las primeras palabras más relevantes
|
| 305 |
+
words = user_input.lower().split()
|
| 306 |
+
# Filtrar palabras comunes
|
| 307 |
+
stop_words = {'qué', 'cuál', 'cómo', 'dónde', 'cuándo', 'por', 'para', 'el', 'la', 'los', 'las', 'un', 'una', 'es', 'sobre', 'me', 'puedes', 'explicar', 'decir', 'información'}
|
| 308 |
+
keywords = [w for w in words if w not in stop_words][:5]
|
| 309 |
+
search_query = ' '.join(keywords)
|
| 310 |
+
|
| 311 |
+
search_results = await search_engine.search(search_query)
|
| 312 |
web_context = format_search_results(search_results)
|
| 313 |
|
| 314 |
if web_context:
|
| 315 |
+
print(f"🔍 Búsqueda web completada para: '{search_query}'")
|
| 316 |
+
print(f" Contexto agregado: {len(web_context)} caracteres")
|
| 317 |
except Exception as e:
|
| 318 |
print(f"Error en búsqueda web: {e}")
|
| 319 |
|