feat: 首次推送到Gitea - 完整项目代码 + 安全加固 + 知识库
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
// =============================================================================
|
||||
// Topic Diversity Utilities
|
||||
// 共享工具:为所有 Bot 脚本提供多样化的内容生成模板和风格
|
||||
// =============================================================================
|
||||
|
||||
// 话题模板 – 避免话题标题千篇一律
|
||||
export const TOPIC_TEMPLATES = [
|
||||
"【真实体验】{tool_name}试用{n}天后的真实感受",
|
||||
"【对比评测】{tool_a} vs {tool_b}:到底谁更好用?",
|
||||
"【使用技巧】{tool_name}的{n}个隐藏功能你知道吗?",
|
||||
"【效率提升】用了{tool_name},我的工作效率提升了{n}%",
|
||||
"【避坑指南】{tool_name}常见的{n}个使用误区",
|
||||
"【学习心得】零基础{n}天掌握{tool_name}",
|
||||
"【行业思考】{category}领域AI工具的进化方向",
|
||||
"【故事分享】我是如何用{skill_type}完成一个不可能的任务的",
|
||||
"【趋势预测】{year}年{category}工具的发展趋势",
|
||||
"【问题交流】大家用{tool_name}遇到过这个问题吗?",
|
||||
];
|
||||
|
||||
// 回复风格类型 – 确保回复语调多样化
|
||||
export const COMMENT_STYLES = [
|
||||
"agree_expert", // 资深用户赞同
|
||||
"question_detail", // 追问细节
|
||||
"share_experience", // 分享自己经验
|
||||
"constructive_critique",// 建设性批评
|
||||
"appreciation", // 感谢分享
|
||||
"alternative_suggest", // 推荐替代方案
|
||||
];
|
||||
|
||||
// 回复风格对应的中文提示(注入 prompt 指导 AI 生成特定风格)
|
||||
export const COMMENT_STYLE_HINTS = {
|
||||
agree_expert: "用资深用户的身份,赞同前面某个具体观点,并补充你自己的实战数据或行业经验来佐证",
|
||||
question_detail: "针对前面内容的某个具体细节,提出一个有深度的问题,引导对方或其他人进一步展开",
|
||||
share_experience: "分享一个你亲身经历的相关案例或故事,让讨论更接地气",
|
||||
constructive_critique: "提出一个不同的视角或潜在的盲点,语气要理性、建设性,不是抬杠",
|
||||
appreciation: "表达对前面讨论的欣赏,指出哪些观点对你有启发,然后自然地延伸一个相关话题",
|
||||
alternative_suggest: "推荐一个实用的替代方案或工具,说明它的优缺点和适用场景",
|
||||
};
|
||||
|
||||
// 轮转索引 – 确保话题模板不会短期内重复
|
||||
let templateIndex = 0;
|
||||
export function getNextTemplate() {
|
||||
const t = TOPIC_TEMPLATES[templateIndex % TOPIC_TEMPLATES.length];
|
||||
templateIndex++;
|
||||
return t;
|
||||
}
|
||||
|
||||
// 重置轮转索引(用于测试或手动干预)
|
||||
export function resetTemplateIndex() {
|
||||
templateIndex = 0;
|
||||
}
|
||||
|
||||
// 选择回复风格 – 避免与最近使用过的风格重复
|
||||
export function pickCommentStyle(recentStyles = []) {
|
||||
const available = COMMENT_STYLES.filter(s => !recentStyles.includes(s));
|
||||
if (available.length === 0) {
|
||||
// 所有风格都在最近使用过,随机选一个
|
||||
return COMMENT_STYLES[Math.floor(Math.random() * COMMENT_STYLES.length)];
|
||||
}
|
||||
return available[Math.floor(Math.random() * available.length)];
|
||||
}
|
||||
|
||||
// 获取风格的中文提示
|
||||
export function getStyleHint(style) {
|
||||
return COMMENT_STYLE_HINTS[style] || COMMENT_STYLE_HINTS.share_experience;
|
||||
}
|
||||
|
||||
// 话题内容类型 – 为发帖内容提供多样化结构
|
||||
export const TOPIC_CONTENT_PATTERNS = [
|
||||
"story_lead", // 以个人故事开头
|
||||
"question_kickoff", // 以一个尖锐问题开头
|
||||
"data_insight", // 以数据洞察开头
|
||||
"controversial_take",// 以争议性观点开头
|
||||
"trend_notice", // 以最近趋势变化开头
|
||||
"personal_struggle", // 以个人困惑/难题开头
|
||||
];
|
||||
|
||||
let patternIndex = 0;
|
||||
export function getNextContentPattern() {
|
||||
const p = TOPIC_CONTENT_PATTERNS[patternIndex % TOPIC_CONTENT_PATTERNS.length];
|
||||
patternIndex++;
|
||||
return p;
|
||||
}
|
||||
Reference in New Issue
Block a user