DjangoPeng's picture
add GitHubSentinel v0.8.2
3851ff8
import json
import requests
from openai import OpenAI # 导入OpenAI库用于访问GPT模型
from logger import LOG # 导入日志模块
class LLM:
def __init__(self, config):
"""
初始化 LLM 类,根据配置选择使用的模型(OpenAI 或 Ollama)。
:param config: 配置对象,包含所有的模型配置参数。
"""
self.config = config
self.model = config.llm_model_type.lower() # 获取模型类型并转换为小写
if self.model == "openai":
self.client = OpenAI() # 创建OpenAI客户端实例
elif self.model == "ollama":
self.api_url = config.ollama_api_url # 设置Ollama API的URL
else:
LOG.error(f"不支持的模型类型: {self.model}")
raise ValueError(f"不支持的模型类型: {self.model}") # 如果模型类型不支持,抛出错误
def generate_report(self, system_prompt, user_content):
"""
生成报告,根据配置选择不同的模型来处理请求。
:param system_prompt: 系统提示信息,包含上下文和规则。
:param user_content: 用户提供的内容,通常是Markdown格式的文本。
:return: 生成的报告内容。
"""
messages = [
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_content},
]
# 根据选择的模型调用相应的生成报告方法
if self.model == "openai":
return self._generate_report_openai(messages)
elif self.model == "ollama":
return self._generate_report_ollama(messages)
else:
raise ValueError(f"不支持的模型类型: {self.model}")
def _generate_report_openai(self, messages):
"""
使用 OpenAI GPT 模型生成报告。
:param messages: 包含系统提示和用户内容的消息列表。
:return: 生成的报告内容。
"""
LOG.info(f"使用 OpenAI {self.config.openai_model_name} 模型生成报告。")
try:
response = self.client.chat.completions.create(
model=self.config.openai_model_name, # 使用配置中的OpenAI模型名称
messages=messages
)
LOG.debug("GPT 响应: {}", response)
return response.choices[0].message.content # 返回生成的报告内容
except Exception as e:
LOG.error(f"生成报告时发生错误:{e}")
raise
def _generate_report_ollama(self, messages):
"""
使用 Ollama LLaMA 模型生成报告。
:param messages: 包含系统提示和用户内容的消息列表。
:return: 生成的报告内容。
"""
LOG.info(f"使用 Ollama {self.config.ollama_model_name} 模型生成报告。")
try:
payload = {
"model": self.config.ollama_model_name, # 使用配置中的Ollama模型名称
"messages": messages,
"max_tokens": 4000,
"temperature": 0.7,
"stream": False
}
response = requests.post(self.api_url, json=payload) # 发送POST请求到Ollama API
response_data = response.json()
# 调试输出查看完整的响应结构
LOG.debug("Ollama 响应: {}", response_data)
# 直接从响应数据中获取 content
message_content = response_data.get("message", {}).get("content", None)
if message_content:
return message_content # 返回生成的报告内容
else:
LOG.error("无法从响应中提取报告内容。")
raise ValueError("Ollama API 返回的响应结构无效")
except Exception as e:
LOG.error(f"生成报告时发生错误:{e}")
raise
if __name__ == '__main__':
from config import Config # 导入配置管理类
config = Config()
llm = LLM(config)
markdown_content="""
# Progress for langchain-ai/langchain (2024-08-20 to 2024-08-21)
## Issues Closed in the Last 1 Days
- partners/chroma: release 0.1.3 #25599
- docs: few-shot conceptual guide #25596
- docs: update examples in api ref #25589
"""
# 示例:生成 GitHub 报告
system_prompt = "Your specific system prompt for GitHub report generation"
github_report = llm.generate_report(system_prompt, markdown_content)
LOG.debug(github_report)