测试的扫描文件
This commit is contained in:
@@ -30,7 +30,7 @@ class AIReviewer(BaseScanner):
|
||||
|
||||
self.config = config
|
||||
self.enabled = config.get('enabled', True)
|
||||
self.provider = config.get('provider', 'ollama')
|
||||
self.provider = config.get('provider', 'api')
|
||||
self.model = config.get('model', 'llama3')
|
||||
self.api_url = config.get('api_url', 'http://localhost:11434')
|
||||
self.api_key = config.get('api_key', '')
|
||||
@@ -424,13 +424,7 @@ class AIReviewer(BaseScanner):
|
||||
def _call_ai(self, prompt: str) -> Optional[Dict[str, Any]]:
|
||||
"""调用 AI 服务"""
|
||||
try:
|
||||
if self.provider == 'ollama':
|
||||
return self._call_ollama(prompt)
|
||||
elif self.provider == 'api':
|
||||
return self._call_api(prompt)
|
||||
else:
|
||||
logger.warning(f'未知的 AI provider: {self.provider}')
|
||||
return None
|
||||
return self._call_api(prompt)
|
||||
except Exception as e:
|
||||
print("异常追踪信息:", e.__traceback__)
|
||||
logger.error(f'AI 调用失败: {str(e)}')
|
||||
@@ -517,32 +511,6 @@ class AIReviewer(BaseScanner):
|
||||
logger.debug("_extract_json_obj: 未能提取到有效的 JSON 对象")
|
||||
return None
|
||||
|
||||
def _call_ollama(self, prompt: str) -> Optional[Dict[str, Any]]:
|
||||
"""调用 Ollama 本地模型"""
|
||||
import requests
|
||||
|
||||
url = f"{self.api_url}/api/generate"
|
||||
payload = {
|
||||
"model": self.model,
|
||||
"prompt": prompt,
|
||||
"stream": False,
|
||||
"format": "json"
|
||||
}
|
||||
|
||||
logger.info(f"调用 Ollama: {url}, model={self.model}")
|
||||
response = requests.post(url, json=payload, timeout=120)
|
||||
|
||||
if response.status_code == 200:
|
||||
result = response.json()
|
||||
content = result.get('response', '')
|
||||
logger.info(f"Ollama 返回内容长度: {len(content) if content else 0}")
|
||||
logger.debug(f"Ollama 返回内容预览: {content[:200] if content else 'empty'}")
|
||||
parsed = self._extract_json_obj(content)
|
||||
return parsed
|
||||
|
||||
logger.warning(f'Ollama 返回错误: {response.status_code}')
|
||||
return None
|
||||
|
||||
def _call_api(self, prompt: str) -> Optional[Dict[str, Any]]:
|
||||
"""调用在线 API"""
|
||||
import requests
|
||||
@@ -560,7 +528,7 @@ class AIReviewer(BaseScanner):
|
||||
payload = {
|
||||
"model": self.model,
|
||||
"messages": [{"role": "user", "content": prompt}],
|
||||
"max_tokens": 1024*5,
|
||||
"max_tokens": 1024,
|
||||
"temperature": 0.7
|
||||
}
|
||||
elif 'deepseek' in self.api_url:
|
||||
@@ -568,25 +536,43 @@ class AIReviewer(BaseScanner):
|
||||
payload = {
|
||||
"model": self.model,
|
||||
"messages": [{"role": "user", "content": prompt}],
|
||||
"max_tokens": 1024*5,
|
||||
"max_tokens": 1024,
|
||||
"temperature": 0.7
|
||||
}
|
||||
elif 'dashscope' in self.api_url:
|
||||
# 阿里云 dashscope 专用端点
|
||||
url = f"{self.api_url}/chat/completions"
|
||||
payload = {
|
||||
"model": self.model,
|
||||
"messages": [{"role": "user", "content": prompt}],
|
||||
"max_tokens": 1024,
|
||||
"temperature": 0.7,
|
||||
"stream": False # 显式关闭流式
|
||||
}
|
||||
else:
|
||||
url = f"{self.api_url}/chat/completions"
|
||||
payload = {
|
||||
"model": self.model,
|
||||
"messages": [{"role": "user", "content": prompt}],
|
||||
"max_tokens": 1024*5,
|
||||
"max_tokens": 1024,
|
||||
"temperature": 0.7
|
||||
}
|
||||
|
||||
response = requests.post(url, json=payload, headers=headers, timeout=120)
|
||||
logger.info(f"调用 API: {url}, model={self.model}")
|
||||
|
||||
if response.status_code == 200:
|
||||
result = response.json()
|
||||
content = result['choices'][0]['message']['content']
|
||||
parsed = self._extract_json_obj(content)
|
||||
return parsed
|
||||
try:
|
||||
response = requests.post(url, json=payload, headers=headers, timeout=120)
|
||||
|
||||
logger.warning(f'API 返回错误: {response.status_code}')
|
||||
return None
|
||||
if response.status_code == 200:
|
||||
result = response.json()
|
||||
content = result['choices'][0]['message']['content']
|
||||
logger.info(f"API 返回内容长度: {len(content) if content else 0}")
|
||||
parsed = self._extract_json_obj(content)
|
||||
return parsed
|
||||
|
||||
logger.warning(f'API 返回错误: {response.status_code}, {response.text[:200]}')
|
||||
return None
|
||||
|
||||
except Exception as e:
|
||||
logger.warning(f'API 调用失败: {e}')
|
||||
return None
|
||||
|
||||
Reference in New Issue
Block a user