mirror of
https://github.com/nagisa77/OpenIsle.git
synced 2026-08-21 10:27:15 +00:00
Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 40a233a66b | |||
| b8c0b1c6f8 | |||
| b37df67d31 | |||
| 90865b02c9 | |||
| f8c0335982 | |||
| 20b3d89a00 | |||
| ddae56d483 | |||
| 265fce4153 | |||
| cc0880e2c1 |
@@ -0,0 +1,30 @@
|
|||||||
|
name: Daily News Bot
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: "0 22 * * 0-4"
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
run-daily-news-bot:
|
||||||
|
environment: Bots
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: "20"
|
||||||
|
cache: "npm"
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: npm install --no-save @openai/agents tsx typescript
|
||||||
|
|
||||||
|
- name: Run daily news bot
|
||||||
|
env:
|
||||||
|
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
|
||||||
|
OPENISLE_TOKEN: ${{ secrets.OPENISLE_TOKEN }}
|
||||||
|
APIFY_API_TOKEN: ${{ secrets.APIFY_API_TOKEN }}
|
||||||
|
run: npx tsx bots/instance/daily_news_bot.ts
|
||||||
+5
-1
@@ -33,7 +33,7 @@ export abstract class BotFather {
|
|||||||
this.weatherMcp,
|
this.weatherMcp,
|
||||||
this.webSearchPreview
|
this.webSearchPreview
|
||||||
],
|
],
|
||||||
model: "gpt-4o",
|
model: this.getModel(),
|
||||||
modelSettings: {
|
modelSettings: {
|
||||||
temperature: 0.7,
|
temperature: 0.7,
|
||||||
topP: 1,
|
topP: 1,
|
||||||
@@ -120,6 +120,10 @@ export abstract class BotFather {
|
|||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected getModel(): string {
|
||||||
|
return "gpt-4o-mini";
|
||||||
|
}
|
||||||
|
|
||||||
protected createRunner(): Runner {
|
protected createRunner(): Runner {
|
||||||
return new Runner({
|
return new Runner({
|
||||||
workflowName: this.name,
|
workflowName: this.name,
|
||||||
|
|||||||
@@ -7,16 +7,19 @@ class DailyNewsBot extends BotFather {
|
|||||||
super("Daily News Bot");
|
super("Daily News Bot");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override getModel(): string {
|
||||||
|
return "gpt-4o";
|
||||||
|
}
|
||||||
|
|
||||||
protected override getAdditionalInstructions(): string[] {
|
protected override getAdditionalInstructions(): string[] {
|
||||||
return [
|
return [
|
||||||
"You are DailyNewsBot,专职在 OpenIsle 发布每日新闻速递。",
|
"You are DailyNewsBot,专职在 OpenIsle 发布每日新闻速递。",
|
||||||
"始终使用简体中文回复,并以结构化 Markdown 呈现内容。",
|
"始终使用简体中文回复,并以结构化 Markdown 呈现内容。",
|
||||||
"发布内容前务必完成资讯核实:分别通过 web_search 调研 CoinDesk 今日所有要闻、Reuters 今日重点新闻,以及全球 AI 领域的重大进展。",
|
"发布内容前务必完成资讯核实:分别通过 web_search 调研 CoinDesk 所有要闻、Reuters 重点国际新闻,以及全球 AI 领域的重大进展。",
|
||||||
"整合新闻时,将同源资讯合并,突出影响力、涉及主体与潜在影响,保持语句简洁。",
|
"整合新闻时,将同源资讯合并,突出影响力、涉及主体与潜在影响,保持语句简洁。",
|
||||||
"所有新闻要点都要附带来源链接,并在括号中标注来源站点名。",
|
"所有新闻要点都要附带来源链接,并在括号中标注来源站点名。",
|
||||||
"使用 weather_mcp_server 的 get_current_weather 获取北京、上海、广州、深圳的天气,并在正文中列表展示,格式为“城市:天气描述,最低温~最高温”。",
|
"使用 weather_mcp_server 的 get_current_weather 获取北京、上海、广州、深圳的天气,并在正文中列表展示",
|
||||||
"正文结尾补充一个行动建议或提醒,帮助读者快速把握重点。",
|
"正文结尾补充一个行动建议或提醒,帮助读者快速把握重点。",
|
||||||
"确保整篇帖子逻辑清晰:问候 > 新闻分区 > 天气列表 > 总结/提醒。",
|
|
||||||
"严禁发布超过一篇帖子,create_post 只调用一次。",
|
"严禁发布超过一篇帖子,create_post 只调用一次。",
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -29,8 +32,8 @@ class DailyNewsBot extends BotFather {
|
|||||||
const weekday = WEEKDAY_NAMES[now.getDay()];
|
const weekday = WEEKDAY_NAMES[now.getDay()];
|
||||||
const dateLabel = `${year}年${month}月${day}日 星期${weekday}`;
|
const dateLabel = `${year}年${month}月${day}日 星期${weekday}`;
|
||||||
const isoDate = `${year}-${month}-${day}`;
|
const isoDate = `${year}-${month}-${day}`;
|
||||||
const categoryId = Number(process.env.DAILY_NEWS_CATEGORY_ID ?? "1");
|
const categoryId = Number(process.env.DAILY_NEWS_CATEGORY_ID ?? "6");
|
||||||
const tagIdsEnv = process.env.DAILY_NEWS_TAG_IDS ?? "1";
|
const tagIdsEnv = process.env.DAILY_NEWS_TAG_IDS ?? "3,33";
|
||||||
const tagIds = tagIdsEnv
|
const tagIds = tagIdsEnv
|
||||||
.split(",")
|
.split(",")
|
||||||
.map((id) => Number(id.trim()))
|
.map((id) => Number(id.trim()))
|
||||||
@@ -41,16 +44,15 @@ class DailyNewsBot extends BotFather {
|
|||||||
return `
|
return `
|
||||||
请立即在 https://www.open-isle.com 使用 create_post 发布一篇名为「OpenIsle 每日新闻速递|${dateLabel}」的帖子,并遵循以下要求:
|
请立即在 https://www.open-isle.com 使用 create_post 发布一篇名为「OpenIsle 每日新闻速递|${dateLabel}」的帖子,并遵循以下要求:
|
||||||
1. 发布类型为 NORMAL,categoryId = ${categoryId},tagIds = ${tagIdsText}。
|
1. 发布类型为 NORMAL,categoryId = ${categoryId},tagIds = ${tagIdsText}。
|
||||||
2. 正文以简洁问候开头,注明今日日期(${dateLabel})及发布时间(07:00,GMT+8)。
|
2. 正文以简洁问候开头, 不用再重复标题
|
||||||
3. 使用 web_search 工具按以下顺序收集资讯,并在正文中以 Markdown 小节呈现:
|
3. 使用 web_search 工具按以下顺序收集资讯,并在正文中以 Markdown 小节呈现:
|
||||||
- 「全球区块链与加密」:汇总 CoinDesk 在 ${isoDate}(UTC+8 当日)发布的所有重点新闻,提炼 2-3 条核心结论。
|
- 「全球区块链与加密」:汇总 CoinDesk 所有重点新闻, 列出至少5条
|
||||||
- 「国际财经速览」:汇总 Reuters 当日重点头条,关注宏观经济、市场波动或政策变化。
|
- 「国际新闻速览」:汇总 Reuters 重点头条,关注宏观经济、市场波动或政策变化。列出至少5条
|
||||||
- 「AI 行业快讯」:检索全球 AI 领域的重要发布或事件(例如 OpenAI、Google、Meta、国内大模型厂商等)。
|
- 「AI 行业快讯」:检索全球 AI 领域的重要发布或事件(例如 OpenAI、Google、Meta、国内大模型厂商等)。列出至少5条
|
||||||
4. 每条新闻采用项目符号,先写结论再给出关键数字或细节,末尾添加来源超链接,格式示例:「**结论** —— 关键细节。(来源:[Reuters](URL))」。
|
4. 每条新闻采用项目符号,先写结论再给出关键数字或细节,末尾添加来源超链接,格式示例:「**结论** —— 关键细节。(来源:[Reuters](URL))」
|
||||||
5. 资讯整理完毕后,调用 weather_mcp_server.get_current_weather,列出北京、上海、广州、深圳今日天气,放置在「城市天气」小节下,每行以“城市:天气描述,最低温~最高温”格式呈现。
|
5. 资讯整理完毕后,调用 weather_mcp_server.get_current_weather,列出北京、上海、广州、深圳今日天气,放置在「城市天气」小节下, 本小节可加emoji。
|
||||||
6. 最后一节为「今日提醒」,给出 1-2 条与新闻或天气相关的行动建议。
|
6. 最后一节为「今日提醒」,给出 2-3 条与新闻或天气相关的行动建议。
|
||||||
7. 若在资讯搜集过程中发现相互矛盾的信息,须在正文中以「⚠️ 风险提示」说明原因及尚待确认的点。
|
7. 若在资讯搜集过程中发现相互矛盾的信息,须在正文中以「⚠️ 风险提示」说明原因及尚待确认的点。
|
||||||
8. 帖子整体保持在 400 字以内,避免冗长赘述。
|
|
||||||
9. 发布完成后,不要再次调用 create_post。
|
9. 发布完成后,不要再次调用 create_post。
|
||||||
`.trim();
|
`.trim();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user