CSDN 文章合规审核与整改工具
一、软件截图

二、它能做什么?
这个工具是一个纯前端的网页应用,界面简洁,操作直观。它的核心能力体现在三个方面:
-
1. 主动发现与精准诊断: 它不会简单地告诉你“可能违规”,而是像一位经验丰富的编辑,主动排查文章中的每一处潜在问题,并精准引用《规范》的具体条款,让你明明白白地知道错在哪里。
-
2. 深度修复与一键生成: 诊断只是第一步,它最强大的功能是直接动手修改!它会综合所有违规点,为你生成一个完整的、可以直接发布的、完全合规的文章版本,包括优化后的标题和正文。
-
3. 高度可定制与透明化: 你可以自由选择背后驱动的AI大模型(支持OpenRouter平台上的多种免费及付费模型),并且整个分析和修改过程所依赖的“知识库”(即CSDN规范)和“指令”(Prompt)都是公开透明的。
三、如何调教AI?
这个工具的实现并不复杂,核心在于一个精心设计的Prompt。我为AI设定了一个非常明确的角色和一套严格的行动指令。
- 角色扮演 (Role-Playing): 我让AI扮演“CSDN内容整改专家”,并强调它的首要任务是“主动发现”问题,而不是被动判断。
- 知识库注入 (Knowledge Base): 我将完整的《CSDN社区内容创作规范》作为上下文喂给AI,并强制它所有的判断必须且只能依据这份规范。
- 结构化输出 (Structured Output): 最关键的一步,我设计了一套带有特殊分隔符(如
[START_OF_REPORT])的输出格式,并要求AI严格遵守。这样,前端的JavaScript代码就能非常轻松地解析AI返回的文本,并将其分别填入“整改报告”和“修改后全文”两个文本框中。
这种“Prompt工程”的思路,使得我们能将大模型的强大能力约束在我们需要的特定任务上,实现稳定、可靠的输出。
四、完整源码
使用步骤
- 获取API Key: 工具通过 OpenRouter.ai 调用大模型。你需要注册一个OpenRouter账号,它会提供免费额度,足够日常使用了。在账户设置中拿到你的API Key。
- 打开工具: 将下面的完整代码保存为一个
.html文件,用浏览器打开。 - 粘贴与运行: 将API Key和你的文章内容分别粘贴到对应的输入框,点击“开始审核”即可。
- 下载结果: 你可以直接点击“下载.md文件”按钮,保存修改后的文章。
完整HTML代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CSDN 文章合规审核与整改工具</title>
<style>
:root {
--bg-color: #f6f8fa;
--container-bg: #ffffff;
--text-color: #24292e;
--label-color: #586069;
--border-color: #e1e4e8;
--accent-color: #0366d6;
--accent-hover-color: #005cc5;
--error-color: #d73a49;
--font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
--border-radius: 8px;
--box-shadow: 0 4px 12px rgba(0,0,0,0.08);
}
body {
font-family: var(--font-family);
background-color: var(--bg-color);
color: var(--text-color);
margin: 0;
padding: 2rem;
display: flex;
justify-content: center;
align-items: flex-start;
min-height: 100vh;
}
.container {
width: 100%;
max-width: 900px;
background-color: var(--container-bg);
border-radius: var(--border-radius);
box-shadow: var(--box-shadow);
padding: 2.5rem;
box-sizing: border-box;
}
h1 {
text-align: center;
font-size: 2rem;
margin-bottom: 2rem;
font-weight: 600;
}
.form-group {
margin-bottom: 1.5rem;
}
.form-group label {
display: block;
font-weight: 600;
color: var(--label-color);
margin-bottom: 0.5rem;
}
.input-field,
.textarea-field,
.select-field {
width: 100%;
padding: 0.75rem;
font-size: 1rem;
border: 1px solid var(--border-color);
border-radius: var(--border-radius);
background-color: #fff;
box-sizing: border-box;
transition: border-color 0.2s, box-shadow 0.2s;
}
.input-field:focus,
.textarea-field:focus,
.select-field:focus {
outline: none;
border-color: var(--accent-color);
box-shadow: 0 0 0 3px rgba(3, 102, 214, 0.3);
}
.textarea-field {
min-height: 150px;
resize: vertical;
line-height: 1.6;
}
#rules-textarea {
min-height: 200px;
font-size: 0.9rem;
background-color: #f9f9f9;
}
.button-primary {
width: 100%;
padding: 0.8rem 1rem;
font-size: 1.1rem;
font-weight: 600;
color: #fff;
background-color: var(--accent-color);
border: none;
border-radius: var(--border-radius);
cursor: pointer;
transition: background-color 0.2s;
display: flex;
justify-content: center;
align-items: center;
}
.button-primary:hover {
background-color: var(--accent-hover-color);
}
.button-primary:disabled {
background-color: #94d3a2;
cursor: not-allowed;
}
.button-secondary {
padding: 0.3rem 0.8rem;
font-size: 0.9rem;
background-color: #e1e4e8;
color: var(--text-color);
border: 1px solid var(--border-color);
border-radius: var(--border-radius);
cursor: pointer;
transition: background-color 0.2s;
}
.button-secondary:hover {
background-color: #d1d5da;
}
.output-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 2rem;
}
.spinner {
border: 3px solid rgba(255, 255, 255, 0.3);
border-radius: 50%;
border-top: 3px solid #fff;
width: 20px;
height: 20px;
animation: spin 1s linear infinite;
margin-left: 10px;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
.hidden {
display: none;
}
</style>
</head>
<body>
<div class="container">
<h1>CSDN 文章合规审核与整改工具</h1>
<div class="form-group">
<label for="api-key-input">OpenRouter API Key</label>
<input type="password" id="api-key-input" class="input-field" placeholder="粘贴你的 OpenRouter Key (例如: sk-or-...)">
</div>
<div class="form-group">
<label for="model-select">选择审核模型</label>
<select id="model-select" class="select-field">
<option value="google/gemini-2.5-pro-exp-03-25" selected>Google: Gemini 2.5 Pro Exp (推荐/默认)</option>
<option value="deepseek/deepseek-chat-v3-0324:free">DeepSeek: Chat V3 0324 (免费)</option>
<option value="deepseek/deepseek-r1-0528:free">DeepSeek: R1 0528 (免费)</option>
<option value="google/gemini-2.0-flash-exp:free">Google: Gemini 2.0 Flash Exp (免费)</option>
<option value="deepseek/deepseek-r1-0528-qwen3-8b:free">DeepSeek: R1 0528 Qwen3 8B (免费)</option>
<option value="qwen/qwen3-235b-a22b:free">Qwen: Qwen3 235B A22B (免费)</option>
<option value="moonshotai/kimi-dev-72b:free">Moonshot: Kimi Dev 72B (免费)</option>
</select>
</div>
<div class="form-group">
<label for="rules-textarea">CSDN 社区内容创作规范</label>
<textarea id="rules-textarea" class="textarea-field"></textarea>
</div>
<div class="form-group">
<label for="article-textarea">待审核的文章内容 (粘贴完整文章,包括标题)</label>
<textarea id="article-textarea" class="textarea-field" placeholder="请在此处粘贴你的文章标题和正文..."></textarea>
</div>
<button id="audit-button" class="button-primary">
<span>开始审核</span>
<div id="spinner" class="spinner hidden"></div>
</button>
<div class="output-header">
<label for="suggestions-output">审核建议与整改报告</label>
</div>
<div class="form-group">
<textarea id="suggestions-output" class="textarea-field" readonly placeholder="AI生成的审核结果将显示在此处..."></textarea>
</div>
<div class="output-header">
<label for="modified-output">修改后的完整文章 (Markdown)</label>
<button id="download-button" class="button-secondary">下载 .md 文件</button>
</div>
<div class="form-group">
<textarea id="modified-output" class="textarea-field" readonly placeholder="AI生成的修改后全文将显示在此处..."></textarea>
</div>
</div>
<script>
const csdnRules = `
CSDN 社区内容创作规范(2024.10.31更新)
CSDN 长久以来秉持初心,致力于为广大 IT 用户提供良好的创作环境,打造健康有序的技术生态!但良好的社区环境,需各位创作者与 CSDN 共同维护建立!【CSDN 社区内容创作规范】请在发文前认真阅读:如你发布的内容存在以下问题,文章将无法通过审核,违规情节严重的,将对帐号进行封号处理。请各位创作者严格遵守社区的内容创作规范,共同守护我们的社区环境!
目录
一、在平台发布以下相关内容 审核将不予通过
1、违反法律法规和相关政策
2、无资质发布专业领域内容
3、流量作弊
4、营销/推广引流
5、不文明用语
6、封面/内容 配图违规
7、标题/内容违规
8、文章评论违规
9、版权风险
10、风险投资
二、涉及以下严重违规行为,一经发现,即刻封禁帐号
三、荣誉恢复说明
一、在平台发布以下相关内容 审核将不予通过
1、违反法律法规和相关政策
违反宪法确定的基本原则,煽动抗拒或者破坏宪法、法律、行政法规实施;
危害国家统一、主权和领土完整,泄露国家秘密,危害国家安全,损害国家尊严、荣誉和利益,宣扬恐怖主义、极端主义;
诋毁民族优秀文化传统,煽动民族仇恨、民族歧视,侵害民族风俗习惯、歪曲民族历史和民族历史人物,损害革命领袖、英雄烈士形象,伤害民族感情,破坏民族团结;
煽动破坏国家宗教政策,宣扬宗教狂热,危害宗教和睦,伤害信教公民宗教感情,破坏信教公民和不信教公民团结,宣扬邪教、封建迷信;
危害社会公德,扰乱社会秩序,破坏社会稳定,宣扬淫秽色情、赌博、吸毒,渲染暴力、恐怖,教唆犯罪或者传授犯罪方法;
教唆、教授、组织他人进行违法乱纪活动,以非法民间组织名义活动的,宣传违法违规物品;
侵害未成年人合法权益或者损害未成年人身心健康;
侵犯他人隐私,侮辱或者诽谤他人,侵害他人合法权益;
侵害他人名誉权、肖像权、知识产权、商业秘密等合法权利;
含有法律、行政法规、规章、条例以及任何具有法律效力之规范所限制或禁止的其它内容。
2、无资质发布专业领域内容
未取得互联网新闻信息服务许可,不得发布新闻信息,新闻信息指:时政类新闻信息,包括有关政治、经济、军事、外交等社会公共事务的报道、评论,以及有关社会突发事件的报道、评论;
未申请健康类专业资质认证的个人和机构,不得发布疾病治疗、用药指导等健康领域专业性强的内容;
未申请财经类专业资质认证的个人和机构,不得发布股票买卖指导、投资指南等财经领域专业性强的内容;
我国法律法规要求必须取得特定资质方可从事特定行为的其他情形,依该等法律法规要求处理。
3、流量作弊
滥用功能产品进行流量作弊,批量发布重复、无意义的低质内容,恶意刷粉刷赞,影响用户体验、破坏平台规则且损害他人权益的行为。包含但不限于以下场景:
违规刷流量:
利用工具批量刷流量:一段时间内的文章,用非正常手段连续使文章流量异常增高;
违规批量重复发文:
批量发无意义/低质内容:连续或大量发布无意义元素,包括但不限于无意义图片、符号、表情、乱码、无序文字等;
违规刷粉点赞:通过非正常手段进行作弊,获取虚假粉丝、虚假点赞数据的行为。
刷量方法介绍:关于如何通过不正当手段增加数据量(如点赞数、评论数、粉丝数、阅读量等)的方法和技巧的内容。
4、广告营销/推广引流
为提高 CSDN 内容生态质量,同时赋能博主实现知识变现,我们对合规、优质、具备正向影响力的博主开放「推广管理」功能,包括微信公众号、微信号、官方网站、QQ 号、QQ 群五种推广方式。
另外,为维护社区良好生态,CSDN 会不断治理恶意营销等黑产行为,即以营利、获益、引流为目的,博客内容附带 CSDN 未接入的第三方平台联系方式、售卖链接,或诱导私信联系转线下交易,引导用户消费但可能存在风险的行为。包含但不限于以下场景:
硬广:不包含实质性技术或其他有价值信息的直接广告内容(包含各类二维码),主要以推广产品、盈利为目的作品,包括产品宣传、商业服务宣传、商业赞助宣传、商业展销宣传等。
软广:①买卖代码:文章有技术内容但是不完整,文章末尾主要以买卖代码引流为主的内容;②课程引流及推广:非商务合作的普通用户发布的文章里有技术内容,但最终以课程推广或引流为目的的内容。③公司产品引流等
招聘/商业合作:用户个人发布的公司职位招聘、内推相关信息以及寻求合作伙伴共同开展项目开发或其他商业活动等内容。
营销链接:带有明显营销意图的第三方网址,或诱导用户在第三方电商平台领取红包、购买交易的口令和店铺号等;
引导交易:推广虚拟货币、虚拟商品、虚拟服务类交易,如游戏点卡、游戏在线服务、网游装备、Q 币、软件序列号、电子书等;
其他营销推广。
5、不文明用语
包含但不限于以下场景:
骚扰辱骂:使用污言秽语、蔑称、外号、同音近音词等直接辱骂或言语骚扰他人;
歧视恶搞:恶搞、歧视特定群体,或言论带有明显的性别歧视、种族歧视、地域歧视等;
情绪宣泄:通过粗俗不堪的口头禅、网络用语等发泄情绪,表达不满的。
6、封面/内容 配图违规
配图内容侵权,与技术文章主体无关且涉及敏感信息。包含但不限于以下场景:
图片涉及低俗;
图文涉及政治;
图片涉及版权,未经个人/机构授权;
图文严重不符,如:美女、宠物、风景、代码与内容不一致等。
7、标题/内容违规
标题、文章内容 ,包含但不限于以下场景:
标题低质:出现夸张、故留悬念、强迫类等标题与正文不符等;
低俗内容:标题/内容 含有色情等低俗诱导性内容;
翻墙内容:标题/内容 含有讲解技术手段或使用第三方工具,访问被屏蔽的网站;
网络用语:违反广告法用语,标题/内容 含有领导人名讳/恶搞等内容;
排版混乱:文章乱码、无段落或无标点,语义不通等;
以下为详细的不符合平台规范的标题/内容况(还请认真研读):
7.1、标题夸张
7.1.1 夸张式标题
标题使用「震惊」、「惊爆」、「传疯」、「吓掉半条命」等,言过其实地表达情绪/状态/感受;
标题使用「全世界网友」、「所有男人都」、「某国人」、「99%」等,进行无依据的范围夸大;
标题使用「XX天见效」、「根治」、「立竿见影」等,对效果或结果做不符合常识的断言或保证;
标题使用「重磅」、「要命」、「就在刚刚」等,对事件的严重和紧急程度夸张形容,引起过度警觉和关注;
标题使用「世界之最」、「最高级」、「最佳」、「最烂」等,形容人事物在某些程度上达到极致,但违背事实和大众认知。
7.1.2 悬念式标题
标题成分残缺,或隐藏关键信息,营造玄虚,如「竟然是……」、「而是……」、「不过……」等话说一半,通过省略号代替关键信息,或使用「内幕」、「揭秘」、「真相」等代替关键信息;
标题故意使用「竟然」、「竟是这样」、「结果却」、「没想到」等强转折词语,制造危机感和想象空间;
标题指代模糊,缺少主语或故意不点明主体,以概括一类别的笼统性指代词替换,如使用「它」、「他」、「她」、「一句话」、「下一秒」、「这种东西」等。
7.1.3 强迫式标题
标题使用「胆小慎入」、「不看后悔一辈子」、「别怪我没提醒你」等表述,挑衅恐吓用户点击;
标题使用「不得不看」、「一定要看完」、「绝对要收藏」等命令式词语,要求或诱导用户阅读;
7.2 标题与正文原意有偏差
7.2.1 标题歧义
标题对易混淆的要素信息解释不清,或缺失主体信息,造成不对称,产生理解歧义。
7.2.2 题文不符
标题与内容对信息主体的某项特征描述不一致,形成冲突,造成信息传达错误;
标题无中生有,捏造内容中不存在的人、物、情节,态度、言论、结果、场景等;
标题描述为确定事件,但内容为猜测、谣传事件,或通过疑问的方式表达不确定或确定为假的消息,使用户产生误解。
7.2.3 封面与标题不符,让用户产生误解
封面图与内容完全不相关,或封面图结合标题易使读者产生误解。
7.3、标题格式不规范
7.3.1 标题含有谩骂词
标题中含有侮辱谩骂词语,或对性别、地域、身份等恶意攻击,语言粗鄙,引起用户反感。
7.3.2 标题含有错别字或存在语病
标题含有错字、别字,以及标题不通顺等,影响阅读体验,包括但不限于以下情况:成分残缺、用词不当、语序不当、搭配不当、结构混乱等。
7.3.3 标题未使用约定俗成的汉字用法
除专有名称需使用繁体字、异体字、外文等情况外,标题修改后使用标准普通话和规范汉字。
7.3.4 标题信息表达不全
标题过短,或无法体现内容,如使用数字、单个词语词组、无意义名称等,影响阅读。
7.3.5 标题标点使用不规范
分创作者在标题的标点符号使用中存在不规范现象,影响作者的创作质量和用户的阅读体验。
7.3.6 文章无标题
文章内有技术内容但是标题名为《无标题》
低质、违规标题不仅影响用户阅读体验,也严重影响平台内容生态,希望各位创作者能遵守平台规范,共建健康有序的网络空间。
7.2 内容违规
7.2.1 非技术内容违规
以下非技术内容类(主要针对博客发文)将无法通过审核:
小说:与技术、编程、IT 行业等主题无关的小说内容。
休闲:涉及娱乐、放松、消遣等方面的活动或信息,如电影、音乐、游戏、运动休闲等相关的讨论、推荐、心得分享等内容。
旅游:关于旅游目的地介绍、旅游攻略、旅行经历分享等方面的信息。
养生:涵盖养生保健方法、健康饮食、运动养生、中医养生等方面的知识和经验分享。
情感类、相亲交友:涉及个人情感问题、情感关系处理、情感心理分析等方面的内容,或者用户发布的以寻找恋爱对象、结交朋友为目的的信息,包括个人基本情况介绍、对另一半的要求、兴趣爱好等内容以及联系方式等。
爆料类(负面信息):用户发布的在生活、工作、商业交易等方面遭遇不良事件的信息。
7.2.1 技术内容违规
以下技术内容类((主要针对博客发文)将无法通过审核:
软件版权:文章里发布盗版软件相关序列号,并教授下载安装的教程。
内容无意义:①一个网址链接,单独发布的一个网址链接,没有任何对该链接的说明、介绍或相关讨论内容。②乱敲乱写等无意义内容,没有逻辑、语法混乱、无法表达明确意思的内容。
8、文章评论违规
系统判定的标题党、内容不宜图片,视其严重程度采取降权、警告、封号等措施;
对于“求回访" 之类的无价值评论, 直接删除评论;
对于故意扰乱秩序的,例如 "球回访" , "求*回*访"等评论,视同恶意评论处理;
限制每位用户 24 小时/ 48 小时内评论总数;
恶意绕过规则,进行违规操作的用户,将受到严厉打击。
9、版权风险
发布未经 个人/机构授权 的著作 、资料、教程等 造成版权侵权。包含但不限于以下场景:
标题/内容 带有软件破解含义,讲解破解流程等、提供破解工具等;
发布未经他人授权书籍目录、内容、相关资料、源码、下载链接等;
发布未经其他网站/机构授权的 资料、教程 、影评、剧透等;
发布 爬取付费内容、个人隐私、国家级网站内容等。
10、风险投资
以营利、获益为目的,推广可能会给他人带来严重经济损失的理财产品、投资项目等。包含但不限于以下场景:
荐股荐彩:推荐购买指定的股票、博彩(包含彩票、六合彩、赌球、跑马)等高风险投资产品,吸引他人跟进购买;
诱导投资:诱导他人参与投资的各类推广话术,包括但不限于 P2P 、区块链、各种网赚等。
二、涉及以下严重违规行为,一经发现,即刻封禁帐号
1、违反法律法规和相关政策的行为及内容;
2、涉及严重内容抄袭 被举报投诉/站内查处;
3、发布或内容带有诱导性色情低俗内容;
4、发布或传播虚假信息并造成恶劣影响的;
5、无资质发布专业领域内容并造成恶劣影响的。
三、荣誉恢复说明
内容涉嫌违规后,用户主动改正行为的,网站会根据用户改正问题的速度和改进程度逐步恢复用户的部分至全部积分及其他等级荣誉。通常会在一周至一个月内恢复。如果从改正后一个月仍然没有恢复到全部积分及等级的,可以与在线客服联系,感谢您的配合与支持。
`;
// DOM Elements
const apiKeyInput = document.getElementById('api-key-input');
const modelSelect = document.getElementById('model-select');
const rulesTextarea = document.getElementById('rules-textarea');
const articleTextarea = document.getElementById('article-textarea');
const auditButton = document.getElementById('audit-button');
const spinner = document.getElementById('spinner');
const suggestionsOutput = document.getElementById('suggestions-output');
const modifiedOutput = document.getElementById('modified-output');
const downloadButton = document.getElementById('download-button');
// Pre-fill the rules
rulesTextarea.value = csdnRules.trim();
function getMetaPrompt(rules, article) {
// This is the modified meta-prompt. Note the unique separators for easy parsing.
return `
**# 角色 (Role)**
你将扮演一个名为“CSDN内容整改专家”的AI助手。你的任务是处理已被初步认定为违反《CSDN 社区内容创作规范》的文章。你必须假定文章中存在一处或多处违规内容。
**# 核心任务 (Core Mission)**
1. **主动发现 (Proactive Discovery):** 你的首要目标不是判断文章“是否”违规,而是找出它“在哪里”以及“如何”违规。你需要像一名经验丰富的编辑一样,对内容进行地毯式排查。
2. **精准诊断 (Precise Diagnosis):** 对每一个发现的违规点,必须精准引用规范条款,并清晰阐述违规原因。
3. **深度修复 (In-depth Rectification):** 除了提供修改建议,你必须直接动手修改,并最终提供一个完整的、可以直接发布的、完全合规的文章版本。
**# 知识库 (Knowledge Base)**
你的所有审核、诊断和修改都必须严格依据以下这份《CSDN 社区内容创作规范(2024.10.31更新)》。**禁止**使用任何此规范之外的通用知识或个人判断。
\`\`\`text
${rules}
\`\`\`
**# 任务指令与输出格式 (Task Instruction & Output Format)**
你的任务是分析下方提供的文章,然后生成一份包含两部分的响应:**整改报告**和**修改后的全文**。
你的整个输出**必须**严格遵循以下结构,并使用指定的分隔符。**禁止**在 [START_OF_REPORT] 之前或 [END_OF_ARTICLE] 之后添加任何额外文字、注释或空格。
---
**[START_OF_REPORT]**
### **CSDN 文章整改报告**
**1. 综合诊断结论:**
[在此处简要概括所有发现的违规问题类型,例如:夸张式标题党、软广引流、内容排版混乱等]
**2. 违规项逐条分析与整改方案:**
(请按以下格式逐条列出所有发现的违规项。如果发现多个,请重复此结构。)
* **违规点 1: [简述违规类型,如:标题夸张]**
* **触犯规则:** [引用具体的规则编号和名称,例如:7.1.1 夸张式标题]
* **违规原文:** [准确引用原文中违反规则的具体文字]
* **原因分析:** [解释为什么这部分内容违反了规则,例如:使用了“惊爆”、“传疯”等词汇,言过其实,诱导点击。]
* **修改建议:** [提供修改的思路,例如:应将标题修改为能够准确概括文章核心技术点、客观平实的表述。]
* **【修改后示例】:** [直接写出修改后的具体内容,例如:标题修改为:“一种提高数据查询效率的实用SQL优化技巧”]
* **(继续列出所有其他违规点...)**
**3. 严重违规警告 (如有):**
(仅当发现属于“二、涉及以下严重违规行为”中的项时填写此部分。如果没有,请填写“未发现需要立即封禁账号的严重违规行为。”)
* **警告:** 本文涉嫌 [描述严重的违规行为],触犯了规则 [引用规则编号]。此类行为将导致账号立即被封禁,必须彻底删除相关内容。
**[END_OF_REPORT_AND_START_OF_ARTICLE]**
### **全文整改后版本 (可以直接发布)**
**新标题:** [在此处填写修改后的最终标题]
**新正文:**
[在此处粘贴经过全面修改、排版清晰、内容合规的完整文章正文,请使用Markdown格式]
**[END_OF_ARTICLE]**
---
**# 待审核文章 (Article to Audit)**
\`\`\`text
${article}
\`\`\`
`;
}
auditButton.addEventListener('click', async () => {
const apiKey = apiKeyInput.value.trim();
const selectedModel = modelSelect.value;
const articleContent = articleTextarea.value.trim();
const rulesContent = rulesTextarea.value.trim();
if (!apiKey) {
alert('请输入你的 OpenRouter API Key。');
return;
}
if (!articleContent) {
alert('请输入需要审核的文章内容。');
return;
}
// UI state: loading
auditButton.disabled = true;
spinner.classList.remove('hidden');
suggestionsOutput.value = "正在请求AI审核,请稍候...";
modifiedOutput.value = "";
const finalPrompt = getMetaPrompt(rulesContent, articleContent);
try {
const response = await fetch("https://openrouter.ai/api/v1/chat/completions", {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json',
'HTTP-Referer': 'https://CSDNAuditTool.com', // Optional but recommended
'X-Title': 'CSDN Audit Tool' // Optional but recommended
},
body: JSON.stringify({
model: selectedModel,
messages: [
{ role: "user", content: finalPrompt }
]
})
});
if (!response.ok) {
const errorData = await response.json();
throw new Error(`API 请求失败: ${response.status} ${response.statusText} - ${errorData.error?.message || '未知错误'}`);
}
const data = await response.json();
const llmOutput = data.choices[0].message.content;
// Parse the output using the unique separators
const reportPart = llmOutput.split('[END_OF_REPORT_AND_START_OF_ARTICLE]')[0].replace('[START_OF_REPORT]', '').trim();
let articlePart = llmOutput.split('[END_OF_REPORT_AND_START_OF_ARTICLE]')[1] || '';
articlePart = articlePart.split('[END_OF_ARTICLE]')[0].replace('### Fully Rectified Article (Ready to Publish)', '').trim();
suggestionsOutput.value = reportPart;
modifiedOutput.value = articlePart;
} catch (error) {
suggestionsOutput.value = `审核出错:\n${error.message}\n\n请检查:\n1. API Key是否正确且有额度。\n2. 网络连接是否正常。\n3. OpenRouter服务或所选模型是否可用。`;
console.error(error);
} finally {
// UI state: idle
auditButton.disabled = false;
spinner.classList.add('hidden');
}
});
downloadButton.addEventListener('click', () => {
const content = modifiedOutput.value;
if (!content) {
alert('没有可供下载的内容。');
return;
}
const blob = new Blob([content], { type: 'text/markdown;charset=utf-8' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'revised_article.md';
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
URL.revokeObjectURL(url);
});
</script>
</body>
</html>
1363

被折叠的 条评论
为什么被折叠?



