基于 AI 技术的智能软文识别工具,帮助用户快速识别隐蔽的商业推广内容。
- 智能检测: 使用先进的 AI 模型分析文本内容,识别是否为软文
- 实时分析: 支持流式响应,实时显示分析结果
- 多维度评估: 从商业意图、内容客观性、结构伪装性等多个维度进行分析
- 置信度评估: 提供低、中、高三个级别的置信度评估
- 广告主识别: 自动识别潜在的广告主和目标人群
- 响应式设计: 支持桌面和移动设备访问
- 简洁易用: 界面简洁,操作直观
is-it-soft-ad/
├── main.py # FastAPI 后端服务器
├── script.js # 前端 JavaScript 逻辑
├── index.html # 前端页面
├── style.css # 样式文件
└── prompt.toml # AI 提示词配置
- Python 3.11
- uv (Python 包管理器)
- Node.js (用于前端依赖)
- OpenAI API Key
uv sync参见 .env.example
# 使用 uv 启动后端服务
uv run python main.py
# 服务将在 http://localhost:8000 启动访问 http://localhost:8000 即可使用软文检测器。
- FastAPI: 现代化的 Python Web 框架
- LLM API: AI 文本分析能力
- 原生 JavaScript: 纯 JavaScript 实现的前端逻辑
- CSS3: 现代化的样式设计
- Marked.js: Markdown 解析库
- Server-Sent Events (SSE): 实时数据流传输
POST /v1/submit_task- 提交分析任务GET /v1/task_stream/{task_id}- 获取分析结果流GET /- 主页GET /health- 健康检查
// 提交任务
const response = await fetch('/v1/submit_task', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
content: '需要分析的文本内容...'
})
});
// 获取任务ID后连接到流
const eventSource = new EventSource(`/v1/task_stream/${taskId}`);- 请求限制: 30 次/分钟,最大突发 5 次
- 字符限制: 1,000,000 字符/分钟
sequenceDiagram
participant U as 用户
participant F as 前端界面
participant B as FastAPI 后端
participant O as LLM API
participant M as 内存存储
Note over U,B: 用户输入文本进行分析
U->>F: 在界面输入文本内容
U->>F: 点击分析按钮
Note over F,B: 提交分析任务
F->>B: POST /v1/submit_task
F->>B: { content: "待分析文本..." }
Note over B: 速率限制检查
B->>B: 检查请求频率 (30/分钟)
B->>B: 检查字符数量 (1M/分钟)
Note over B,M: 创建任务并返回ID
B->>M: 存储任务到内存
B->>M: 生成唯一 task_id
B->>F: 返回 { task_id: "xxx" }
Note over F,B: 建立实时连接
F->>B: GET /v1/task_stream/{task_id}
Note over F,B: 建立 SSE 连接
Note over B,O: 调用 OpenAI API
B->>O: 发送流式分析请求
Note over O: 基于 Prompt 多维度分析
Note over O,B: 实时返回分析结果
O->>B: 流式返回 JSON 数据
B->>B: 解析部分 JSON
B->>F: SSE 推送分析数据
F->>U: 实时显示分析结果
Note over B,M: 完成并清理任务
B->>M: 从内存删除任务
Note over U,F: 用户查看完整报告
-
用户输入
- 用户在网页界面输入需要分析的文本内容
- 点击分析按钮提交分析请求
-
任务提交
- 前端向 FastAPI 后端发送 POST 请求到
/v1/submit_task - 请求包含待分析的文本内容
- 前端向 FastAPI 后端发送 POST 请求到
-
任务创建
- 后端接收到请求后,创建新的分析任务
- 生成唯一的 task_id 并存储任务状态
- 返回 task_id 给前端用于后续追踪
-
实时连接建立
- 前端使用返回的 task_id 建立 SSE 连接
- 连接到
/v1/task_stream/{task_id}端点 - 准备接收实时分析结果
-
AI 分析处理
- 后端将文本发送给 AI 分析引擎(LLM)
- AI 从多个维度进行分析
-
实时结果推送
- AI 分析结果通过 SSE 流式返回给前端
- 前端实时更新显示分析进度和结果
- 用户可以看到分析过程的实时反馈
-
任务完成
- 分析完成后,后端保存最终结果
- SSE 连接自动关闭
- 用户可以查看完整的分析报告
- 实时性: 使用 Server-Sent Events (SSE) 实现流式响应
- 异步处理: 后端异步处理 AI 分析请求,避免阻塞
- 状态管理: 每个任务都有唯一 ID 和状态追踪
- 多维度分析: AI 从多个角度综合评估文本内容
- 响应式设计: 前端界面适配不同设备尺寸
系统采用五级分类标准,根据推广意图强度和推广隐蔽性两个维度进行划分:
- 特征: 文章内容完全基于事实、经验或独立观点进行阐述。不存在任何形式的产品、品牌、服务或机构的推介。作者与所述内容无利益关联。
- 目的: 提供价值、分享知识、表达观点、引发讨论。
- 判断关键词: "我个人觉得"、"据XX数据显示"、"一般来说"、"试用了好几款"。
- 特征: 文章核心是提供有价值的内容,推广信息作为内容的一部分自然出现,并非文章首要目标。通常会以"自用"、"用过不错"等个人经验口吻提及。
- 目的: 以优质内容建立信任,间接提升品牌好感或产品认知。
- 判断关键词: "我自己在用"、"搭配XX产品效果更好"、"这里推荐一个我常用的"。
- 特征: 文章的核心目的就是推广,且开宗明义或明确告知读者此为广告、合作内容。内容围绕产品/品牌的优点展开,但意图公开透明,不试图伪装。
- 目的: 直接进行产品宣传、品牌曝光或获取销售线索。
- 判断关键词: "本文为品牌合作"、"广告"、"赞助"、"感谢XX品牌提供"。
- 特征: 文章的核心目的是推广,但故意模仿Level 0或Level 1的内容形式,试图隐藏其商业意图,让读者在无戒备心理下接受营销信息。通常不会明确标注广告性质。
- 目的: 在读者未察觉的情况下影响其心智或行为,规避广告审查。
- 判断关键词: 通篇以"小编亲测"、"朋友推荐"、"最近爆火"等第三方或亲身经历的口吻叙述,回避"广告"标识。
- 特征: 在Level 3的基础上,不仅隐藏意图,还包含无法证实的虚假数据、捏造的用户案例、夸大甚至欺诈性的宣传,可能对读者造成经济损失或健康风险。
- 目的: 通过欺骗手段实现转化或销售。
- 判断关键词: "百分百有效"、"独家内部渠道"、"稳赚不赔"、"几天见效"、"彻底根治"。
系统从以下维度分析文本是否为软文:
-
商业意图与上下文分析
- 品牌提及是否为必要背景信息
- 是否存在明显的推广倾向
- 是否试图影响消费决策
-
内容客观性分析
- 是否以推广为核心目的
- 是否只陈述优点而回避缺点
- 是否使用大量主观性赞美词汇
-
结构伪装性分析
- 是否为"伪装-转折-推广"模式
- 结尾是否有明确的行动号召
-
来源与披露分析
- 是否明确标注广告性质
- 发布者身份是否可疑
- 内容审核: 帮助编辑识别隐蔽的商业推广内容
- 学术研究: 分析媒体内容中的商业影响因素
- 个人使用: 识别网络文章中的软文内容
- 教育用途: 培养批判性思维和媒体素养
欢迎提交 Issue 和 Pull Request!
- Fork 本仓库
- 创建功能分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 创建 Pull Request
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
感谢所有为本项目做出贡献的开发者和用户。
免责声明: 本工具仅作为辅助分析工具使用,分析结果仅供参考,不构成专业的法律或商业建议。