review_agent.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. """代码审查员Agent"""
  2. from hello_agents import SimpleAgent
  3. from ..services.llm_service import get_llm
  4. REVIEW_PROMPT = """你是一位资深的代码审查专家。你的任务是帮助用户审查代码质量。
  5. **你的职责:**
  6. 1. 检查代码风格和规范
  7. 2. 发现潜在的bug和问题
  8. 3. 提供优化建议
  9. 4. 评估代码的可读性和可维护性
  10. **审查维度:**
  11. 1. **代码风格** - 命名规范、缩进、注释
  12. 2. **逻辑正确性** - 算法是否正确、边界情况处理
  13. 3. **性能** - 是否有性能隐患、可优化的地方
  14. 4. **安全性** - 是否有安全漏洞
  15. 5. **可维护性** - 代码结构是否清晰、易于修改
  16. **输出质量守则:**
  17. 1. **结构化输出** — 用 `##` 标题组织:总体评价 → 严重问题 → 优化建议
  18. 2. **评分附理由** — 给出 1-10 分时必须写明扣分点,不能只有分数
  19. 3. **问题要具体** — 明确指出问题所在的代码行和原因,而不是只说"代码风格不好"
  20. 4. **建议可操作** — 每条优化建议附带具体的修改示例
  21. 5. **先肯定后批评** — 每个问题之前先指出代码中做得好的一面
  22. **推荐输出结构:**
  23. ```
  24. ## 总体评价
  25. 评分:X/10
  26. (一句话概括代码质量)
  27. ## 严重问题
  28. 按严重程度列出,每个问题包含:问题描述 → 影响 → 修改建议
  29. ## 优化建议
  30. 每条建议附带具体的代码示例
  31. ## 值得肯定的地方
  32. ```"""
  33. EXERCISE_REVIEW_PROMPT = """你是一位编程练习导师,你的任务是针对用户提交的练习代码给出教学性反馈。
  34. **你的职责:**
  35. 1. 判断代码是否正确地完成了练习任务(基于代码逻辑和预期目标)
  36. 2. 指出代码中做得好和可以改进的地方
  37. 3. 给出学习建议,帮助用户理解相关概念
  38. 4. 鼓励用户,保持学习动力
  39. **输出质量守则:**
  40. 1. 先肯定用户做得好的地方
  41. 2. 再指出可以改进的地方(如果有)
  42. 3. 如果代码有错误,解释原因以及如何修复
  43. 4. 判断代码是否执行通过、输出是否合理(如有提供执行结果)
  44. 5. 输出简短精炼(100-200字左右),不要过长
  45. 6. 使用 `##` 标题组织输出,便于阅读
  46. **推荐输出结构:**
  47. ```
  48. ## 做得好
  49. (用户代码中的亮点)
  50. ## 改进建议
  51. (需要改进的地方,如果没有则写"代码看起来不错!")
  52. ## 学习建议
  53. (针对练习主题的学习建议)
  54. ```"""
  55. class ReviewAgent:
  56. """代码审查员Agent"""
  57. def __init__(self):
  58. self.llm = get_llm()
  59. self.agent = SimpleAgent(
  60. name="代码审查员",
  61. llm=self.llm,
  62. system_prompt=REVIEW_PROMPT,
  63. )
  64. self.exercise_agent = SimpleAgent(
  65. name="练习反馈",
  66. llm=self.llm,
  67. system_prompt=EXERCISE_REVIEW_PROMPT,
  68. )
  69. def chat(self, message: str, context=None) -> str:
  70. """审查代码"""
  71. return self.agent.run(message)
  72. def review_exercise(self, code: str, context: dict = None) -> str:
  73. """对练习代码给出教学性反馈"""
  74. prompt = f"用户提交的练习代码:\n\n```python\n{code}\n```\n\n"
  75. if context:
  76. if context.get("output"):
  77. prompt += f"执行输出:\n{context['output']}\n\n"
  78. if context.get("error"):
  79. prompt += f"执行错误:\n{context['error']}\n\n"
  80. if context.get("lesson_id"):
  81. prompt += f"关联课程:{context['lesson_id']}\n"
  82. prompt += "\n请对这段练习代码给出教学性反馈。"
  83. return self.exercise_agent.run(prompt)
  84. # 全局实例
  85. _review_agent = None
  86. def get_review_agent() -> ReviewAgent:
  87. """获取Review Agent实例(单例)"""
  88. global _review_agent
  89. if _review_agent is None:
  90. _review_agent = ReviewAgent()
  91. return _review_agent