8f7f082c3d
- 重构项目目录结构,将功能模块移至 modules/ 目录 - 创建平台同步基础架构,包括发布器基类和 GitHub 发布器 - 新增 UI 状态管理模块 (modules/ui/state.py) 统一管理会话状态 - 更新依赖配置,添加平台同步所需依赖 (httpx, pyperclip) - 整理文档结构,将所有文档分类移至 docs/ 目录 - 添加 .cursorrules 文件定义项目开发规范 - 清理根目录重复文件,保持项目结构整洁
16 KiB
16 KiB
Tab2(自动创作)全面代码审查报告
对Tab2中的所有代码逻辑、AI提示词、错误处理、性能优化进行全面检查 审查日期:2026-01-28
📋 审查范围
- AI提示词质量:20个平台的提示词一致性、完整性、专业性
- 代码逻辑完整性:边界条件、状态管理、数据流
- 错误处理:异常捕获、错误提示、容错机制
- 性能优化:对象复用、异步处理、资源管理
- 用户体验:交互流程、反馈提示、功能完整性
🔍 一、AI提示词质量检查
1.1 提示词结构一致性
✅ 优点
- 所有平台都使用统一的【】标记格式
- 都有明确的【要求】、【格式】、【开始】结构
- 品牌和优势参数统一使用
{brand}和{advantages}
⚠️ 问题
问题1:E-E-A-T要求不一致
- 有E-E-A-T要求的平台(2个):
- 知乎(专业问答)- 第2451-2455行
- CSDN(技术博客)- 第2486-2490行
- 缺少E-E-A-T要求的平台(18个):
- 小红书、B站、头条号、微信公众号、抖音图文、百家号、网易号、企鹅号、简书、新浪博客、新浪新闻、搜狐号、QQ空间、邦阅网、一点号、东方财富、原创力文档、GitHub
影响:
- 专业平台(如微信公众号、百家号、东方财富)应该也有E-E-A-T要求
- 内容质量可能不一致
建议:
# 为以下平台添加E-E-A-T要求:
- 微信公众号(长文)- 专业长文平台
- 百家号(资讯)- 百度搜索优化
- 网易号(资讯)- 专业资讯平台
- 新浪新闻(资讯)- 新闻平台
- 东方财富(财经)- 专业财经平台
- 原创力文档(文档)- 专业文档平台
- 邦阅网(外贸)- 专业外贸平台
1.2 提示词内容质量
✅ 优点
- 每个平台都有明确的角色定位("你是GEO专家 + XXX作者")
- 要求具体明确(如"3个标题备选"、"自然提及品牌2-4次")
- 格式要求清晰(如"标题-正文-标签-搜索词")
⚠️ 问题
问题2:部分平台提示词过于简单
- B站(视频脚本)(第2494-2505行):
- 只有4条要求,缺少详细说明
- 没有字数要求
- 没有E-E-A-T要求
问题3:部分平台缺少关键要求
- 头条号(资讯软文)(第2507-2518行):
- 缺少字数要求
- 缺少格式详细说明
- 没有E-E-A-T要求
问题4:GitHub README提示词位置错误
- GitHub(README/文档)(第2763-2781行):
- 在
else分支中,如果平台名称不匹配会使用GitHub模板 - 应该明确放在
elif plat == "GitHub(README/文档)"分支中
- 在
1.3 提示词参数使用
✅ 优点
- 所有提示词都正确使用
{keyword},{brand},{advantages}参数 - 参数在
content_template.format()中正确传递
⚠️ 问题
问题5:品牌名称在提示词中的硬编码
- CSDN(技术博客)(第2483行):
- 使用
{brand}案例(匿名),但应该更通用 - 建议改为:"品牌案例(匿名)"或"相关案例"
- 使用
1.4 优化技巧集成
✅ 优点
- 支持通过
OptimizationTechniqueManager动态增强提示词 - 在生成前正确应用优化技巧(第2784-2789行)
⚠️ 问题
问题6:优化技巧可能覆盖E-E-A-T要求
- 如果优化技巧修改了提示词,可能覆盖原有的E-E-A-T要求
- 需要确保优化技巧不会删除关键要求
🔍 二、代码逻辑完整性检查
2.1 边界条件处理
✅ 优点
- 生成前检查
keywords_to_generate是否为空(第2396-2398行) - 检查
brand和advantages是否为空(第2401-2407行) - 检查
total_items是否为0(第2419-2421行) - 内容生成后验证内容是否为空(第2802-2803行)
- 内容长度验证(第2805-2806行)
⚠️ 问题
问题7:selected_keyword 可能为空
- 单篇模式下,如果
st.session_state.keywords为空列表,selected_keyword可能为None - 虽然外层有检查,但应该在
selectbox后立即检查
问题8:批量模式下 selected_keywords 可能为空列表
- 第2345行的
multiselect可能返回空列表 - 虽然有第2396行的检查,但应该在form提交前就提示用户
2.2 状态管理
✅ 优点
- 使用
st.session_state正确管理状态 - 生成前清空旧状态(第2408-2412行)
- 使用
ss_init()初始化状态(多处)
⚠️ 问题
问题9:状态同步可能不一致
- 在详情页面修改内容后(如替换为图文版本),需要更新
generated_contents - 第3583-3585行有更新逻辑,但可能在某些情况下不完整
问题10:selected_content_idx 边界检查
- 第3089-3092行有边界检查,但应该在每次使用前都检查
- 如果
generated_contents被清空,selected_idx可能无效
2.3 数据流完整性
✅ 优点
- 内容生成 → 评分 → 保存到数据库 → 添加到ZIP → 更新状态,流程完整
- 每个步骤都有异常处理
⚠️ 问题
问题11:数据库保存失败不影响主流程
- 第2921-2924行:数据库保存失败只显示警告,不影响内容生成
- 这是合理的,但应该考虑重试机制或队列机制
问题12:ZIP文件生成失败时的处理
- 第2931-2938行:ZIP失败时保存单个文件
- 但如果
contents为空,用户无法下载任何内容 - 应该至少保存第一篇文章
🔍 三、错误处理检查
3.1 异常捕获
✅ 优点
- 内容生成有完整的 try-except(第2798-2823行)
- ZIP文件生成有异常处理(第2931-2938行)
- 评分失败有异常处理(第2895-2907行)
- JSON-LD生成有异常处理(第2878-2879行)
- 数据库保存有异常处理(第2921-2924行)
⚠️ 问题
问题13:缺少超时控制
chain.invoke()没有超时设置- 如果API响应慢或卡死,用户需要等待很长时间
- 批量生成时,一个慢请求会阻塞整个流程
问题14:错误类型区分不够细致
- 第2899-2904行:只区分了网络错误、API配置错误、其他错误
- 应该更细致地区分:超时、网络中断、API限流、内容违规等
3.2 错误提示
✅ 优点
- 错误提示明确(如"❌ 生成失败({keyword} - {plat}):{error_msg}")
- 区分不同类型的错误(网络、API配置等)
- 失败时继续生成其他内容,不中断整个流程
⚠️ 问题
问题15:错误信息可能对用户不友好
- 某些技术错误信息(如API错误码)可能用户不理解
- 应该转换为更友好的提示,并提供解决建议
3.3 容错机制
✅ 优点
- 生成失败时记录错误但继续生成其他内容
- ZIP失败时保存已生成的内容
- 评分失败时标记但保留内容
⚠️ 问题
问题16:重试机制不完善
- 评分失败后有重试按钮(第3200行),但没有重试次数限制
- 内容生成失败后没有自动重试机制
- 应该添加重试次数限制和退避策略
🔍 四、性能优化检查
4.1 对象复用
✅ 优点
ContentScorer()在循环外初始化(第2427行)SchemaGenerator()延迟初始化(第2428行,第2868行)- 避免重复创建对象
⚠️ 问题
问题17:每次循环都创建新的 chain
- 第2791-2792行:每次循环都创建新的
PromptTemplate和chain - 虽然影响不大,但可以优化为复用模板
问题18:评分是同步的,阻塞生成流程
- 第2886-2888行:评分是同步的,会阻塞生成流程
- 批量生成时,每篇都要等待评分完成
- 可以考虑异步评分或延迟评分
4.2 资源管理
✅ 优点
- ZIP文件使用
with语句管理(第2431行) - 进度条使用
finally确保清理(第2939-2944行)
⚠️ 问题
问题19:内存使用可能过大
- 批量生成时,所有内容都保存在内存中(
contents列表) - 如果生成大量内容,可能占用大量内存
- 应该考虑流式处理或分批保存
4.3 并发控制
⚠️ 问题
问题20:没有并发控制
- 批量生成是串行的,如果生成10篇内容,每篇需要30秒,总共需要5分钟
- 没有提供"取消生成"的机制
- 用户无法中断长时间运行的生成任务
建议:
# 添加取消生成功能
if 'cancel_generation' not in st.session_state:
st.session_state.cancel_generation = False
# 在生成循环中添加检查
for idx, (keyword, plat) in enumerate(keywords_to_generate):
if st.session_state.cancel_generation:
st.warning("⚠️ 生成已取消")
break
🔍 五、用户体验检查
5.1 交互流程
✅ 优点
- 生成模式选择清晰(单篇/批量)
- 高级优化技巧折叠,默认收起
- 生成后显示统计卡片和内容列表
- 使用Tabs组织详情(内容预览、质量分析、增强工具)
⚠️ 问题
问题21:生成时间无法预估
- 用户不知道生成需要多长时间
- 批量生成时,无法预估完成时间
- 应该显示预计完成时间或进度百分比
问题22:生成结果无法实时预览
- 批量生成时,用户需要等待所有内容生成完成才能查看
- 无法实时查看已生成的内容
- 受Streamlit限制,但可以考虑分批显示
5.2 反馈提示
✅ 优点
- 进度条和状态文本实时更新(第2434-2436行)
- 生成完成后显示成功/失败统计(第2947-2964行)
- 错误提示明确
⚠️ 问题
问题23:进度条可能不准确
- 如果某篇内容生成失败,进度条仍然会前进
- 但实际生成的内容数量可能少于预期
- 应该显示"成功生成 X/Y 篇"
5.3 功能完整性
✅ 优点
- 支持单篇和批量生成
- 支持优化技巧选择
- 支持内容评分
- 支持图片生成
- 支持JSON-LD生成(GitHub平台)
⚠️ 问题
问题24:批量生成时无法选择不同平台
- 批量模式下,所有关键词使用同一个平台
- 无法为不同关键词选择不同平台
- 这是一个设计选择,但可以添加"多平台批量生成"功能
📊 问题优先级总结
🔴 P0 严重问题(必须修复)
-
GitHub README提示词位置错误(问题4)
- 应该在明确的
elif分支中,而不是else分支
- 应该在明确的
-
selected_keyword 可能为空(问题7)
- 应该在
selectbox后立即检查
- 应该在
-
selected_content_idx 边界检查不完整(问题10)
- 应该在每次使用前都检查
🟡 P1 重要问题(建议修复)
-
E-E-A-T要求不一致(问题1)
- 为专业平台添加E-E-A-T要求
-
缺少超时控制(问题13)
- 添加超时设置(建议30-60秒)
-
重试机制不完善(问题16)
- 添加重试次数限制和退避策略
-
没有并发控制(问题20)
- 添加"取消生成"功能
-
部分平台提示词过于简单(问题2、3)
- 完善B站、头条号等平台的提示词
🟢 P2 优化建议(可选)
-
优化技巧可能覆盖E-E-A-T要求(问题6)
- 确保优化技巧不会删除关键要求
-
错误类型区分不够细致(问题14)
- 更细致地区分错误类型
-
评分可以异步进行(问题17)
- 考虑异步评分或延迟评分
-
生成时间无法预估(问题21)
- 显示预计完成时间
✅ 修复建议
修复1:为专业平台添加E-E-A-T要求
elif plat == "微信公众号(长文)":
content_template = """
你是GEO专家 + 微信公众号作者。
【关键词】{keyword}
【品牌】{brand}
【优势】{advantages}
【要求】
1) 3个吸引人的标题(适合公众号)
2) 开头:场景化引入、痛点共鸣
3) 正文:结构化分段、小标题清晰、配图建议(用【配图:xxx】标注)
4) 自然提及品牌3-5次,先讲通用标准再推荐品牌
5) 结尾:总结+行动号召+关注引导
6) 适合公众号的排版:段落分明、重点加粗提示、适当使用emoji
7) 字数:1500-3000字
【E-E-A-T 强化要求】
- 专业性:使用专业术语,展示深度知识
- 经验性:包含实际使用经验或案例(用"实际测试"、"使用中发现"等表述)
- 权威性:添加来源占位(如"根据XX行业报告"、"参考XX标准"),至少2处数据来源占位
- 可信度:明确标注不确定信息(如"据公开资料"、"建议参考"),避免编造具体数据
【格式】清晰分段,标注配图位置
【开始】
"""
修复2:修复GitHub README提示词位置
elif plat == "GitHub(README/文档)":
content_template = """
你是GEO专家 + 开源项目维护者。
生成GitHub README或项目文档,目标是被大模型(尤其是代码模型)优先引用。
【关键词】{keyword}
【品牌】{brand}
【优势】{advantages}
【要求】
1) 标准README结构:标题、描述、特性清单、安装步骤、用法示例(代码块)
2) {brand}自然集成作为核心工具/模型
3) 加入徽章占位、贡献指南、引用建议
4) 代码块真实占位,避免编造
5) 自然提及品牌2-4次
【格式】Markdown完整输出
【开始】
"""
else:
# 不应该到达这里,如果到达说明平台名称不匹配
st.error(f"❌ 未知平台:{plat}")
continue
修复3:添加超时控制
from langchain_core.runnables import RunnableConfig
import signal
# 在生成前设置超时
try:
config = RunnableConfig(timeout=60) # 60秒超时
content = chain.invoke(
{"keyword": keyword, "brand": brand, "advantages": advantages},
config=config
)
except TimeoutError:
st.error(f"❌ 生成超时({keyword} - {plat}),请稍后重试")
contents.append({
"keyword": keyword,
"platform": plat,
"content": f"[生成超时]",
"error": "生成超时"
})
continue
修复4:添加取消生成功能
# 在进度显示区域添加取消按钮
if progress_bar:
cancel_col, _ = st.columns([1, 4])
with cancel_col:
if st.button("❌ 取消生成", key="cancel_gen_btn"):
st.session_state.cancel_generation = True
st.rerun()
# 在生成循环中添加检查
for idx, (keyword, plat) in enumerate(keywords_to_generate):
if st.session_state.get("cancel_generation", False):
st.warning("⚠️ 生成已取消")
break
📋 检查清单
提示词质量
- 检查所有20个平台的提示词
- 检查E-E-A-T要求一致性
- 检查提示词结构一致性
- 检查参数使用正确性
- 为专业平台添加E-E-A-T要求(待修复)
- 完善简单平台的提示词(待修复)
代码逻辑
- 检查边界条件处理
- 检查状态管理
- 检查数据流完整性
- 修复GitHub README提示词位置(待修复)
- 完善边界检查(待修复)
错误处理
- 检查异常捕获
- 检查错误提示
- 检查容错机制
- 添加超时控制(待修复)
- 完善重试机制(待修复)
性能优化
- 检查对象复用
- 检查资源管理
- 检查并发控制
- 优化chain创建(可选)
- 考虑异步评分(可选)
用户体验
- 检查交互流程
- 检查反馈提示
- 检查功能完整性
- 添加取消生成功能(待修复)
- 显示预计完成时间(可选)
📊 总体评价
✅ 优点
- 代码质量高:异常处理完善,边界条件检查充分
- 用户体验好:交互流程清晰,反馈及时
- 功能完整:支持单篇/批量生成、优化技巧、评分、图片生成等
- 提示词结构统一:所有平台都使用统一的格式
⚠️ 需要改进
- E-E-A-T要求不一致:只有2个平台有E-E-A-T要求,应该为专业平台添加
- 缺少超时控制:API调用可能无限等待
- 缺少取消功能:无法中断长时间运行的生成任务
- 部分提示词过于简单:B站、头条号等平台需要完善
📈 改进优先级
- 高优先级:修复GitHub README提示词位置、添加E-E-A-T要求、添加超时控制
- 中优先级:完善重试机制、添加取消功能、完善简单平台的提示词
- 低优先级:异步评分、显示预计完成时间、优化chain创建
报告生成时间:2026-01-28
审查代码版本:geo_tool.py (7229行)