From 9cfc2b6bbf1887fb74ff3c3fb24624250fae1b74 Mon Sep 17 00:00:00 2001 From: admin Date: Sat, 18 Apr 2026 13:44:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E4=B8=80=E4=BA=9B=E7=AC=94?= =?UTF-8?q?=E8=AE=B0=EF=BC=8C=E5=A2=9E=E5=8A=A0rsshub=20youtube=E8=AE=A2?= =?UTF-8?q?=E9=98=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Hermes/云+端大模型架构-2026-04-17.md | 41 --------- .../yunjiang/2026-03-20-Obsidian路径更新.md | 27 ------ openclaw/yunjiang/memory/2026-03-21.md | 60 ------------- openclaw/yunjiang/memory/2026-03-22.md | 89 ------------------- openclaw/yunjiang/memory/2026-03-23.md | 59 ------------ openclaw/yunjiang/memory/2026-03-29.md | 87 ------------------ openclaw/yunjiang/memory/2026-04-08.md | 87 ------------------ ...笔记:本地部署 RSSHub 并获取 YouTube 订阅.md | 75 ++++++++++++++++ 8 files changed, 75 insertions(+), 450 deletions(-) delete mode 100644 Hermes/云+端大模型架构-2026-04-17.md delete mode 100644 openclaw/yunjiang/2026-03-20-Obsidian路径更新.md delete mode 100644 openclaw/yunjiang/memory/2026-03-21.md delete mode 100644 openclaw/yunjiang/memory/2026-03-22.md delete mode 100644 openclaw/yunjiang/memory/2026-03-23.md delete mode 100644 openclaw/yunjiang/memory/2026-03-29.md delete mode 100644 openclaw/yunjiang/memory/2026-04-08.md create mode 100644 raw/Home Office/实战笔记:本地部署 RSSHub 并获取 YouTube 订阅.md diff --git a/Hermes/云+端大模型架构-2026-04-17.md b/Hermes/云+端大模型架构-2026-04-17.md deleted file mode 100644 index 63510e6d..00000000 --- a/Hermes/云+端大模型架构-2026-04-17.md +++ /dev/null @@ -1,41 +0,0 @@ -# 别再拿 Opus 跑 Hermes 工作流了!一人公司云+端大模型架构 - -> 来源:Telegram频道「Hermes爱马仕&🦞OpenClaw小龙虾」 -> 作者:Claw小龙虾 @openclaw1024 -> 日期:2026-04-17 - -核心逻辑:**体力活留本地,脑力活上云端** - ---- - -## 硬件底座 - -**Mac mini M4 (32GB)** -统一内存神器。后台常驻挂两个量化小模型,剩下内存依然足够日常开发,性价比拉满。 - ---- - -## 三核模型矩阵 - -| 角色 | 模型 | 职责 | -|------|------|------| -| 前置路由 | Hermes 3 8B | 无情的API调度器。专做意图识别和吐结构化JSON去调外部工具。毫秒响应,不废token | -| 本地主力 | Qwen3 14B | 干80%的脏活。日常代码脚手架、RAG数据清洗、文案初稿量产全包。无限重试,边际成本为零 | -| 云端大脑 | Claude Opus | 零琐事消耗。只吃本地喂过来的高密度半成品,做极其复杂的架构推演和最终的个人Vibe注入。把最贵的API额度全花在刀刃上 | - ---- - -## 调度与编排 - -- **写代码**:Codex CLI 底层指向本地 Qwen,开多分支跑终端自动化 -- **业务流**:n8n 或 Dify 把 Hermes → Qwen → Opus 串联起来,跑无人值守的闭环 - ---- - -## 结论 - -与其去卷一两个神级 Prompt,不如搭一套低成本、高流转的 Pipeline。一人公司的终局,就是把算力杠杆用到极致。 - -## 标签 - -#AI架构 #一人公司 #LLM #云端协同 #效率优化 diff --git a/openclaw/yunjiang/2026-03-20-Obsidian路径更新.md b/openclaw/yunjiang/2026-03-20-Obsidian路径更新.md deleted file mode 100644 index a8e9d904..00000000 --- a/openclaw/yunjiang/2026-03-20-Obsidian路径更新.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: 2026-03-20 Obsidian 路径更新 -source: -author: shenwei -published: -created: -description: -tags: [] ---- - -# 2026-03-20 Obsidian 路径更新 - -## 事件 - -知识库路径更新 - -## 新路径 - -- **知识库**: `/Users/weishen/Library/Mobile Documents/iCloud~md~obsidian/Documents/weishen/openclaw/knowledgebase` -- **个人笔记**: `/Users/weishen/Library/Mobile Documents/iCloud~md~obsidian/Documents/weishen/openclaw/yunjiang` - -## 备注 - -通过 iCloud Mobile Documents 同步,路径从本地 Obsidian 文件夹改为 iCloud 云端路径 - ---- -*Source: 云匠记忆更新* diff --git a/openclaw/yunjiang/memory/2026-03-21.md b/openclaw/yunjiang/memory/2026-03-21.md deleted file mode 100644 index 5852ad42..00000000 --- a/openclaw/yunjiang/memory/2026-03-21.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: 2026-03-21 工作日志 -source: -author: shenwei -published: -created: -description: -tags: [] ---- - -# 2026-03-21 工作日志 - -## 完成的任务 - -### 1. OpenCode 权限问题修复 -- 问题:OpenCode 无法读取/写入项目文件,权限被自动拒绝 -- 解决:修改 `~/.config/opencode/opencode.json`,添加正确的 permission 配置: - ```json - "permission": { - "read": "allow", - "write": "allow", - "edit": "allow", - "bash": "allow" - } - ``` - -### 2. n8n 环境变量配置优化 -- 路径:`~/Git/smart-trip-quote/` -- 将 n8n 相关配置提取到 `.env` 文件: - - `N8N_HOST=n8n.ishenwei.online` - - `N8N_PROTOCOL=https` - - `WEBHOOK_URL=http://127.0.0.1:62000/` - - `NODE_ENV=production` - - `N8N_SECURE_COOKIE=false` -- 修改 `docker-compose.yml` 使用环境变量引用 - -### 3. Docker 网络配置 -- 在 `docker-compose.yml` 的 web 服务中添加: - - `N8N_ITINERARY_OPTIMIZATION_WEBHOOK_URL` - - `N8N_API_KEY` -- 将 webhook URL 改为 Docker 内部地址:`http://stq-n8n:5678` - -### 4. 日期格式兼容问题修复 -- 文件:`apps/api/serializers/webhook_serializers.py` -- 添加 `FlexibleDateField` 和 `FlexibleDateTimeField` 类 -- 支持更多日期格式:%Y-%m-%d, %Y/%m/%d, ISO8601 等 - -### 5. 行程优化 webhook 调试 -- 在 `apps/admin/views.py` 添加调试日志 -- 确认 webhook 调用成功 - -## 知识点 - -- OpenCode 配置路径:`~/.config/opencode/opencode.json` -- Docker 内部网络:容器间通过服务名通信 -- Django REST framework 序列化器:可自定义日期字段处理多种格式 - -## 待处理 - -- [ ] 清理调试日志 diff --git a/openclaw/yunjiang/memory/2026-03-22.md b/openclaw/yunjiang/memory/2026-03-22.md deleted file mode 100644 index 2acbb395..00000000 --- a/openclaw/yunjiang/memory/2026-03-22.md +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: 2026-03-22 开发任务汇总 -source: -author: shenwei -published: -created: -description: -tags: [] ---- - -# 2026-03-22 开发任务汇总 - -## 完成的功能 - -### 1. EasyMDE Markdown 编辑器集成 -- 在 Django Admin 的行程详情页集成 EasyMDE 编辑器 -- 应用于 `description` 和 `itinerary_quote` 字段 -- 默认以预览模式显示 - -### 2. 行程报价 JSON 数据 -- 添加 `itinerary_quote_json_data` 字段 -- 包含 itinerary 基本信息、目的地、 travelers、attractions/hotels/restaurants 的 pricing_strategy -- 调用行程报价 webhook 时自动更新并发送 - -### 3. 隐藏价格字段 -- 景点详情页:隐藏门票价格、货币、票种、预定网站、是否要预定 -- 酒店详情页:隐藏价格范围、货币、最低/最高价格 -- 餐厅详情页:隐藏人均价格 - -### 4. 行程预览页面优化 -- 使用 marked.js 在服务端解析 Markdown -- PDF 导出时正确显示 Markdown 内容 -- 添加分页符:行程说明、每日行程、行程报价前 - -### 5. Word 导出优化 -- 修复日期占位符 -- Markdown 转纯文本 - -### 6. 每日行程内联列表优化 -- 合并时间显示:08:00~11:00 -- 调整列宽:操作/第几天列缩小,活动标题/描述列加宽 -- 酒店/餐厅显示名称+链接 -- 删除后刷新父窗口 - -### 7. 行程日期自动调整 -- 当 start_date 变化时,自动调整: - - 结束日期 (end_date) - - 目的地日期 (arrival_date, departure_date) - - 每日行程日期 (schedule_date) - -### 8. Requirement 模型更新 -- 添加 `district` 字段(区域和商圈) -- 添加 `destination_cities` 等 JSON 字段的通用序列化方法 - -### 9. 通用 JSON 序列化方法 -- `json_array_to_string()` - JSON数组转逗号分隔字符串 -- `string_to_json_array()` - 逗号分隔字符串转JSON数组 -- 支持字段:destination_cities, district, preference_tags, must_visit_spots, avoid_activities - -### 10. 代码提交 -- 多次提交到 GitHub,包含所有功能更新 - -## 修改的文件 -- apps/admin/itinerary.py -- apps/admin/requirement.py -- apps/models/itinerary.py -- apps/models/requirement.py -- apps/models/hotel.py -- apps/models/restaurant.py -- apps/api/views/export_views.py -- apps/api/services/webhook_services.py -- templates/admin/preview_itinerary.html -- static/easymde/easymde.init.js -- static/admin/css/custom_inline.css -- apps/admin_ext/utils.py - -## 经验教训 -- 通过 OpenCode 执行代码修改是铁律,必须遵守 -- Django Admin 集成第三方 JS 库需要添加 Media 配置 -- ForeignKey 访问实际 ID 需要用 `_id` 后缀 -- JSON 序列化需要注意格式(单引号 vs 双引号) - -## 最新调试记录 (18:57-19:10) -- 问题:Requirement 保存时报"请更正以下错误" -- 排查:添加模块级 print 日志跟踪 Django 表单加载流程 -- 发现:日志显示 `Requirement.full_clean()` 被调用时抛出 `NameError: name 'sys' is not defined` -- 根因:`apps/models/requirement.py` 中添加 `full_clean()` 重写时未导入 `sys` -- 修复:添加 `import sys` -- 结果:POST 返回 200,所有验证通过,问题解决! diff --git a/openclaw/yunjiang/memory/2026-03-23.md b/openclaw/yunjiang/memory/2026-03-23.md deleted file mode 100644 index c480135e..00000000 --- a/openclaw/yunjiang/memory/2026-03-23.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: 2026-03-23 工作日志 -source: -author: shenwei -published: -created: -description: -tags: [] ---- - -# 2026-03-23 工作日志 - -## 日期:2026-03-23 -## 星期:日 - -## 今日工作 - -### 1. 代码提交流程规范 -- **问题**: 习惯性自动 commit/push,违反用户审核流程 -- **解决**: 添加铁律 - 未经用户确认禁止 commit 和 push -- **重要**: 两次违反规则后改正 - -### 2. 联系人字段保存(需求分析) -- 修改 Requirement 模型和序列化器,添加 contact_email 字段 -- 修改 StructuredDataSerializer、RequirementWebhookSerializer 添加 contact_name/phone/email -- 确保 n8n 返回的联系人数据正确保存到数据库 - -### 3. 行程优化 webhook -- 尝试添加轮询逻辑(后回滚,方案不满意) -- 优化 admin/views.py 返回 webhook callback 的 message -- 修改 settings.py 添加 apps.admin logger - -### 4. 代码重构 -- 将 N8nIntegrationService.send_to_n8n 移到 RequirementService -- 超时配置改为读取 settings.WEBHOOK_TIMEOUT - -### 5. Bug 修复 -- optimize_itinerary 和 quote_itinerary 的 timeout 默认值从 30 改为 120 -- 统一使用 settings 配置 - -### 6. 模板重构 -- 将 requirement.py 中的 JS 代码提取到独立模板 templates/admin/requirement_change_form.html - ---- - -## Git 提交记录 - -| Commit | 描述 | -|--------|------| -| f12b7d6 | fix(admin): 修复 webhook timeout 默认值统一为 120秒 | -| 3be5ef4 | refactor(admin): 重构需求详情页按钮逻辑 | - ---- - -## 经验教训 - -1. **Git 流程**: 必须等用户审核后再 commit/push -2. **N8n 数据流**: 确认数据来源是顶层还是 structured_data -3. **Django Settings**: 使用 getattr 读取配置,设置合理的默认值 diff --git a/openclaw/yunjiang/memory/2026-03-29.md b/openclaw/yunjiang/memory/2026-03-29.md deleted file mode 100644 index 377a53c3..00000000 --- a/openclaw/yunjiang/memory/2026-03-29.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: 2026-03-29 工作日志 -source: -author: shenwei -published: -created: -description: -tags: [] ---- - -# 2026-03-29 工作日志 - -## 待办 - -- [ ] ... - ---- - -## 完成事项 - -### 1. N8N 内容转化流水线 - 读取设计方案 -- 读取了 `yunce/n8n-content-pipeline-workflow.md` -- 了解了完整的工作流设计(Webhook → 读取笔记 → AI翻译 → 配图 → 写回 → 回调) -- 制定了实施计划(分三阶段:准备、创建、测试) - -### 2. N8N 工具指南编写 -- 读取了 N8N 技能 SKILL.md -- 获取了 N8N 配置(Base URL: https://n8n.ishenwei.online) -- 编写了 N8N 工具指南并添加到 TOOLS.md - -### 3. 文件编辑问题修复 -- 发现 edit 工具依赖精确文本匹配的陷阱 -- 改用 exec + echo 追加内容解决问题 -- 已记录到 MEMORY.md - -### 4. N8N 内容转化流水线实施 ✅ -- **问题发现**:n8n 运行在 Docker 容器中,无法直接访问 Mac mini 文件系统 -- **解决方案**: - - 在 Docker Compose 中添加 volume 映射:`./n8n_data/files:/home/node/.n8n-files` - - OpenClaw 先复制文件到 N8N 可访问目录,再触发工作流 -- **工作流版本**: - - v1/v2/v3: 失败(各种配置问题) - - v4: 成功!使用 DeepSeek API + Webhook 测试模式 -- **最终测试**:成功生成多平台内容(公众号、X/Twitter、视频脚本) - -### 5. Docker 路径更新 -- 更新 TOOLS.md 中的 Docker 命令路径 -- Mac mini Docker 路径:`/Applications/Docker.app/Contents/Resources/bin/docker` - -### 6. Telegram 测试工作流 -- 创建并测试 Telegram 通知工作流 -- 成功实现 OpenClaw → N8N Webhook → Telegram 通知的闭环 - ---- - -## 今日经验教训 - -### 1. N8N + Docker 文件访问问题 -- n8n 在 Docker 中运行时,容器内无法直接访问宿主机的文件系统 -- **解决方案**:通过 volume 映射,让 N8N 容器可以访问特定目录 -- **配置**:`./n8n_data/files:/home/node/.n8n-files` - -### 2. N8N 工作流调试技巧 -- 遇到问题先创建最简单的测试工作流,逐步排查 -- 测试 webhook 用 test 模式(/webhook-test/)比生产模式(/webhook/)更可靠 -- 查看执行记录和容器日志是排查问题的关键 - -### 3. 工作流版本迭代经验 -- v1: 直接创建,凭证问题失败 -- v2: 简化流程,但 AI 节点配置问题 -- v3: DeepSeek API 凭证问题 -- v4: 使用 langchain DeepSeek 节点 + test webhook 模式成功 - ---- - -## 待办 - -- [ ] 云测更新需求文档后,设计 V5 版本 -- [ ] V5 在 v4 基础上修改,不从头开始 - ---- - -## 明日计划 - -1. 读取云测更新的需求文档 -2. 基于 v4 技术基础设计 V5 版本 -3. 继续完善内容转化流水线 diff --git a/openclaw/yunjiang/memory/2026-04-08.md b/openclaw/yunjiang/memory/2026-04-08.md deleted file mode 100644 index 7e18ef05..00000000 --- a/openclaw/yunjiang/memory/2026-04-08.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: 2026-04-08 Daily Memory -source: -author: shenwei -published: -created: -description: -tags: [] ---- - -# 2026-04-08 Daily Memory - -## Session Start - -- New session started 2026-04-08 9:12 PM (GMT+8) -- 模型: minimax/MiniMax-M2.7 - -## 今日工作 - -### agent-base 项目(Ubuntu2) -完成以下工作: - -1. **intcomma 模板错误修复** - - 根因:磁盘源文件有 `{% load humanize %}` 但 Docker 镜像构建用了缓存旧层 - - 修复:通过 `docker commit` 将运行中容器的修正持久化到 `agent-base-web:latest` 镜像 - - 修复后重启容器:`docker compose restart` - -2. **admin 密码重置** - - Django shell 重置:`user.set_password('admin123'); user.save()` - -3. **全页面遍历测试脚本** - - 路径:`/home/shenwei/docker/agent-base/scripts/test_all_pages.py` - - 本地副本:`~/.openclaw/workspace-agent-xingjiang/scripts/test_all_pages.py` - - 使用 agent-browser 进行浏览器自动化 - - 测试结果:9/9 全部通过 - - 覆盖页面:登录页、Admin首页、Session列表、Message列表、ToolCall列表、日报列表、日报详情(2个日期)、API端点 - -### 测试脚本关键发现 -- Django admin 中文界面:用户名输入框 name="用户名:",密码框 name="密码:",按钮 name="登录" -- agent-browser `fill` 命令可以直接填入中文 name 的元素 -- `cleanup_all()` 会清除会话状态,`ensure_logged_in()` 会自动检测并重新登录 -- `check_page_errors()` 应只检测 role=alert/alertdialog,避免将普通内容误报为错误 - -## 待办事项 - -1. **Ubuntu2 景点数据导入需求确认** - - smart-trip-quote 在 Ubuntu2 的部署情况待确认 - - 是否需要在 Ubuntu2 也执行景点数据导入 - -2. **云测 v5 工作流设计跟进** - - 云测更新需求文档后,基于 v4 设计 V5 版本 - - 上次跟进:2026-03-29,需求文档状态待确认 - -3. **景点数据生产服务器同步方案** - - 58条景区数据目前存在于 Mac mini + Ubuntu1 - - 生产环境是否需要同步 - -## Learnings - -### agent-browser 关键发现 -- `agent-browser --session ` 使用命名会话,会话间状态不共享 -- `agent-browser snapshot -i --json` 获取可交互元素快照 -- `agent-browser fill ` 填入表单 -- `agent-browser click ` 点击元素 -- `agent-browser state save ` 保存会话状态到文件 -- `agent-browser state load ` 从文件恢复会话(需先 open 任意页面) -- `agent-browser get url --json` 获取当前 URL -- `agent-browser get title --json` 获取页面标题 -- `agent-browser screenshot ` 截图 -- `agent-browser close` 关闭当前会话 -- `agent-browser close --all` 关闭所有会话 -- Django admin 中文登录页:用户名/密码/登录按钮的 name 属性是中文 - -### agent-base 项目状态(2026-04-08) -- 应用运行:http://192.168.3.45:8765 -- admin 登录:admin / admin123 -- 数据库:PostgreSQL(TimescaleDB),容器名 `agentbase-db-1` -- Web 容器名:`agentbase-web` -- 镜像已用 `docker commit` 修复(包含 `{% load humanize %}`) - -## Pattern 验证 - -- holiday-silence-cycle 已完整验证: - - 节前赶工期:4/02 完成58条数据导入 ✓ - - 假期静默:4/04~4/06 完全静默 ✓ - - 节后恢复预期:4/07 用户未出现 ✓ -- Pattern-Key: holiday-silence-cycle(已多次验证) diff --git a/raw/Home Office/实战笔记:本地部署 RSSHub 并获取 YouTube 订阅.md b/raw/Home Office/实战笔记:本地部署 RSSHub 并获取 YouTube 订阅.md new file mode 100644 index 00000000..1b88b46c --- /dev/null +++ b/raw/Home Office/实战笔记:本地部署 RSSHub 并获取 YouTube 订阅.md @@ -0,0 +1,75 @@ + +#rsshub #youtube +## 实战笔记:本地部署 RSSHub 并获取 YouTube 订阅 + +### 一、 核心架构 + +- **宿主机**:Ubuntu Server (`192.168.3.45`)。 +- **部署工具**:Docker Compose。 +- **关键组件**:需要配置 `YOUTUBE_KEY` 避开网页爬虫限制,并通过 `PROXY_URL` 实现容器内科学上网。 +--- + +### 二、 核心步骤:申请 YouTube Data API Key + +这是解决 YouTube 订阅最稳定的方案,每月有足够的免费额度供个人使用。 + +1. **创建项目**: + - 访问 [Google Cloud Console](https://console.cloud.google.com/)。 + - 点击顶部项目选择框,选择 **"新建项目" (New Project)**,命名为 `My-RSSHub`。 +2. **启用 API**: + - 在左侧导航栏选择 **"API 和服务" > "库" (Library)**。 + - 搜索 `YouTube Data API v3`,点击进入并点击 **"启用" (Enable)**。 +3. **生成凭据 (Key)**: + - 回到 **"API 和服务" > "凭据" (Credentials)** 页面。 + - 点击 **"+ 创建凭据" > "API 密钥" (API Key)**。 + - 系统会弹出一个字符串(如 `AIzaSy...`),这就是你的 `YOUTUBE_KEY`,请立即复制保存。 +4. **(可选)设置限制**: + - 为了安全,建议点击该 Key 进行编辑,在 "API 限制" 中选择 "限制密钥",并勾选 `YouTube Data API v3`。这样即使 Key 泄露,也只能用于 YouTube 抓取。 + + +--- + +### 三、 部署与配置 + +#### 1. 编辑 `docker-compose.yml` +在你的 Ubuntu 宿主机上,确保环境变量包含以下内容: +YAML + +``` +services: + rsshub: + image: diygod/rsshub + network_mode: host + environment: + - YOUTUBE_KEY=AIzaSyDWi_y8m2zJI8G-cOl4A8TWPBb9o2m_geU + - PORT=1200 + - HTTP_PROXY=http://127.0.0.1:10808 + - HTTPS_PROXY=http://127.0.0.1:10808 + - NO_PROXY=localhost,127.0.0.1 + volumes: + - /etc/ssl/certs/ca-certificates.crt:/etc/ssl/certs/ca-certificates.crt:ro + restart: unless-stopped +``` + +#### 2. 解决防火墙问题 + +如果局域网仍无法访问 `192.168.3.45:1200`,请在 Ubuntu 上运行: +`sudo ufw allow 1200/tcp` + +--- +### 四、 订阅转化与自动化思路 + +- **URL 转换格式**: + - **频道**:`http://192.168.3.45:1200/youtube/channel/频道ID` + - **用户**:`http://192.168.3.45:1200/youtube/user/用户名` +--- + +### 五、 验证测试 + +配置完成后,重启容器:`docker-compose up -d`。 + +访问:`http://192.168.3.45:1200/youtube/channel/UC4JX40jDee_tINbkjycV4Sg`。 + +如果页面能正常显示 XML 列表且没有 `fetch failed` 错误,说明配置成功。 + +这个 API 申请流程通常几分钟就能搞定。你在 Google Cloud 控制台操作时,如果有哪个菜单找不到,随时告诉我。 \ No newline at end of file