Spaces:
Sleeping
Sleeping
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) | |