structure.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. 内容结构化处理模块
  5. 简化版本:只提供核心的内容结构化功能
  6. """
  7. import os
  8. import sys
  9. import json
  10. from typing import Any, Dict, Union
  11. # 导入自定义模块
  12. sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
  13. from gemini import GeminiProcessor
  14. class StructureProcessor:
  15. def __init__(self, prompt_file: str = None):
  16. """
  17. 初始化结构化处理器
  18. Args:
  19. prompt_file: 提示词文件路径,默认为prompt/structure.md
  20. """
  21. self.processor = GeminiProcessor()
  22. # 修复提示词文件路径
  23. if prompt_file is None:
  24. # 从tools目录找到项目根目录下的prompt/structure.md
  25. current_dir = os.path.dirname(os.path.abspath(__file__)) # tools
  26. project_root = os.path.dirname(current_dir) # 项目根目录
  27. prompt_file = os.path.join(project_root, "prompt", "structure.md")
  28. self.prompt_file = prompt_file
  29. self.system_prompt = self._load_structure_prompt()
  30. def _load_structure_prompt(self) -> str:
  31. """加载结构化处理提示词"""
  32. try:
  33. with open(self.prompt_file, 'r', encoding='utf-8') as f:
  34. return f.read()
  35. except Exception as e:
  36. print(f"加载提示词文件失败: {e}")
  37. print(f"尝试加载的文件路径: {self.prompt_file}")
  38. return ""
  39. def process_content(self, content: Union[str, Dict, Any], custom_prompt: str = None) -> str:
  40. """
  41. 处理内容结构化
  42. Args:
  43. content: 需要结构化的内容,可以是字符串、字典或JSON对象
  44. custom_prompt: 自定义提示词,如果为None则使用默认的结构化提示词
  45. Returns:
  46. str: 结构化后的内容
  47. """
  48. try:
  49. # 如果content是字典,转换为JSON字符串
  50. if isinstance(content, dict):
  51. content_str = json.dumps(content, ensure_ascii=False, indent=2)
  52. else:
  53. content_str = str(content)
  54. # 使用自定义提示词或默认的结构化提示词
  55. prompt = custom_prompt or self.system_prompt
  56. # 构建完整的提示词
  57. full_prompt = f"{prompt}\n\n## 输入\n用户将提供一个包含 `title`、`body_text` 和 `images_comprehension` 的JSON对象。\n\n请处理以下内容:\n{content_str}"
  58. result = self.processor.process(content_str, full_prompt)
  59. return result
  60. except Exception as e:
  61. print(f"内容结构化处理失败: {e}")
  62. return ""
  63. def main():
  64. """测试函数"""
  65. processor = StructureProcessor()
  66. # 测试数据 - 模拟实际的JSON输入
  67. test_content = {
  68. "title": "如何制作美味的蛋糕",
  69. "body_text": "制作蛋糕需要准备一些基本的材料和工具,按照正确的步骤操作就能做出美味的蛋糕。",
  70. "images_comprehension": [
  71. "第一步:准备材料 - 面粉、鸡蛋、糖、牛奶",
  72. "第二步:混合材料 - 将面粉和糖混合,加入鸡蛋和牛奶",
  73. "第三步:烘烤 - 在180度烤箱中烘烤30分钟",
  74. "注意事项:确保材料新鲜,烤箱预热到位"
  75. ]
  76. }
  77. print("使用默认结构化提示词处理内容...")
  78. result = processor.process_content(test_content)
  79. print(f"处理结果:\n{result}")
  80. if __name__ == "__main__":
  81. main()