|
""" |
|
Тестовый скрипт для локальной проверки формата ответа агента |
|
""" |
|
|
|
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 |
|
|
|
|
|
try: |
|
json_obj = json.loads(agent_response) |
|
results["format_type"] = "JSON" |
|
|
|
|
|
if "final_answer" in json_obj: |
|
final_answer = json_obj["final_answer"] |
|
results["extracted_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: |
|
|
|
results["format_type"] = "Plain String" |
|
results["extracted_answer"] = agent_response |
|
|
|
|
|
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") |
|
|
|
|
|
if not results["issues"]: |
|
results["is_valid"] = True |
|
|
|
return results |
|
|
|
def main(): |
|
""" |
|
Демонстрирует проверку различных форматов ответа |
|
""" |
|
|
|
test_responses = [ |
|
|
|
'{"final_answer": "Paris"}', |
|
|
|
|
|
"Paris", |
|
|
|
|
|
'{"answer": "Paris", "confidence": 0.95}', |
|
|
|
|
|
"Answer: Paris", |
|
|
|
|
|
"", |
|
|
|
|
|
'{"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() |
|
|