TravelContentCreator/examples/test_prompt_manager.py

210 lines
8.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
测试PromptManager组件
该脚本演示如何独立使用prompt_manager模块构建不同场景的提示词。
"""
import os
import sys
import tempfile
import json
from pathlib import Path
# 将项目根目录添加到PATH
project_root = str(Path(__file__).parent.parent.absolute())
if project_root not in sys.path:
sys.path.append(project_root)
from utils.prompt_manager import PromptManager
def create_test_files():
"""创建测试用的提示词文件和资源文件"""
# 创建临时目录
temp_dir = tempfile.mkdtemp()
# 创建提示词目录结构
prompts_dir = os.path.join(temp_dir, "prompts")
os.makedirs(prompts_dir, exist_ok=True)
# 创建Style和Demand子目录
style_dir = os.path.join(prompts_dir, "Style")
demand_dir = os.path.join(prompts_dir, "Demand")
refer_dir = os.path.join(prompts_dir, "Refer")
os.makedirs(style_dir, exist_ok=True)
os.makedirs(demand_dir, exist_ok=True)
os.makedirs(refer_dir, exist_ok=True)
# 创建Topic提示词文件
topic_system_path = os.path.join(temp_dir, "topic_system.txt")
with open(topic_system_path, 'w', encoding='utf-8') as f:
f.write("您是旅游内容选题专家。请根据提供的信息,生成高质量的旅游选题。")
topic_user_path = os.path.join(temp_dir, "topic_user.txt")
with open(topic_user_path, 'w', encoding='utf-8') as f:
f.write("生成{num}个旅游内容选题,日期为{date}")
# 创建Content提示词文件
content_system_path = os.path.join(temp_dir, "content_system.txt")
with open(content_system_path, 'w', encoding='utf-8') as f:
f.write("您是旅游内容创作专家。请根据选题和参考资料,生成优质旅游内容。")
# 创建Style文件
style_file = os.path.join(style_dir, "摄影指南.txt")
with open(style_file, 'w', encoding='utf-8') as f:
f.write("这是一篇摄影风格的旅游文章,应该包含构图技巧、最佳拍摄时间和角度建议。")
# 创建Demand文件
demand_file = os.path.join(demand_dir, "亲子游.txt")
with open(demand_file, 'w', encoding='utf-8') as f:
f.write("这是一篇面向家庭旅游者的文章,应该包含适合儿童的活动和安全提示。")
# 创建Resource目录和文件
resource_dir = os.path.join(temp_dir, "resource")
os.makedirs(resource_dir, exist_ok=True)
# 创建一个景点描述文件
desc_file = os.path.join(resource_dir, "泰宁古城描述.txt")
with open(desc_file, 'w', encoding='utf-8') as f:
f.write("泰宁古城是一座有着八百年历史的古城,保存了大量明清时期的建筑。")
# 返回创建的文件路径
return {
"temp_dir": temp_dir,
"prompts_dir": prompts_dir,
"topic_system_path": topic_system_path,
"topic_user_path": topic_user_path,
"content_system_path": content_system_path,
"resource_dir": resource_dir,
"desc_file": desc_file,
"style_file": style_file,
"demand_file": demand_file
}
def create_topic_item():
"""创建测试用的选题项"""
return {
"index": 1,
"date": "2024-05-30",
"logic": "这是一个著名的景点,有丰富的历史文化底蕴,适合文化和历史爱好者。",
"object": "泰宁古城",
"product": "文化体验套票.txt",
"product_logic": "泰宁古城有多处明清古建筑,游客可以通过体验套票更全面了解当地历史文化。",
"style": "摄影指南.txt",
"style_logic": "古城拥有800多年历史古建筑保存完好适合摄影风格。",
"target_audience": "亲子游.txt",
"target_audience_logic": "古城内有适合家庭参观的展览和互动活动,老人孩子都能找到感兴趣的内容。"
}
def main():
"""主函数"""
print("=== 测试 PromptManager 组件 ===")
# 创建测试文件
test_files = create_test_files()
print(f"创建临时测试文件夹: {test_files['temp_dir']}")
try:
# 创建资源文件配置
resource_dir_config = [
{
"type": "Description",
"file_path": [test_files["desc_file"]]
}
]
# 初始化PromptManager
prompt_manager = PromptManager(
topic_system_prompt_path=test_files["topic_system_path"],
topic_user_prompt_path=test_files["topic_user_path"],
content_system_prompt_path=test_files["content_system_path"],
prompts_dir=test_files["prompts_dir"],
resource_dir_config=resource_dir_config,
topic_gen_num=3,
topic_gen_date="2024-05-30"
)
print("\n测试1: 获取选题提示词")
system_prompt, user_prompt = prompt_manager.get_topic_prompts()
print(f"系统提示词 ({len(system_prompt)} 字符):")
print(system_prompt)
print(f"\n用户提示词 ({len(user_prompt)} 字符):")
print(user_prompt)
# 验证变量替换
if "{num}" not in user_prompt and "3" in user_prompt:
print("测试通过: {num} 成功替换为 3")
else:
print("测试失败: {num} 未被正确替换")
if "{date}" not in user_prompt and "2024-05-30" in user_prompt:
print("测试通过: {date} 成功替换为 2024-05-30")
else:
print("测试失败: {date} 未被正确替换")
print("\n测试2: 获取内容生成提示词")
topic_item = create_topic_item()
system_prompt, user_prompt = prompt_manager.get_content_prompts(topic_item)
print(f"系统提示词 ({len(system_prompt)} 字符):")
print(system_prompt[:200] + "..." if len(system_prompt) > 200 else system_prompt)
print(f"\n用户提示词 ({len(user_prompt)} 字符):")
print(user_prompt[:200] + "..." if len(user_prompt) > 200 else user_prompt)
# 验证样式和目标受众内容是否包含在提示词中
with open(test_files["style_file"], 'r', encoding='utf-8') as f:
style_content = f.read()
with open(test_files["demand_file"], 'r', encoding='utf-8') as f:
demand_content = f.read()
if style_content in user_prompt:
print("测试通过: 样式文件内容成功包含在用户提示词中")
else:
print("测试失败: 样式文件内容未包含在用户提示词中")
if demand_content in user_prompt:
print("测试通过: 目标受众文件内容成功包含在用户提示词中")
else:
print("测试失败: 目标受众文件内容未包含在用户提示词中")
# 验证景点描述是否包含
with open(test_files["desc_file"], 'r', encoding='utf-8') as f:
desc_content = f.read()
if desc_content in user_prompt:
print("测试通过: 景点描述文件内容成功包含在用户提示词中")
else:
print("测试失败: 景点描述文件内容未包含在用户提示词中")
print("\n测试3: 异常处理")
# 测试不存在的风格文件
non_existent_topic = topic_item.copy()
non_existent_topic["style"] = "不存在的风格.txt"
system_prompt, user_prompt = prompt_manager.get_content_prompts(non_existent_topic)
print("获取提示词成功,即使风格文件不存在")
except Exception as e:
print(f"测试过程中出错: {e}")
import traceback
traceback.print_exc()
finally:
# 清理临时文件
import shutil
try:
shutil.rmtree(test_files["temp_dir"])
print(f"\n清理临时文件: {test_files['temp_dir']}")
except Exception as e:
print(f"清理临时文件失败: {e}")
print("\n=== 测试完成 ===")
if __name__ == "__main__":
main()