test_god_quantity.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import unittest
  2. from unittest.mock import MagicMock, patch
  3. import json
  4. from app.agent.god import God
  5. class TestGodAgentQuantity(unittest.TestCase):
  6. def setUp(self):
  7. self.god = God()
  8. def _mock_response(self, n):
  9. """Helper to create a mock response with n personas"""
  10. personas = []
  11. for i in range(n):
  12. personas.append({
  13. "name": f"Persona {i}",
  14. "title": "Test Title",
  15. "bio": "Test Bio",
  16. "theories": ["T1", "T2"],
  17. "stance": "Test Stance",
  18. "system_prompt": "Test Prompt"
  19. })
  20. return json.dumps(personas)
  21. def test_quantity_parsing_explicit_digit(self):
  22. prompt = "生成3位角色"
  23. expected_n = 3
  24. with patch("app.agent.god.run_simple_agent", return_value=self._mock_response(expected_n)) as run_agent:
  25. personas = self.god.generate_personas(prompt, n=1)
  26. # Verify prompt content contains default instruction
  27. user_content = run_agent.call_args.args[2]
  28. self.assertIn("默认生成 1 位角色", user_content)
  29. self.assertIn("如果指定了数量,请严格按照该数量生成", user_content)
  30. # Verify result (which comes from mock)
  31. self.assertEqual(len(personas), expected_n)
  32. def test_quantity_parsing_chinese_numeral(self):
  33. prompt = "创建五名角色"
  34. expected_n = 5
  35. with patch("app.agent.god.run_simple_agent", return_value=self._mock_response(expected_n)) as run_agent:
  36. personas = self.god.generate_personas(prompt, n=1)
  37. # Verify prompt content contains default instruction
  38. user_content = run_agent.call_args.args[2]
  39. self.assertIn("默认生成 1 位角色", user_content)
  40. # Verify result
  41. self.assertEqual(len(personas), expected_n)
  42. def test_quantity_parsing_no_explicit(self):
  43. prompt = "生成一些角色"
  44. default_n = 2
  45. with patch("app.agent.god.run_simple_agent", return_value=self._mock_response(default_n)) as run_agent:
  46. personas = self.god.generate_personas(prompt, n=default_n)
  47. # Verify prompt content contains default instruction
  48. user_content = run_agent.call_args.args[2]
  49. self.assertIn(f"默认生成 {default_n} 位角色", user_content)
  50. # Verify result
  51. self.assertEqual(len(personas), default_n)
  52. def test_quantity_parsing_complex_sentence(self):
  53. prompt = "生成有关认知心理学的3位角色"
  54. expected_n = 3
  55. with patch("app.agent.god.run_simple_agent", return_value=self._mock_response(expected_n)) as run_agent:
  56. personas = self.god.generate_personas(prompt, n=1)
  57. # Verify prompt content contains default instruction
  58. user_content = run_agent.call_args.args[2]
  59. self.assertIn("默认生成 1 位角色", user_content)
  60. # Verify result
  61. self.assertEqual(len(personas), expected_n)
  62. if __name__ == '__main__':
  63. unittest.main()