189 lines
15 KiB
JSON
189 lines
15 KiB
JSON
|
|
{
|
|||
|
|
"file_path": "tweet/topic_generator.py",
|
|||
|
|
"file_size": 4849,
|
|||
|
|
"line_count": 148,
|
|||
|
|
"functions": [
|
|||
|
|
{
|
|||
|
|
"name": "__init__",
|
|||
|
|
"line_start": 26,
|
|||
|
|
"line_end": 40,
|
|||
|
|
"args": [
|
|||
|
|
{
|
|||
|
|
"name": "self"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"name": "ai_agent",
|
|||
|
|
"type_hint": "AIAgent"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"name": "config_manager",
|
|||
|
|
"type_hint": "ConfigManager"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"name": "output_manager",
|
|||
|
|
"type_hint": "OutputManager"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"return_type": null,
|
|||
|
|
"docstring": "初始化选题生成器\n\nArgs:\n ai_agent: AI代理\n config_manager: 配置管理器\n output_manager: 输出管理器",
|
|||
|
|
"is_async": false,
|
|||
|
|
"decorators": [],
|
|||
|
|
"code": " def __init__(self, ai_agent: AIAgent, config_manager: ConfigManager, output_manager: OutputManager):\n \"\"\"\n 初始化选题生成器\n\n Args:\n ai_agent: AI代理\n config_manager: 配置管理器\n output_manager: 输出管理器\n \"\"\"\n self.ai_agent = ai_agent\n self.config_manager = config_manager\n self.config = config_manager.get_config('topic_gen', GenerateTopicConfig)\n self.output_manager = output_manager\n self.prompt_builder = TopicPromptBuilder(config_manager)\n self.parser = TopicParser()",
|
|||
|
|
"code_hash": "8de8e887e9258010481e9e668326b0d6"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"classes": [
|
|||
|
|
{
|
|||
|
|
"name": "TopicGenerator",
|
|||
|
|
"line_start": 20,
|
|||
|
|
"line_end": 146,
|
|||
|
|
"bases": [],
|
|||
|
|
"methods": [
|
|||
|
|
{
|
|||
|
|
"name": "__init__",
|
|||
|
|
"line_start": 26,
|
|||
|
|
"line_end": 40,
|
|||
|
|
"args": [
|
|||
|
|
{
|
|||
|
|
"name": "self"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"name": "ai_agent",
|
|||
|
|
"type_hint": "AIAgent"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"name": "config_manager",
|
|||
|
|
"type_hint": "ConfigManager"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"name": "output_manager",
|
|||
|
|
"type_hint": "OutputManager"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"return_type": null,
|
|||
|
|
"docstring": "初始化选题生成器\n\nArgs:\n ai_agent: AI代理\n config_manager: 配置管理器\n output_manager: 输出管理器",
|
|||
|
|
"is_async": false,
|
|||
|
|
"decorators": [],
|
|||
|
|
"code": " def __init__(self, ai_agent: AIAgent, config_manager: ConfigManager, output_manager: OutputManager):\n \"\"\"\n 初始化选题生成器\n\n Args:\n ai_agent: AI代理\n config_manager: 配置管理器\n output_manager: 输出管理器\n \"\"\"\n self.ai_agent = ai_agent\n self.config_manager = config_manager\n self.config = config_manager.get_config('topic_gen', GenerateTopicConfig)\n self.output_manager = output_manager\n self.prompt_builder = TopicPromptBuilder(config_manager)\n self.parser = TopicParser()",
|
|||
|
|
"code_hash": "8de8e887e9258010481e9e668326b0d6"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"name": "generate_topics",
|
|||
|
|
"line_start": 42,
|
|||
|
|
"line_end": 92,
|
|||
|
|
"args": [
|
|||
|
|
{
|
|||
|
|
"name": "self"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"return_type": "Optional[List[Dict[str, Any]]]",
|
|||
|
|
"docstring": "执行完整的选题生成流程:构建提示 -> 调用AI -> 解析结果 -> 保存产物",
|
|||
|
|
"is_async": true,
|
|||
|
|
"decorators": [],
|
|||
|
|
"code": " async def generate_topics(self) -> Optional[List[Dict[str, Any]]]:\n \"\"\"\n 执行完整的选题生成流程:构建提示 -> 调用AI -> 解析结果 -> 保存产物\n \"\"\"\n logger.info(\"开始执行选题生成流程...\")\n\n # 1. 构建提示\n system_prompt = self.prompt_builder.get_system_prompt()\n user_prompt = self.prompt_builder.build_user_prompt(\n numTopics=self.config.topic.num,\n month=self.config.topic.date\n )\n self.output_manager.save_text(system_prompt, \"topic_system_prompt.txt\")\n self.output_manager.save_text(user_prompt, \"topic_user_prompt.txt\")\n \n # 获取模型参数\n model_params = {}\n if hasattr(self.config, 'model') and isinstance(self.config.model, dict):\n model_params = {\n 'temperature': self.config.model.get('temperature'),\n 'top_p': self.config.model.get('top_p'),\n 'presence_penalty': self.config.model.get('presence_penalty')\n }\n # 移除None值\n model_params = {k: v for k, v in model_params.items() if v is not None}\n \n # 2. 调用AI生成\n try:\n raw_result, _, _, _ = await self.ai_agent.generate_text(\n system_prompt=system_prompt,\n user_prompt=user_prompt,\n use_stream=True, # 选题生成通常不需要流式输出\n stage=\"选题生成\",\n **model_params\n )\n self.output_manager.save_text(raw_result, \"topics_raw_response.txt\")\n except Exception as e:\n logger.critical(f\"AI调用失败,无法生成选题: {e}\", exc_info=True)\n return None\n\n # 3. 解析结果\n topics = self.parser.parse(raw_result)\n if not topics:\n logger.error(\"未能从AI响应中解析出任何有效选题\")\n return None\n \n # 4. 保存结果\n self.output_manager.save_json(topics, \"topics.json\")\n logger.info(f\"成功生成并保存 {len(topics)} 个选题\")\n \n return topics",
|
|||
|
|
"code_hash": "8bfc34aad972e35422d8ee4b9ab9bd9b"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"name": "generate_topics_with_prompt",
|
|||
|
|
"line_start": 94,
|
|||
|
|
"line_end": 146,
|
|||
|
|
"args": [
|
|||
|
|
{
|
|||
|
|
"name": "self"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"name": "system_prompt",
|
|||
|
|
"type_hint": "str"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"name": "user_prompt",
|
|||
|
|
"type_hint": "str"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"return_type": "Optional[List[Dict[str, Any]]]",
|
|||
|
|
"docstring": "使用预构建的提示词生成选题\n\nArgs:\n system_prompt: 已构建好的系统提示词\n user_prompt: 已构建好的用户提示词\n \nReturns:\n 生成的选题列表,如果失败则返回None",
|
|||
|
|
"is_async": true,
|
|||
|
|
"decorators": [],
|
|||
|
|
"code": " async def generate_topics_with_prompt(self, system_prompt: str, user_prompt: str) -> Optional[List[Dict[str, Any]]]:\n \"\"\"\n 使用预构建的提示词生成选题\n \n Args:\n system_prompt: 已构建好的系统提示词\n user_prompt: 已构建好的用户提示词\n \n Returns:\n 生成的选题列表,如果失败则返回None\n \"\"\"\n logger.info(\"使用预构建提示词开始执行选题生成流程...\")\n \n # 保存提示以供调试\n self.output_manager.save_text(system_prompt, \"topic_system_prompt.txt\")\n self.output_manager.save_text(user_prompt, \"topic_user_prompt.txt\")\n \n # 获取模型参数\n model_params = {}\n if hasattr(self.config, 'model') and isinstance(self.config.model, dict):\n model_params = {\n 'temperature': self.config.model.get('temperature'),\n 'top_p': self.config.model.get('top_p'),\n 'presence_penalty': self.config.model.get('presence_penalty')\n }\n # 移除None值\n model_params = {k: v for k, v in model_params.items() if v is not None}\n \n # 调用AI生成\n try:\n raw_result, _, _, _ = await self.ai_agent.generate_text(\n system_prompt=system_prompt,\n user_prompt=user_prompt,\n use_stream=True,\n stage=\"选题生成\",\n **model_params\n )\n self.output_manager.save_text(raw_result, \"topics_raw_response.txt\")\n except Exception as e:\n logger.critical(f\"AI调用失败,无法生成选题: {e}\", exc_info=True)\n return None\n \n # 解析结果\n topics = self.parser.parse(raw_result)\n if not topics:\n logger.error(\"未能从AI响应中解析出任何有效选题\")\n return None\n \n # 保存结果\n self.output_manager.save_json(topics, \"topics.json\")\n logger.info(f\"成功生成并保存 {len(topics)} 个选题\")\n \n return topics",
|
|||
|
|
"code_hash": "6768f97a84285f1a10cfd586d1a925af"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"docstring": "选题生成器\n负责生成旅游相关的选题",
|
|||
|
|
"decorators": [],
|
|||
|
|
"code": "class TopicGenerator:\n \"\"\"\n 选题生成器\n 负责生成旅游相关的选题\n \"\"\"\n\n def __init__(self, ai_agent: AIAgent, config_manager: ConfigManager, output_manager: OutputManager):\n \"\"\"\n 初始化选题生成器\n\n Args:\n ai_agent: AI代理\n config_manager: 配置管理器\n output_manager: 输出管理器\n \"\"\"\n self.ai_agent = ai_agent\n self.config_manager = config_manager\n self.config = config_manager.get_config('topic_gen', GenerateTopicConfig)\n self.output_manager = output_manager\n self.prompt_builder = TopicPromptBuilder(config_manager)\n self.parser = TopicParser()\n\n async def generate_topics(self) -> Optional[List[Dict[str, Any]]]:\n \"\"\"\n 执行完整的选题生成流程:构建提示 -> 调用AI -> 解析结果 -> 保存产物\n \"\"\"\n logger.info(\"开始执行选题生成流程...\")\n\n # 1. 构建提示\n system_prompt = self.prompt_builder.get_system_prompt()\n user_prompt = self.prompt_builder.build_user_prompt(\n numTopics=self.config.topic.num,\n month=self.config.topic.date\n )\n self.output_manager.save_text(system_prompt, \"topic_system_prompt.txt\")\n self.output_manager.save_text(user_prompt, \"topic_user_prompt.txt\")\n \n # 获取模型参数\n model_params = {}\n if hasattr(self.config, 'model') and isinstance(self.config.model, dict):\n model_params = {\n 'temperature': self.config.model.get('temperature'),\n 'top_p': self.config.model.get('top_p'),\n 'presence_penalty': self.config.model.get('presence_penalty')\n }\n # 移除None值\n model_params = {k: v for k, v in model_params.items() if v is not None}\n \n # 2. 调用AI生成\n try:\n raw_result, _, _, _ = await self.ai_agent.generate_text(\n system_prompt=system_prompt,\n user_prompt=user_prompt,\n use_stream=True, # 选题生成通常不需要流式输出\n stage=\"选题生成\",\n **model_params\n )\n self.output_manager.save_text(raw_result, \"topics_raw_response.txt\")\n except Exception as e:\n logger.critical(f\"AI调用失败,无法生成选题: {e}\", exc_info=True)\n return None\n\n # 3. 解析结果\n topics = self.parser.parse(raw_result)\n if not topics:\n logger.error(\"未能从AI响应中解析出任何有效选题\")\n return None\n \n # 4. 保存结果\n self.output_manager.save_json(topics, \"topics.json\")\n logger.info(f\"成功生成并保存 {len(topics)} 个选题\")\n \n return topics\n \n async def generate_topics_with_prompt(self, system_prompt: str, user_prompt: str) -> Optional[List[Dict[str, Any]]]:\n \"\"\"\n 使用预构建的提示词生成选题\n \n Args:\n system_prompt: 已构建好的系统提示词\n user_prompt: 已构建好的用户提示词\n \n Returns:\n 生成的选题列表,如果失败则返回None\n \"\"\"\n logger.info(\"使用预构建提示词开始执行选题生成流程...\")\n \n # 保存提示以供调试\n self.output_manager.save_text(system_prompt, \"topic_system_prompt.txt\")\n self.output_manager.save_text(user_prompt, \"topic_user_prompt.txt\")\n \n # 获取模型参数\n model_params = {}\n if hasattr(self.config, 'model') and isinstance(self.config.model, dict):\n model_params = {\n 'temperature': self.config.model.get('temperature'),\n 'top_p': self.config.model.get('top_p'),\n 'presence_penalty': self.config.model.get('presence_penalty
|
|||
|
|
"code_hash": "d9772082007b323b17a00ad5360872d6"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"imports": [
|
|||
|
|
{
|
|||
|
|
"type": "import",
|
|||
|
|
"modules": [
|
|||
|
|
"logging"
|
|||
|
|
],
|
|||
|
|
"aliases": []
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"type": "from_import",
|
|||
|
|
"module": "typing",
|
|||
|
|
"names": [
|
|||
|
|
"Dict",
|
|||
|
|
"Any",
|
|||
|
|
"List",
|
|||
|
|
"Optional",
|
|||
|
|
"Tuple"
|
|||
|
|
],
|
|||
|
|
"aliases": [],
|
|||
|
|
"level": 0
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"type": "from_import",
|
|||
|
|
"module": "core.ai",
|
|||
|
|
"names": [
|
|||
|
|
"AIAgent"
|
|||
|
|
],
|
|||
|
|
"aliases": [],
|
|||
|
|
"level": 0
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"type": "from_import",
|
|||
|
|
"module": "core.config",
|
|||
|
|
"names": [
|
|||
|
|
"ConfigManager",
|
|||
|
|
"GenerateTopicConfig"
|
|||
|
|
],
|
|||
|
|
"aliases": [],
|
|||
|
|
"level": 0
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"type": "from_import",
|
|||
|
|
"module": "utils.prompts",
|
|||
|
|
"names": [
|
|||
|
|
"TopicPromptBuilder"
|
|||
|
|
],
|
|||
|
|
"aliases": [],
|
|||
|
|
"level": 0
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"type": "from_import",
|
|||
|
|
"module": "utils.file_io",
|
|||
|
|
"names": [
|
|||
|
|
"OutputManager",
|
|||
|
|
"process_llm_json_text"
|
|||
|
|
],
|
|||
|
|
"aliases": [],
|
|||
|
|
"level": 0
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"type": "from_import",
|
|||
|
|
"module": "topic_parser",
|
|||
|
|
"names": [
|
|||
|
|
"TopicParser"
|
|||
|
|
],
|
|||
|
|
"aliases": [],
|
|||
|
|
"level": 1
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"constants": [],
|
|||
|
|
"docstring": "选题生成模块",
|
|||
|
|
"content_hash": "a72f82d4171671649a5ed42732953412"
|
|||
|
|
}
|