本文摘要 DeepSeek
该文本介绍了一个基于 Python 的多线程 AI 文章生成工具,主要功能包括:1. 通过关键词列表批量生成标题并撰写文章;2. 支持自定义 AI 接口/模型、并发控制及内容格式;3. 提供提示词优化机制提升原创性和可读性。核心代码展示了关键功能实现:初始化 OpenAI 配置、关键词读取、标题清洗、提示词加载 (支持多模板轮换) 及文件存储管理。系统采用模块化设计,包含完善的错误处理和日志记录,通过配置文件实现高度自定义。(149 字)
Python 可以实现多线程同时根据关键词列表进行标题生成,然后根据标题写对应的文章,通过定义提示词优化生成内容的原创度、阅读体验改进。
可以自定义你喜欢的 ai 接口和模型,控制并发和线程、生成间隔、生成的文章内容格式、文字保存的文件名等功能。
核心示例代码:
import os
import openai
import concurrent.futures
import configparser
import time
import logging
import re
import random
# 设置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
def clean_title(title):
"""统一清理标题中的非法字符和前缀"""
title = re.sub(r'^[\s ]*(文章标题|标题)[::]?\s*', '', title)
title = re.sub(r'[<>:"/\\|?*#\n\r\t]', '', title).strip()
return title[:50]
def setup_openai(api_key, base_url):
"""配置 OpenAI 客户端"""
openai.api_key = api_key
openai.base_url = base_url
def read_keywords(keyword_file):
"""读取关键词列表"""
if not os.path.exists(keyword_file):
logger.error(f"关键词文件不存在: {keyword_file}")
return []
try:
with open(keyword_file, 'r', encoding='utf-8') as f:
return [line.strip() for line in f if line.strip()]
except Exception as e:
logger.error(f"读取关键词文件失败: {e}")
return []
def create_wenzhang_folder():
"""创建文章文件夹"""
base_path = os.path.join(os.getcwd(), "wenzhang")
os.makedirs(base_path, exist_ok=True)
return base_path
def load_prompts(prompt_file='neirong.ini'):
"""读取提示词配置文件"""
config = configparser.ConfigParser(inline_comment_prefixes=('#', ';'))
if not os.path.exists(prompt_file):
logger.error(f"提示词配置文件不存在: {prompt_file}")
return [], []
try:
with open(prompt_file, 'r', encoding='utf-8') as file:
# 读取文件内容
content = file.read()
# 处理续行符
content = content.replace('\\\n', '')
# 从字符串读取配置
config.read_string(content)
except FileNotFoundError:
logger.error(f"提示词配置文件未找到: {prompt_file}")
return [], []
except configparser.Error as e:
logger.error(f"解析提示词配置文件时出错: {e}")
return [], []
except Exception as e:
logger.error(f"读取提示词配置文件时发生未知错误: {e}")
return [], []
title_prompts = []
article_prompts = []
for section in config.sections():
if section.startswith('TitlePrompt'):
try:
title_prompts.append(config.get(section, 'prompt'))
except configparser.NoOptionError:
logger.warning(f"在 {section} 节中未找到 'prompt' 选项")
elif section.startswith('ArticlePrompt'):
try:
article_prompts.append(config.get(section, 'prompt'))
except configparser.NoOptionError:
logger.warning(f"在 {section} 节中未找到 'prompt' 选项")
if not title_prompts or not article_prompts:
logger.error("提示词配置文件中缺少有效的标题或文章提示词")
return [], []
return title_prompts, article_prompts