FinalTest / validate_format.py
yoshizen's picture
Upload 4 files
6b4a7ef verified
raw
history blame
4.45 kB
"""
Тестовый скрипт для локальной проверки формата ответа агента
"""
import json
def test_agent_output_format(agent_response):
"""
Проверяет формат ответа агента на соответствие требованиям Hugging Face GAIA
Args:
agent_response: Ответ агента для проверки
Returns:
dict: Результаты проверки
"""
results = {
"is_valid": False,
"format_type": None,
"extracted_answer": None,
"issues": []
}
# Проверка на пустой ответ
if not agent_response:
results["issues"].append("Ответ пустой")
return results
# Проверка на JSON формат
try:
json_obj = json.loads(agent_response)
results["format_type"] = "JSON"
# Проверка наличия ключа final_answer
if "final_answer" in json_obj:
final_answer = json_obj["final_answer"]
results["extracted_answer"] = final_answer
# Проверка на пустой final_answer
if not final_answer:
results["issues"].append("Ключ final_answer содержит пустое значение")
else:
results["is_valid"] = True
else:
results["issues"].append("JSON не содержит ключ 'final_answer'")
except json.JSONDecodeError:
# Если не JSON, проверяем как plain string
results["format_type"] = "Plain String"
results["extracted_answer"] = agent_response
# Проверка на префиксы, которые могут помешать exact match
prefixes = ["Answer:", "Response:", "A:", "The answer is:", "Final answer:"]
for prefix in prefixes:
if agent_response.startswith(prefix):
results["issues"].append(f"Ответ содержит префикс '{prefix}', который может помешать exact match")
# Если нет проблем с префиксами, считаем plain string валидным
if not results["issues"]:
results["is_valid"] = True
return results
def main():
"""
Демонстрирует проверку различных форматов ответа
"""
# Примеры ответов для тестирования
test_responses = [
# JSON с final_answer (правильный формат)
'{"final_answer": "Paris"}',
# Plain string (может работать, но не рекомендуется)
"Paris",
# JSON без final_answer (неправильный формат)
'{"answer": "Paris", "confidence": 0.95}',
# Plain string с префиксом (неправильный формат)
"Answer: Paris",
# Пустой ответ
"",
# JSON с пустым final_answer
'{"final_answer": ""}'
]
print("=== ПРОВЕРКА ФОРМАТОВ ОТВЕТА ДЛЯ HUGGING FACE GAIA ===\n")
for i, response in enumerate(test_responses):
print(f"Тест #{i+1}: {response}")
results = test_agent_output_format(response)
print(f" Формат: {results['format_type']}")
print(f" Извлеченный ответ: {results['extracted_answer']}")
print(f" Валидный: {'✓' if results['is_valid'] else '✗'}")
if results["issues"]:
print(" Проблемы:")
for issue in results["issues"]:
print(f" - {issue}")
else:
print(" Проблемы: нет")
print()
print("=== РЕКОМЕНДАЦИИ ===")
print("1. Используйте формат JSON с ключом 'final_answer'")
print("2. Убедитесь, что значение 'final_answer' не пустое")
print("3. Избегайте префиксов в ответе")
print("4. Проверьте, что ответ точно соответствует ожидаемому (exact match)")
if __name__ == "__main__":
main()