From 44916eedd1f76b79aa092e110ee0aeac55c8e188 Mon Sep 17 00:00:00 2001 From: jinye_huang Date: Fri, 25 Apr 2025 15:44:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86content=5Fgenerator?= =?UTF-8?q?=E7=9A=84=E8=B0=83=E5=BA=A6=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 + SelectPrompt/2025各月节日宣传节点时间表.md | 7 -- core/__init__.py | 3 +- core/__pycache__/__init__.cpython-312.pyc | Bin 453 -> 396 bytes core/__pycache__/poster_gen.cpython-312.pyc | Bin 37762 -> 37757 bytes .../simple_collage.cpython-312.pyc | Bin 33898 -> 33377 bytes core/contentGen.py | 107 ------------------ core/simple_collage.py | 18 +-- genPrompts/Demand/夕阳红文旅需求.txt | 27 ----- genPrompts/Demand/学生党文旅需求.txt | 24 ---- genPrompts/Demand/职场人文旅需求.txt | 27 ----- genPrompts/Refer/标题参考格式.txt | 18 +-- genPrompts/Style/攻略风文案提示词.txt | 35 ++++-- genPrompts/Style/极力推荐风文案提示词.txt | 39 ++++--- genPrompts/Style/美食风文案提示词.txt | 34 ------ genPrompts/Style/轻奢风文案提示词.txt | 36 ------ genPrompts/systemPrompt.txt | 36 +++--- main.py | 7 +- poster_gen_config.json | 27 ++--- .../content_generator.cpython-312.pyc | Bin 23116 -> 23146 bytes .../tweet_generator.cpython-312.pyc | Bin 29553 -> 29617 bytes utils/content_generator.py | 5 +- utils/tweet_generator.py | 6 +- 23 files changed, 107 insertions(+), 353 deletions(-) delete mode 100644 core/contentGen.py delete mode 100644 genPrompts/Demand/夕阳红文旅需求.txt delete mode 100644 genPrompts/Demand/学生党文旅需求.txt delete mode 100644 genPrompts/Demand/职场人文旅需求.txt delete mode 100644 genPrompts/Style/美食风文案提示词.txt delete mode 100644 genPrompts/Style/轻奢风文案提示词.txt diff --git a/.gitignore b/.gitignore index cd5a4c1..50f03ba 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,7 @@ /result/ *.zip /hotel_img/ +/genPrompts/ +/resource/ +/SelectPrompt/ +/output/ diff --git a/SelectPrompt/2025各月节日宣传节点时间表.md b/SelectPrompt/2025各月节日宣传节点时间表.md index 91e88eb..1bbe3e4 100644 --- a/SelectPrompt/2025各月节日宣传节点时间表.md +++ b/SelectPrompt/2025各月节日宣传节点时间表.md @@ -19,24 +19,17 @@ ### (三)二十四节气 1. **立春**:2月3日 -2. **雨水**:2月18日 3. **惊蛰**:3月5日 4. **春分**:3月20日 5. **清明**:4月4日 -6. **谷雨**:4月20日 7. **立夏**:5月5日 8. **小满**:5月21日 -9. **芒种**:6月5日 10. **夏至**:6月21日 11. **大暑**:7月23日 12. **立秋**:8月7日 16. **秋分**:9月23日 -17. **霜降**:10月23日 18. **立冬**:11月7日 -19. **小雪**:11月22日 -20. **大雪**:12月7日 21. **冬至**:12月21日 -22. **大寒**:1月20日 --- diff --git a/core/__init__.py b/core/__init__.py index 2f3c374..bf1659b 100644 --- a/core/__init__.py +++ b/core/__init__.py @@ -1,7 +1,6 @@ from .ai_agent import AI_Agent from .topic_parser import TopicParser -from .contentGen import ContentGenerator from .poster_gen import PosterGenerator from .simple_collage import process_directory -__all__ = ['AI_Agent', 'TopicParser', 'ContentGenerator', 'PosterGenerator', 'process_directory'] \ No newline at end of file +__all__ = ['AI_Agent', 'TopicParser', 'PosterGenerator', 'process_directory'] \ No newline at end of file diff --git a/core/__pycache__/__init__.cpython-312.pyc b/core/__pycache__/__init__.cpython-312.pyc index 20067b51956c7346d2c5cbafc0af7a35ae87fa97..3ce90a88ade7825f3061dba8856285e1e259a461 100644 GIT binary patch delta 153 zcmX@g+{4UwnwOW00SH2ExieldOyrYbw3(=G%9GBJ!n%ktildTElYL@|^2F6@5-df` zKy^hdAc7S{umK4_P0oq$R1^#Hi%U|A;?q;}z*4vPiZgQya#G`y^K)_%(^HGsCc7|( pY48IzFamM07?AkD%*e=imqG3>gX&!d^}7tZkGOmr*^79AQUJnmBz6D* delta 207 zcmeBSKFZ8@nwOW00SH{)b7iPAPUMqd^q8n_Dv`pF!kWX8%NfPV$dJyE!nTMpimQ@c zlVf6rvVeedeqKpxUWt2ZUTRTdN&dukEm_tgW}qQOEFgjvM6iJfb|B%W$vyF;icvCL z4_N*dS3!PpNorAidTJh6?Jd6I%-n*U)cEB5oSek;)FSrDe2ih*fhDT1JoN5NLDiM`i@c!)Jj!JlrM-mTWh#HG<$a=?8IMi(yWau%1^tM-jeGR57dNRg93wX$cSAfo;RbbedYyi9t!vQS7*G4~XI~VO*pl1@ zr%+8IoMtP@Zqb*yqU-4tYdv!nHu{E4+cq;5k8O^!nX~x~f$h&)mZDvAp}FB#o$sR> z8|(ip!Xlm@=z;>fKalajTl{;mGxUzX%9JEE)!L-u^zwx$X!78gc z5B>fhbj>Xyh?tGTM|_>#3ZK}QY|Yd0zbsH$CyGRgSRjJHQHY&HJFDM)Ngp)(pb84k aOsM>@?-TnW!Ia57Kmw~%VK{^`X8r-jces!M delta 516 zcmXBQO-LJ25C`y`O^qKRL=UMTUD|}SSuv&uF$hu=Z8ff`={X=&U13F&lr<=t6|_)t zkhbc05VT+~^&lSPc@U(%2(`pS4{DU?-FT3IO0gD8-{>5E4D){s!@K<^zF!ip+g59d zz-vw_(Tr7VNU=GWMH&dgn9Fdf4LGFK6gKwDf}qpFx zFOA3CS6>RS)Nh9tvaHo`@R{FuqPERHP?h_vu-&NS(*XW%e+sYhQJ@Ms&>uhuvXel) zXzq^2V$m>@f`ec;#iH-B=5U{?4)mU;Q&cAnY~f9^7+XVSY&et=VGlbxeUM@wI>RRT zftPQeOF#KZ`ZTdg%n)0|FAg?$)xsGY>0)NM#%j&`Y>%RS;($|W({0or5gPHGxWNgn z-jb#EoH)iU%?)Xm*FF}&5spQiaEXhNa>(I&qzQJ|--yQqS(J4b>|$Pf$a?h6BG^WE z+zmw-jCSgvU4IN`ug2@hm&BT)f|ER(o0dGEp$h5v{&u|w<<4&cZ{ o72##qlWX)9E1xew#>FW=Uv@TC2R`PUP6GJwe8vecuoT1p0Tb=6N&o-= diff --git a/core/__pycache__/simple_collage.cpython-312.pyc b/core/__pycache__/simple_collage.cpython-312.pyc index bf92e7feee2fcf443a7c354eed5254f0f08c90ca..2d1dcbae363236d07c167d60c942940f063f4050 100644 GIT binary patch delta 4159 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 diff --git a/core/contentGen.py b/core/contentGen.py deleted file mode 100644 index ba99eea..0000000 --- a/core/contentGen.py +++ /dev/null @@ -1,107 +0,0 @@ -import os -import logging -from utils.content_generator import ContentGenerator as NewContentGenerator - -# 为了向后兼容,我们保留ContentGenerator类,但内部使用新的实现 -class ContentGenerator: - def __init__(self, - model_name="qwenQWQ", - api_base_url="http://localhost:8000/v1", - api_key="EMPTY", - output_dir="/root/autodl-tmp/poster_generate_result"): - """ - 初始化海报生成器,内部使用新的实现 - - 参数: - output_dir: 输出结果保存目录 - model_name: 使用的模型名称 - api_base_url: API基础URL - api_key: API密钥 - """ - # 创建新的实现实例 - self._impl = NewContentGenerator( - output_dir=output_dir, - temperature=0.7, - top_p=0.8, - presence_penalty=1.2 - ) - - # 存储API参数 - self.model_name = model_name - self.api_base_url = api_base_url - self.api_key = api_key - - # 设置日志 - logging.basicConfig(level=logging.INFO, - format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') - self.logger = logging.getLogger(__name__) - - # 为向后兼容保留的字段 - self.df = None - self.all_images_info = [] - self.structured_prompt = "" - self.current_img_info = None - self.add_description = "" - - # 将方法委托给新实现 - def load_infomation(self, info_directory_path): - """加载额外描述文件""" - self._impl.load_infomation(info_directory_path) - self.add_description = self._impl.add_description - - def split_content(self, content): - """分割JSON内容""" - return self._impl.split_content(content) - - def generate_posters(self, poster_num, tweet_content, system_prompt=None, max_retries=3): - """生成海报内容""" - return self._impl.generate_posters( - poster_num, - tweet_content, - system_prompt, - api_url=self.api_base_url, - model_name=self.model_name, - api_key=self.api_key, - timeout=60, - max_retries=max_retries - ) - - def _generate_fallback_content(self, poster_num): - """生成备用内容""" - return self._impl._generate_fallback_content(poster_num) - - def save_result(self, full_response): - """保存生成结果到文件""" - return self._impl.save_result(full_response) - - def _validate_and_fix_data(self, data): - """验证并修复数据格式""" - return self._impl._validate_and_fix_data(data) - - def run(self, info_directory, poster_num, tweet_content, system_prompt=None): - """运行海报内容生成流程""" - return self._impl.run( - info_directory, - poster_num, - tweet_content, - system_prompt, - api_url=self.api_base_url, - model_name=self.model_name, - api_key=self.api_key - ) - - def set_temperature(self, temperature): - """设置温度参数""" - self._impl.set_temperature(temperature) - - def set_top_p(self, top_p): - """设置top_p参数""" - self._impl.set_top_p(top_p) - - def set_presence_penalty(self, presence_penalty): - """设置存在惩罚参数""" - self._impl.set_presence_penalty(presence_penalty) - - def set_model_para(self, temperature, top_p, presence_penalty): - """一次性设置所有模型参数""" - self._impl.set_model_para(temperature, top_p, presence_penalty) diff --git a/core/simple_collage.py b/core/simple_collage.py index d1598b6..cda3409 100644 --- a/core/simple_collage.py +++ b/core/simple_collage.py @@ -8,16 +8,13 @@ from PIL import Image, ImageDraw, ImageEnhance, ImageFilter, ImageOps import logging # Import logging module class ImageCollageCreator: - def __init__(self): + def __init__(self, ): """初始化拼图创建器""" - self.output_dir = "/root/autodl-tmp/poster_baseboard_0403/output_collage" - # 创建输出目录 - os.makedirs(self.output_dir, exist_ok=True) - + # 定义可用拼接样式 self.collage_styles = [ "grid_2x2", # 标准2x2网格 - "asymmetric", # 非对称布局 + # "asymmetric", # 非对称布局 "filmstrip", # 胶片条布局 # "circles", # 圆形布局 "overlap", # 重叠风格 @@ -695,18 +692,13 @@ class ImageCollageCreator: return output_path return None - def set_output_dir(self, output_dir): - """设置输出目录""" - self.output_dir = output_dir - os.makedirs(self.output_dir, exist_ok=True) - return self.output_dir def set_collage_style(self, collage_style): """设置拼贴画样式""" self.collage_style = collage_style return self.collage_style -def process_directory(directory_path, target_size=(900, 1200), output_count=1): +def process_directory(directory_path, style=None, target_size=(900, 1200), output_count=1): """ 处理指定目录中的图片,创建指定数量的拼贴图。 @@ -736,7 +728,7 @@ def process_directory(directory_path, target_size=(900, 1200), output_count=1): # 传入 None 作为 style 参数,让函数内部随机选择 collage = collage_creator.create_collage_with_style( directory_path, - style=None, # 让方法内部随机选择样式 + style=style, # 让方法内部随机选择样式 target_size=target_size ) diff --git a/genPrompts/Demand/夕阳红文旅需求.txt b/genPrompts/Demand/夕阳红文旅需求.txt deleted file mode 100644 index 4d431a4..0000000 --- a/genPrompts/Demand/夕阳红文旅需求.txt +++ /dev/null @@ -1,27 +0,0 @@ -夕阳红用户画像: -1. 基本属性 -- 年龄:55-75岁(退休银发族为主). -- 性别:男女较均衡,女性更活跃分享. - -2. 平台行为 -- 互动习惯:偏好实用攻略(如「银发旅游避坑指南」),收藏健康养生类内容,偏好图文详解攻略,收藏养生/无障碍设施/团体票信息. -- 发布内容:分享慢节奏旅行体验、怀旧景点打卡(如红色旅游地),常带#退休生活#老有所乐 标签,爱晒集体出游合照. - -3. 消费特征 -- 决策偏好:注重性价比与舒适度,易被「夕阳红专属优惠」「慢旅行套餐」打动,关注交通便利性,对"适老化改造景区"信任度高. -- 消费倾向:追求慢节奏深度游,对早鸟票/老年证优惠敏感. -- 消费品类:养生温泉、文化怀旧主题游(古镇、非遗体验),短途跟团游,文化古镇/红色旅游/康养温泉/摄影基地. - -4. 兴趣偏好 -- 偏好:自然风光、文化历史景点、群体活动(广场舞旅行团) - -5.中国旅游出游做攻略高峰点: -1. 春节假期:1-2月 -2. 暑假:6-8月 -3. 国庆黄金周:9-10月初 -4. 五一假期:4-5月初 -5. 元旦:12月中下旬 -6.清明:4月初 -7.端午:5-6月 -8.中秋:8月底-9月 -9.寒假:12-2月 diff --git a/genPrompts/Demand/学生党文旅需求.txt b/genPrompts/Demand/学生党文旅需求.txt deleted file mode 100644 index aa285cf..0000000 --- a/genPrompts/Demand/学生党文旅需求.txt +++ /dev/null @@ -1,24 +0,0 @@ -学生党用户画像: -1. 基本属性 -- 年龄:18-24岁(高职至研究生阶段). -- 性别:女生占比65%,男生偏好户外运动类和徒步骑行类. - -2. 平台行为 -- 互动习惯:爱收藏打卡攻略,深夜活跃度高,对景区相关优惠信息相对感兴趣. -- 常带学生党旅游、周末去哪、周边游、特种兵旅行、这种TAG标签. - -3. 消费特征 -- 决策偏好:易被网红爆款、Citywalk路线、当日往返短途游、交通便捷直达等吸引 -- 消费倾向:性价比追求者,关注免费拍照点和网红景点. -- 消费品类:平价民宿、网红小吃、小众景点(废弃工厂、艺术区),网红夜市/剧本杀场馆/毕业季写真取景地. - -4.中国旅游出游做攻略高峰点: -1. 春节假期:1-2月 -2. 暑假:6-8月 -3. 国庆黄金周:9-10月初 -4. 五一假期:4-5月初 -5. 元旦:12月中下旬 -6.清明:4月初 -7.端午:5-6月 -8.中秋:8月底-9月 -9.寒假:12-2月 diff --git a/genPrompts/Demand/职场人文旅需求.txt b/genPrompts/Demand/职场人文旅需求.txt deleted file mode 100644 index d8dac7a..0000000 --- a/genPrompts/Demand/职场人文旅需求.txt +++ /dev/null @@ -1,27 +0,0 @@ -职场人用户画像: -1. 基本属性 -- 年龄:25-40岁(白领&自由职业者). -- 性别:女性占58%,男性偏好商务型度假. - -2. 平台行为 -- 互动习惯:搜索「周末放松」「减压旅行」,工作日晚间集中浏览,收藏"周末逃离城市"系列内容. -- 发布内容:分享商务差旅、高端酒店体验、工作与旅行平衡心得,侧重轻奢体验分享,常带#职场治愈时刻#gapday等标签. - -3. 消费特征 -- 决策偏好:注重效率与品质,倾向「闪游套餐」「商务休闲结合」产品,愿为时间成本买单,偏好"全包式度假村"服务. -- 消费倾向:关注差异化体验(洞穴酒店/私汤别墅/主厨餐桌). -- 消费品类:高端酒店、短途轻奢游、私人订制行程,精品民宿/疗愈SPA/商务会议中心. - -4. 兴趣偏好 -- 偏好:疗愈型旅行(温泉SPA)、文化深度游(博物馆、艺术展) - -5.中国旅游出游做攻略高峰点: -1. 春节假期:1-2月 -2. 暑假:6-8月 -3. 国庆黄金周:9-10月初 -4. 五一假期:4-5月初 -5. 元旦:12月中下旬 -6.清明:4月初 -7.端午:5-6月 -8.中秋:8月底-9月 -9.寒假:12-2月 diff --git a/genPrompts/Refer/标题参考格式.txt b/genPrompts/Refer/标题参考格式.txt index 5892841..530e772 100644 --- a/genPrompts/Refer/标题参考格式.txt +++ b/genPrompts/Refer/标题参考格式.txt @@ -1,25 +1,21 @@ 被问爆的99元海景房,刷到就闭眼入‼ 599住进森林温泉别墅🏡淡季爽到飞起! 深圳周边!希尔顿一晚➕️温泉才不到500 -599住进豪华温泉酒店🏡淡季爽到飞起! 谁懂!99住进270°全海景房,值哭😭 帐篷房+温泉+泳池!599解锁遛娃天堂 广东本地人爱去的温泉酒店被我挖到了! 谁懂啊!!在惠州发现了温泉酒店卷王! -在惠州!和男朋友住了6次的温泉私汤酒店 -谁懂啊!!在惠州发现了温泉酒店卷王! 和男朋友去了5次惠州...温泉锁死这家♨️ 99元住海景房🤯淡季海岛捡漏秘籍‼ -来聊聊我心中广东内最好的温泉酒店 没有人敢说惠州希尔顿酒店的事吗? -谁懂啊!!在惠州发现了温泉酒店卷王! -惠州南昆山♨️藏在广东的日式温泉 +五一反向旅行!齐云小镇住+玩含门票…💰399俩 +乌镇免门票!住景区+早茶客+游船…才555💰俩 99元住海景王座房‼错过等下辈子 周末遛娃|安利冬日淡季两天一夜湖州亲子游, 人生建议:带娃去敦煌,一定要6-8月去❗️, 高铁亲子游🚄带娃在北海的三天两夜,附攻略, -1~3岁亲子游城市推荐❗️❗️遛娃不费妈系列, -海南亲子游|3、4 月份的万宁真的是太chill了, +安吉!城堡酒店+helloKitty乐园2日票!💰688 +佛山遛娃!盈香心动乐园!💰399=住+2天畅玩! 暑假遛娃来青甘亲子游,听听这5条良心建议, 湖州🦒亲子圣地|5天4晚行程分享, 🐼成都也太适合亲子游了吧!3天2晚攻略来喽, @@ -153,14 +149,8 @@ N次扬州三天两夜亲子游🧸看这里就够全了🎈, 仅99💰|带你体验不一样的云南异域狂欢!, 五百里音乐节🎸|双人票👫酒店套餐来咯, 六一去哪儿?欢乐世界全攻略来了‼️建议收藏, -欢乐世界🎡小丑欢乐周的正确打开方式🥳, -收假?烟花可没收假哦😻继续天天有!🎇, -Vocal 这是在云南可以看到的NPC吗!!😈🤩, -交通福利|直通车免费啦 🚌, 六一带娃玩七彩云南🦄这份身高攻略请收好!, 10月27日超级NPC互动拍照时间地点来咯💓, 任何人不知道温泉节特惠♨我都会伤心的OK⁉️, -才知道18岁女同事居然有个4岁的儿子……, -萌虎下山丨古滇🐯🧧新年礼萌动上线🎊, 昆明万圣|整蛊狂欢全攻略🎃建议收藏背诵, 古滇温泉山庄粉丝福利👒限时138♨速来泡汤!, diff --git a/genPrompts/Style/攻略风文案提示词.txt b/genPrompts/Style/攻略风文案提示词.txt index 4913e8a..5deb2f0 100644 --- a/genPrompts/Style/攻略风文案提示词.txt +++ b/genPrompts/Style/攻略风文案提示词.txt @@ -2,23 +2,36 @@ 一、标题创作 步骤:先速览景区资料内容,找到与用户需求适配的景点亮点,然后通读用户给的爆款标题素材,挑选一个在用户画像+节点节日+标题吸睛三个方面最契合的进行改写,创作出全新的爆款标题。在此期间以下几点需要你遵循: 1.必加emoji -2.标题爆破式句,有网感 -3.标题字数不超过10个字 +2.标题情绪化、反差感、恐吓用户、制造焦虑、突显优势,句式多样 +3.标题字数不能超过10字 +4.标题要带尽量带有对应节点节日、景点名称、人群、价格套餐优势、景点产品优势等 +5.标题请根据用户给的爆款标题参考格式素材,按以上要求进行微调 二、正文创作法 1. 通过分析产品和当前节点需求,如情人节要约会、儿童节要带孩子玩、临近周末会考虑周边游、传统节日偏好民俗活动等以此类推,直击用户痛点。 -2. 正文不要出现过多比喻句,表达风格更朴实一点,不要过度联想 -3. 情绪饱满,推荐时要始终面向人群需求结合 -4. 内容需要条理清晰,分段论述,总分总结构结构,开头吸引+中间详细攻略+游玩攻略/推荐/细节补充+景区地点便捷性+总结推荐 +2. 正文不要出现过多比喻句,表达风格更朴实一点,不要联想 +3. 情绪饱满,推荐时要面向人群需求结合,以<我><你>这种有人味的人称代词视角输出,不要出现<宝子们><姐妹们>这些很假的称呼 +4. 内容需要条理清晰,分段论述,总分总结构结构,开头吸引(煽情的说痛点、需求)+中间详细攻略(依据所给材料的价格/服务)+游玩攻略/推荐/资料中其他内容补充++总结+引流话术 5. 如果用户给出范文案例,请参考范文案例的写作风格和内容 6. 针对用户的痛点和需求对正文内容和产品内容的推荐进行优化,可参考我给出的用户文旅需求的材料 +7. 最后的引流话术固定为:先关zhu+留下<随机数字>看到会回复 +三、TAG标签创作 +每一篇笔记需要携带12个TAG标签,以下举例的加号(+)这个符号不要体现,仅代表内容连接的意思 +1.前三个TAG标签的内容围绕<#产品所在地区+旅游><#产品所在省份+旅游><#产品所在地区+周边游> +2.接着三个TAG标签的内容围绕<#景区/酒店名称><#景区/酒店名称+攻略><#景区/酒店名称+避雷> +3.再来三个TAG标签的内容围绕<#对应节日+出游><#对应节日+反向旅行><#对应人群+好去处> +4.最后三个TAG标签的内容围绕<#周末去哪儿玩><#小众旅游地><##产品所在地区+周末好去处> +注意:以上TAG直接按要求直出内容,不需要在直出的时候进行分类 -其他必须遵循: -1.需要合理使用emoji增强内容趣味性 -2.正文内容中不要出现markdown的标识符, 在你想用markdown格式的地方, 用emoji代替 -3.如果给出的产品信息里没有景区优惠信息,就不能编造虚假优惠信息展示 -4.具体输出格式参照以下格式: +输出注意点: + 1.按要求输出标签+正文+TAG标签 + 2.正文直白清楚围绕产品,不要出现比喻和联想 + 3.千万不要虚构景区信息没有的设施设备和活动信息,如果材料中没有指明,不要提及价格信息;如果没有明确的产品价格或者优惠活动信息,不要提及价格和优惠 + 4.输出内容中,要符合社会道德规范和法律规范 + 5.TAG标签按要求顺序直出进行罗列 + + 具体输出格式参照以下格式: (标题内容) @@ -26,5 +39,5 @@ (正文内容) -(最后一段是TAG内容,如#周末去哪) +(TAG内容,如#周末去哪) \ No newline at end of file diff --git a/genPrompts/Style/极力推荐风文案提示词.txt b/genPrompts/Style/极力推荐风文案提示词.txt index d9acf54..3ea3b3c 100644 --- a/genPrompts/Style/极力推荐风文案提示词.txt +++ b/genPrompts/Style/极力推荐风文案提示词.txt @@ -2,23 +2,36 @@ 一、标题创作 步骤:先速览景区资料内容,找到与用户需求适配的景点亮点,然后通读用户给的爆款标题素材,挑选一个在用户画像+节点节日+标题吸睛三个方面最契合的进行改写,创作出全新的爆款标题。在此期间以下几点需要你遵循: 1.必加emoji -2.标题爆破式句,有网感 -3.标题字数不超过10个字 +2.标题情绪化、反差感、恐吓用户、制造焦虑、突显优势,句式多样 +3.标题字数不能超过10字 +4.标题要带尽量带有对应节点节日、景点名称、人群、价格套餐优势、景点产品优势等 +5.标题请根据用户给的爆款标题参考格式素材,按以上要求进行微调 二、正文创作法 1. 通过分析产品和当前节点需求,如情人节要约会、儿童节要带孩子玩、临近周末会考虑周边游、传统节日偏好民俗活动等以此类推,直击用户痛点。 -2. 正文不要出现过多比喻句,表达风格更朴实一点,不要过度联想 -3. 情绪饱满,推荐时要始终面向人群需求结合 -4. 内容需要条理清晰,分段论述,总分总结构结构,开头吸引+中间详细攻略+细节补充+总结推荐 -5. 如果用户给出范文案例,请参考范文案例的写作风格和内容 -6. 针对用户的痛点和需求对正文内容和产品内容的推荐进行优化,可参考我给出的用户文旅需求的材料 +2. 正文不要出现过多比喻句,表达风格更朴实一点,不要联想 +3. 情绪饱满,推荐时要始终面向人群需求结合,以<我><你>这种有人味的人称代词视角输出,不要出现<宝子们><姐妹们>这些很假的称呼 +4. 内容需要条理清晰,分段论述,总分总结构结构,开头吸引(煽情的说痛点、需求)+中间详细攻略(依据所给材料的价格/服务)+细节补充+总结+引流话术 +5. 针对用户的痛点和需求对正文内容和产品内容的推荐进行优化,可参考我给出的用户文旅需求的材料 +6. 最后的引流话术固定为:先关zhu+留下<随机数字>看到会回复 -其他必须遵循: -1.需要合理使用emoji增强内容趣味性 -2.正文内容中不要出现markdown的标识符, 在你想用markdown格式的地方, 用emoji代替 -3.如果给出的产品信息里没有景区优惠信息,就不能编造虚假优惠信息展示 -4.具体输出格式参照以下格式: +三、TAG标签创作 +每一篇笔记需要携带12个TAG标签,以下举例的加号(+)这个符号不要体现,仅代表内容连接的意思 +1.前三个TAG标签的内容围绕<#产品所在地区+旅游><#产品所在省份+旅游><#产品所在地区+周边游> +2.接着三个TAG标签的内容围绕<#景区/酒店名称><#景区/酒店名称+攻略><#景区/酒店名称+避雷> +3.再来三个TAG标签的内容围绕<#对应节日+出游><#对应节日+反向旅行><#对应人群+好去处> +4.最后三个TAG标签的内容围绕<#周末去哪儿玩><#小众旅游地><##产品所在地区+周末好去处> +注意:以上TAG直接按要求直出内容,不需要在直出的时候进行分类 + +输出注意点: + 1.按要求输出标签+正文+TAG标签 + 2.正文直白清楚围绕产品,不要出现比喻和联想 + 3.千万不要虚构景区信息没有的设施设备和活动信息,如果材料中没有指明,不要提及价格信息;如果没有明确的产品价格或者优惠活动信息,不要提及价格和优惠 + 4.输出内容中,要符合社会道德规范和法律规范 + 5.TAG标签按要求顺序直出进行罗列 + + 具体输出格式参照以下格式: (标题内容) @@ -26,5 +39,5 @@ (正文内容) -(最后一段是TAG内容,如#周末去哪) +(TAG内容,如#周末去哪) \ No newline at end of file diff --git a/genPrompts/Style/美食风文案提示词.txt b/genPrompts/Style/美食风文案提示词.txt deleted file mode 100644 index db0d394..0000000 --- a/genPrompts/Style/美食风文案提示词.txt +++ /dev/null @@ -1,34 +0,0 @@ -你是景区小红书爆款文案策划,你将根据要求创作爆款文案,根据以下规则一步步执行: -一、标题创作 -步骤:先速览景区资料内容,找到与用户需求适配的景点亮点,然后通读用户给的爆款标题素材,挑选一个在用户画像+节点节日+标题吸睛三个方面最契合的进行改写,创作出全新的爆款标题。在此期间以下几点需要你遵循: -1.必加emoji -2.标题爆破式句式,幽默感,有网感,爱夸张,情绪化,话讲一半的感觉很重要 -3.标题字数不能超过10字,标题根据提供的爆款标题材料,挑选反差感大的将景区特色和节点信息融合进去进行改写和结合创作 -4.每次生成的标题必须要不一样,在给出的标题素材中任意挑选并改写,并在给出的热词素材中融入一个热词 - -二、正文创作法 -用美食推荐、特产推荐的即视感去为用户创作内容,要写出这些感觉: -1. 通过分析产品和当前节点需求,结合合适的节日推荐特产产品,直击用户痛点。 -2. 正文有丰富的场景美食细节,通过给的景区材料进行细节补充,结合用户需求,拉满需求和体验氛围感 -3. 先说推荐特产的背景,然后选定好要推荐的产品逐一推荐,对于美食的描述要诱人 -4. 如果用户给出范文案例,请参考范文案例的写作风格和内容 -58. 针对用户的痛点和需求对正文内容和产品内容的推荐进行优化,可参考我给出的用户文旅需求的材料 - - -其他必须遵循: -1.需要合理使用emoji增强内容趣味性 -2.如果我提供给你了热点信息,请务必挑选合适的热点以合适匹配景区的方式结合到标题和正文 -3.每段积极换行,条理清晰,每段按点一点一点叙述 -4.正文内容中不要出现markdown的标识符, 在你想用markdown格式的地方, 用emoji代替 -5.你不需要为正文中的任何内容加粗或高亮显示,即不需要出现**内容** -6.如果给出的产品信息里没有景区优惠信息,就不能编造虚假优惠信息展示 -7.具体输出格式参照以下格式: - -(标题内容) - - - -(正文内容) - -(最后一段是TAG内容,如#周末去哪) - \ No newline at end of file diff --git a/genPrompts/Style/轻奢风文案提示词.txt b/genPrompts/Style/轻奢风文案提示词.txt deleted file mode 100644 index 311e5bd..0000000 --- a/genPrompts/Style/轻奢风文案提示词.txt +++ /dev/null @@ -1,36 +0,0 @@ -你是景区4A广告文案策划,你将根据要求创作高级轻奢文艺感文案,标题和正文表达有4A广告公司的顶级极简文风感受,同时也适当结合当下热点热词,和用户保持一定距离感,根据以下规则一步步执行: -一、标题创作 -步骤:先速览景区资料内容,找到与用户需求适配的景点亮点,然后通读用户给的爆款标题素材,挑选一个在用户画像+节点节日+标题吸睛三个方面最契合的进行改写,创作出全新的爆款标题。在此期间以下几点需要你遵循: -1.必加emoji -2.标题字数不能超过10字,标题根据提供的爆款标题材料,挑选反差感大的将景区特色和节点信息融合进去进行改写和结合创作 -3.标题是极其富有诗意的 - -二、正文创作法 -用轻奢体验的即视感去为用户创作内容,要写出这些感觉: -1. 通过分析产品和当前节点需求,点明用户痛点。 -2. 语境质感高 -4. 内容需要条理清晰,分段论述,简洁奢华的风格结构,正文每段小于20字,每段不少于2行 -5. 如果用户给出范文案例,请参考范文案例的写作风格和内容 -6. 针对用户的痛点和需求对正文内容和产品内容的推荐进行优化,可参考我给出的用户文旅需求的材料 - -三、TAG标签格式 -1.TAG标签写在正文最后 -2.TAG标签前几个最后包含城市、景区、周边游、类型+其他,一共不要超过8个 - -其他必须遵循: -1.需要合理使用emoji增强内容趣味性 -2.如果我提供给你了热点信息,请务必挑选合适的热点以合适匹配景区的方式结合到标题和正文 -3.每段积极换行,条理清晰,每段按点一点一点叙述 -4.正文内容中不要出现markdown的标识符, 在你想用markdown格式的地方, 用emoji代替 -5.你不需要为正文中的任何内容加粗或高亮显示,即不需要出现**内容** -6.如果给出的产品信息里没有景区优惠信息,就不能编造虚假优惠信息展示 -7.具体输出格式参照以下格式: - -(标题内容) - - - -(正文内容) - -(最后一段是TAG内容,如#周末去哪) - diff --git a/genPrompts/systemPrompt.txt b/genPrompts/systemPrompt.txt index 57eb093..bcaa5a4 100644 --- a/genPrompts/systemPrompt.txt +++ b/genPrompts/systemPrompt.txt @@ -2,24 +2,34 @@ 一、标题创作 步骤:先速览景区资料内容,找到与用户需求适配的景点亮点,然后通读用户给的爆款标题素材,挑选一个在用户画像+节点节日+标题吸睛三个方面最契合的进行改写,创作出全新的爆款标题。在此期间以下几点需要你遵循: 1.必加emoji -2.标题有网感,有梗,情绪化;句式多样 -3.标题字数不能超过10字,标题根据提供的爆款标题材料,挑选反差感大的将景区特色和节点信息融合进去进行改写和结合创作 -4.每次生成的标题必须要不一样 -5.标题可参考用户给的爆款标题参考格式素材,也可参考我给的爆款标题素材 +2.标题情绪化、反差感、恐吓用户、制造焦虑、突显优势,句式多样 +3.标题字数不能超过10字 +4.标题要带尽量带有对应节点节日、景点名称、人群、价格套餐优势、景点产品优势等 +5.标题请根据用户给的爆款标题参考格式素材,按以上要求进行微调 二、正文创作 1. 通过分析产品和当前节点需求,如情人节要约会、儿童节要带孩子玩、临近周末会考虑周边游、传统节日偏好民俗活动等以此类推,直击用户痛点。 -2. 正文围绕风格提示词进行创作,条理清晰 -3. 分段论述,卖点+攻略+细节+总结 -4. 如果用户给出范文案例,请参考范文案例的写作风格和内容 -5. 针对用户的痛点和需求对正文内容和产品内容的推荐进行优化,可参考我给出的用户文旅需求的材料 +2. 正文围绕所选定的风格提示词进行创作,条理清晰, +3. 以<我><你>这种有人味的人称代词视角输出,不要出现<宝子们><姐妹们>这些很假的称呼 +4. 分段论述,卖点痛点+攻略+补充(价格/服务)+总结+引流话术 +5. 如果用户给出范文案例,请参考范文案例的写作风格和内容 +6. 针对用户的痛点和需求对正文内容和产品内容的推荐进行优化,可参考我给出的用户文旅需求的材料 +7. 最后的引流话术固定为:先关zhu+留下<随机数字>看到会回复 + +三、TAG标签创作 +每一篇笔记需要携带12个TAG标签,以下举例的加号(+)这个符号不要体现,仅代表内容连接的意思 +1.前三个TAG标签的内容围绕<#产品所在地区+旅游><#产品所在省份+旅游><#产品所在地区+周边游> +2.接着三个TAG标签的内容围绕<#景区/酒店名称><#景区/酒店名称+攻略><#景区/酒店名称+避雷> +3.再来三个TAG标签的内容围绕<#对应节日+出游><#对应节日+反向旅行><#对应人群+好去处> +4.最后三个TAG标签的内容围绕<#周末去哪儿玩><#小众旅游地><##产品所在地区+周末好去处> +注意:以上TAG直接按要求直出内容,不需要在直出的时候进行分类 输出注意点: 1.按要求输出标签+正文+TAG标签 - 2.正文直白清楚围绕产品,比喻和过度联想不要出现 + 2.正文直白清楚围绕产品,不要出现比喻和联想 3.千万不要虚构景区信息没有的设施设备和活动信息,如果材料中没有指明,不要提及价格信息;如果没有明确的产品价格或者优惠活动信息,不要提及价格和优惠 - 4.输出内容中,场景要符合自然规律,不要出现不合理的场景;也要符合社会道德规范和法律规范 - 5.TAG标签要按照从景区所在地到景区名称到景点名称到具体特色活动到面向人群的顺序进行罗列 + 4.输出内容中,要符合社会道德规范和法律规范 + 5.TAG标签按要求顺序直出进行罗列 具体输出格式参照以下格式: @@ -27,7 +37,7 @@ -(正文内容,不含带#的TAG内容) +(正文内容) -(TAG内容,如#周末去哪) +(TAG标签内容,如#周末去哪) diff --git a/main.py b/main.py index fb8f2af..4f1b72a 100644 --- a/main.py +++ b/main.py @@ -9,7 +9,7 @@ import logging from core.ai_agent import AI_Agent # from core.topic_parser import TopicParser # No longer needed directly in main? -import core.contentGen as contentGen +import utils.content_generator as contentGen import core.poster_gen as poster_gen import core.simple_collage as simple_collage from utils.resource_loader import ResourceLoader @@ -164,7 +164,7 @@ def generate_content_and_posters_step(config, run_id, topics_list, output_handle poster_subdir = config.get("output_poster_subdir", "poster") poster_filename = config.get("output_poster_filename", "poster.jpg") poster_content_system_prompt = config.get("poster_content_system_prompt", None) - + collage_style = config.get("collage_style", None) # 检查关键路径是否存在 if not poster_assets_dir or not img_base_dir: logging.error(f"Missing critical paths for poster generation (poster_assets_base_dir or image_base_dir) in config. Skipping posters for topic {topic_index}.") @@ -192,7 +192,8 @@ def generate_content_and_posters_step(config, run_id, topics_list, output_handle output_collage_subdir=collage_subdir, output_poster_subdir=poster_subdir, output_poster_filename=poster_filename, - system_prompt=poster_content_system_prompt + system_prompt=poster_content_system_prompt, + collage_style=collage_style ) if posters_attempted: logging.info(f"Poster generation process completed for Topic {topic_index}.") diff --git a/poster_gen_config.json b/poster_gen_config.json index 64f0c01..9454025 100644 --- a/poster_gen_config.json +++ b/poster_gen_config.json @@ -1,7 +1,7 @@ { - "date": "5月15日, 5月16日, 5月17日, 6月1日", - "num": 4, - "variants": 2, + "date": "4月30日, 4月28日, 5月1日", + "num": 10, + "variants": 1, "topic_temperature": 0.2, "topic_top_p": 0.3, "topic_presence_penalty": 1.5, @@ -19,21 +19,15 @@ { "type": "Style", "file_path": [ - "./genPrompts/Style/攻略风文案提示词.txt", - "./genPrompts/Style/轻奢风文案提示词.txt", - "./genPrompts/Style/极力推荐风文案提示词.txt", - "./genPrompts/Style/美食风文案提示词.txt" + "./genPrompts/Style/攻略风文案提示词.txt" ] }, { "type": "Demand", "file_path": [ - "./genPrompts/Demand/学生党文旅需求.txt", - "./genPrompts/Demand/情侣向文旅需求.txt", - "./genPrompts/Demand/职场人文旅需求.txt", "./genPrompts/Demand/亲子向文旅需求.txt", "./genPrompts/Demand/周边游文旅需求.txt", - "./genPrompts/Demand/夕阳红文旅需求.txt" + "./genPrompts/Demand/情侣向文旅需求.txt" ] }, { @@ -47,17 +41,13 @@ { "type": "Object", "file_path": [ - "./resource/Object/中山温泉宾馆.txt", - "./resource/Object/乌镇民宿.txt", - "./resource/Object/从化客天下·禧悦庄.txt" + "./resource/Object/中山温泉宾馆.txt" ] }, { "type": "Description", "file_path": [ - "./resource/Object/中山温泉宾馆.txt", - "./resource/Object/乌镇民宿.txt", - "./resource/Object/从化客天下·禧悦庄.txt" + "./resource/Object/中山温泉宾馆.txt" ] }, { @@ -81,5 +71,6 @@ ], "text_possibility": 0.3, "img_frame_possibility": 0, - "text_bg_possibility": 0 + "text_bg_possibility": 0, + "collage_style": ["grid_2x2", "filmstrip", "overlap", "mosaic", "fullscreen", "vertical_stack"] } \ No newline at end of file diff --git a/utils/__pycache__/content_generator.cpython-312.pyc b/utils/__pycache__/content_generator.cpython-312.pyc index af0811d917dfdb16c3bcd4a4b8ba251b68294a40..bab567e22cfea5e3218479e47a1c6f705141802c 100644 GIT binary patch delta 578 zcmX@Jh4IxEM&8rByj%=G&}YM)adabZwzn83hzkWEHZu@^zA(AZyWOCMV-3@4c8FXp zX9-+o4QC115RlAjCWw5IKn>?)M;}i<=GBZ45k`hemYT`yEyN~Y@Zp?F)p!v&L@ zZ0{>M`JA_iHEW3|L^T6L4L3}7HbV;ATqJX9xPuv#8A`-pDpeSYx@&nRJNjxfv)AxU z&i75^=YZ*DWJqVI<(+)rS2~rihBr$QrUyaS@TG880l6t$FxG5_xlAeCDLm;+DZF!# z?CnuuVW{CvW{PA;VX5V*;|Ye+<&5PF70i(g<&2tqo8$eSF|lhh7KH(g-0T|Y%*e<; zxiiR?F>LaoAT1Vtpy=d>LZXvdg5^1jfg#ht@Igs?vQDtO;0+1+5BvJbbw@t6$Lqpv^@KLBt{;@v>raOvDq;_@vLwHmu5@ uY9@O|R!Xe|$x4Csua%UVoam#=$F!OeBFo57$y_sey@ePL2TZ7zvu1LklPGTuCtQT9 zX0juf=;ZyrqUtOqqHuG$UdnT+3a@9So(*8Os?em?Ig=88vw~C;L5P+8hw*%*e<$c}kG&gHct(fWmI8s=4Uv>?8ptI4)b%m zDl;FJaAI(kV?HXu2;>};2TOo%&%PD#5gMXqBqAQ>*Mx_eW|!OkK({Lba(~v~GG;BURP*Vdp*P zfwMjNob!98^*~n$r2v~ zb`ZbRpar)}5fXs7AjE|v4+(?qkfJ045|yHJ4ibZTF`~wGLfrqx#=(~W5g@(`M3g#7 zQi{b%3U1Oc&<)Z9(hHK2f^$*Q2MH4^SQun~z&V?Bc6q5REtO~Hr6ox&l$YgAk0F_h zZ&_xSi^amcG*c?C6s1|4PBd6E2nX`nPAhvR8)MHLIe=~KZF`XY`N%+{o!W`{8!%jP zFy(lV4UGg^96vxWa_j0G)$e@hceFT3qt0x_Wk#C+w<8Y0wT`Q?^3AffiV&hM(nKs9 z&3c}GRB^MqqrqXf9$oR2-Mi7AvPZ}I8ghoTP|wpyPLo#6c2OHsM2CTT*w>GW^)4vW zu#VZ(guvOTi@ksJNIjHJT!2HPZq8O}V>_ckc5d_#Z20-n9ByNGN6&LU>SG6vg|UxK z9XrDNslVi6>3on4ry5Nw&?(fvkYyh>+u8kNr?__7&XW1CH%|SKIsv>q+$%;ae%fB~ z>+D$Ssb87<Q98*>nDUjln(N?WG!BO|Tw6F0oG91p1=F}bdj#DwT<8bV1uE<|KIB;Z5>BCp45#3kU!xZcykY0h- zvq>P!xVP$3a>m{7d%g#N%;zqY!s(%sF(ce$8CgKUXM<K0RN}EFab?VDo1O|1aNQwL0#r z)WQCKcG#j;!mVAeuDF@`^0lTqPIdutn=fAsW9J<}TXl<<2q{YQ&p)SL_YZDv72Y=B z9`*ux!XUr1`7eSoewQiI&&(e{c&P^zdu2{wZ_U-St+@^>e4^27AfY_P_%(A85Wg_G$Cxo5eD=o;RGqyi<9~fSN+@8H1l6 zWrvqO!7}S!&aL(sZrgLcQxX1G#@JMk;n$)#-HLwW9t8c)ft+P}2>s4v0R660oJpbg z@ZmNve{>u+UrZX_59FG_{3$t-0dqIPPo>Ov6DCM=wq3Cip^%#jf-Xd4UUA{iiY}w}2J|`5qYgNmX3}wPh;E^H&OTNs|Aj`qU5Y7FSv+ z$)7WJWjxMbD_<&>WcB4G-&elp@G4O1 zkeF8LHE2TVA;ql029yw$Mh!Nhf&Gd_gUu-2tF&ma74;ubtQxeTzCp#VK?mx~Dozc$ zP$sLmSGYW^;Xyt9idS>Dq5eU|r$Im3msQ#|7*N*;YA}RSJxW-E9RMFhR4BK@uKo*I CK!$t( delta 2622 zcmZWrYiwLc6`t9-c;0KkWibp}Erl2;8g5wCOAVB3-4IuiXaOQ5VaoXLT zGv7UPUUSZw+55vk;}74*>EARq)+6|I|D*n^%JT^Qi9eX1*dy@Kt1qU%vD&=QI^n{I zAYz+uUT{xHfbFDy-m~DH@M2^^Lx?zTA=0p6sp(Dl3|=Gfn)Y~pgVzkamOWm8bQ9+- zJQ1`b(nDGSwE^lSE+?B z{}JqDze~&PpZ$j%t+bWczXsXTT&#FTW*ev7ZcHsyco~s;>UtTyB5Vk-%sL0k&2Hi_ zGp0#)1Pa|*X#>}Ct-ero)(}EeA`PT*v&m2eW-rn_EHWsc@R-t?x9Z)K_Evo+Htnlj zq?vl3L28k-7;`&y&IQ?+&&5s*+ASC{IWG%NDzVoGJF&#{!Tu;jOFUEp>U~8t9bvSN z*CZ>V&PsrNGA6Uisgtn(AD`+I{q#V^WAOY#WidblbKQo6r-vGZz+A6^zd2MCgERcs$_Pd)u%-ncCD!8zn!D3N zJa;(s((o}HV#kMbxe%xp9#@@3T9~*snY3vUT0ej;Z$g!#G|G0*OYD2YZd^mZA8r+5 zwC1GljN276-9LjWcr8g|n#`R!Ws|RlsXU9dFz*3xCzYYb7IO^_RF@W6^zq%MyFa~# z(ISRSM!@do9`cD4OBT3_0f_rT&SF`3SO|Zzht1NiNZq<@B$=1(>aDr{0mDyY8 zeBOk)L9+sjn2K788#!^5rXcyp_JqOs7ok0km$p+yiCE(9GVk0UN2~{HTx< zh9%qn=7V&mp@>-+?RNI|*+{yJX7)#In!W~CmYSdmn(>2QEyqKPpETWoaSzQwTCAo# zm%hP-%$g3Y6 zG`4hVe_G%q2{ccVMub@&AzL}0l3e68&645GGaCnLDZ>an@h*Myyjv(3IO;6YqN>nh zOnk zPKN{dD{XsRzW}yg8jq&=-ObD z3#NN9@lxJ?FKq)e_d4>E4dNfeHcnH)$vSbTP6WKuY@aL%J3eW$OW5fWCrgKfox}Dk zS>e9Wb|oR)Plz1n?Nb@yes6XvF6_odz`Hs7bY9%;DNLuu2WfFS&&HR#kN6-HDu3q~ zQJaBgGwKdZ>X$fq8pvJSv^u*ytyUD3zuu_)AN8(KS*fW1Vz-w^Bi5@+s-p4>NBs*Y zkW-}ol@mKBAG7lHlY{RAyerPkFHKj~*E#zmgHgS)Jg=y{9x8uZQbU{sfqZN`y0AoU z%qz#$1gydjRUWXPUGIWJr(gfi>P-PhzT2ZCKHtgab%BH3WJVV`&<~(oQLi(g4Hb{* zb_3RvhFgV8+Dg-$$%czRnomTh2!AE mhYt4YeuEuAy=6UUz&6xV(nAIeb04w+BdBojVU$B-i~j@kAAAA; diff --git a/utils/content_generator.py b/utils/content_generator.py index 530c96b..015c752 100644 --- a/utils/content_generator.py +++ b/utils/content_generator.py @@ -450,7 +450,7 @@ class ContentGenerator: return fixed_data def run(self, info_directory, poster_num, content_data, system_prompt=None, - api_url="http://localhost:8000/v1", model_name="qwenQWQ", api_key="EMPTY"): + api_url="http://localhost:8000/v1", model_name="qwenQWQ", api_key="EMPTY", timeout=120): """ 运行海报内容生成流程,并返回生成的配置数据。 @@ -478,7 +478,8 @@ class ContentGenerator: system_prompt, api_url, model_name, - api_key + api_key, + timeout=timeout, ) # 检查生成是否失败 diff --git a/utils/tweet_generator.py b/utils/tweet_generator.py index 5a6b790..1458a85 100644 --- a/utils/tweet_generator.py +++ b/utils/tweet_generator.py @@ -23,7 +23,7 @@ import logging # Add logging from core.ai_agent import AI_Agent from core.topic_parser import TopicParser from utils.prompt_manager import PromptManager # Keep this as it's importing from the same level package 'utils' -from core import contentGen as core_contentGen +from utils import content_generator as core_contentGen from core import poster_gen as core_posterGen from core import simple_collage as core_simple_collage from .output_handler import OutputHandler # <-- 添加导入 @@ -454,7 +454,8 @@ def generate_posters_for_topic(topic_item: dict, output_collage_subdir: str, output_poster_subdir: str, output_poster_filename: str, - system_prompt: str + system_prompt: str, + collage_style: str ): """Generates all posters for a single topic item, handling image data via OutputHandler. @@ -626,6 +627,7 @@ def generate_posters_for_topic(topic_item: dict, logging.info(f"Generating collage from: {input_img_dir_path}") collage_images = core_simple_collage.process_directory( input_img_dir_path, + style=collage_style, target_size=poster_target_size, output_count=1 )