1+ import abc
12import os
23import re
3- import yaml
4- import abc
54from typing import Dict , Any , List
65
7- from biz .utils .log import logger
6+ import yaml
7+
88from biz .llm .factory import Factory
99from biz .utils .i18n import get_translator
10+ from biz .utils .log import logger
1011from biz .utils .token_util import count_tokens , truncate_text_by_tokens
1112
1213_ = get_translator ()
@@ -24,7 +25,8 @@ def _load_prompts(self, prompt_key: str) -> Dict[str, Any]:
2425 lang = os .environ .get ('LANGUAGE' , 'zh_CN' )
2526 prompt_templates_file = os .path .join ("locales" , lang , "prompt_templates.yml" )
2627 try :
27- with open (prompt_templates_file , "r" ) as file :
28+ # 在打开 YAML 文件时显式指定编码为 UTF-8,避免使用系统默认的 GBK 编码。
29+ with open (prompt_templates_file , "r" , encoding = "utf-8" ) as file :
2830 prompts = yaml .safe_load (file ).get (prompt_key , {})
2931 system_prompt = prompts .get ("system_prompt" )
3032 user_prompt = prompts .get ("user_prompt" )
@@ -60,6 +62,13 @@ def __init__(self):
6062 super ().__init__ ("code_review_prompt" )
6163
6264 def review_and_strip_code (self , changes_text : str , commits_text : str = '' ) -> str :
65+ """
66+ Review判断changes_text超出取前REVIEW_MAX_TOKENS个token,超出则截断changes_text,
67+ 调用review_code方法,返回review_result,如果review_result是markdown格式,则去掉头尾的```
68+ :param changes_text:
69+ :param commits_text:
70+ :return:
71+ """
6372 # 如果超长,取前REVIEW_MAX_TOKENS个token
6473 review_max_tokens = int (os .getenv ('REVIEW_MAX_TOKENS' , 10000 ))
6574 # 如果changes为空,打印日志
@@ -72,7 +81,8 @@ def review_and_strip_code(self, changes_text: str, commits_text: str = '') -> st
7281 if tokens_count > review_max_tokens :
7382 changes_text = truncate_text_by_tokens (changes_text , review_max_tokens )
7483
75- review_result = CodeReviewer ().review_code (changes_text , commits_text ).strip ()
84+ review_result = self .review_code (changes_text , commits_text ).strip ()
85+
7686 if review_result .startswith ("```markdown" ) and review_result .endswith ("```" ):
7787 return review_result [11 :- 3 ].strip ()
7888 return review_result
@@ -84,8 +94,7 @@ def review_code(self, diffs_text: str, commits_text: str = "") -> str:
8494 {
8595 "role" : "user" ,
8696 "content" : self .prompts ["user_message" ]["content" ].format (
87- diffs_text = diffs_text ,
88- commits_text = commits_text
97+ diffs_text = diffs_text , commits_text = commits_text
8998 ),
9099 },
91100 ]
0 commit comments