7 Commits

Author SHA1 Message Date
1c6158f07b feat: add new post 2026-02-05 00:07:38 +08:00
8e0922f86f feat: add new posts 2025-12-22 01:00:30 +08:00
8f0cb1cf28 feat: update posts 2025-12-06 11:17:26 +08:00
github-actions[bot]
03be85005c chore: lint text and auto correct 2025-09-18 18:36:50 +08:00
github-actions[bot]
4373e3ed64 Change img CDN URL 2025-09-18 18:36:16 +08:00
93f0c2110b fix: js asset cdn not working, using new cdn provider 2025-09-17 23:13:34 +08:00
9e72f30ff4 feat: new post 2025-09-17 23:02:03 +08:00
7 changed files with 491 additions and 8 deletions

View File

@@ -0,0 +1,128 @@
---
title: LLM Agent is All You Need - 当我用大模型助手来指导我完成 MVP 产品 - 「Colin's Weekend Project」
date: 2025-09-14
description: 我个人喜欢挑一个周末在一个很短很专注的时间内,捣鼓点小玩意。这个栏目用来记录我的这些 idea、作品、创作过程以及吐槽。今天来挑战一下在大模型的指导下完成一个最小可行产品 (MVP)
categories:
- Weekend Project
tags:
- 技术
- JAMStack
- LLM
- AI
---
> **「Colin's Weekend Project」**
> 我个人喜欢挑一个周末在一个很短很专注的时间内,捣鼓点小玩意。这个栏目用来记录我的这些 idea、作品、创作过程以及吐槽
今天来挑战一下,在大模型的指导下,完成一个最小可行产品 (MVP)
## idea
如果单纯是开发一个完整的 web 程序 or 移动端程序,其实没啥意思。我之前已经搞过很多,更别提日常在公司里面就是在开发各种功能。今天我打算以一个非专业人士的视角,探究一下:
- 当下各种 AI 助手已经百花齐放,飞入寻常百姓家。但是当下的 AI 在真实世界的任务中,究竟能做到什么地步
- 如果作为一名非专业人士,究竟能不能借助这些 AI 工具做出一个可用的产品
- 如果真正要做一个面向 C 端的产品,把流程 Run 起来持续下去,需要考虑哪些因素
## 如果一切都从 LLM 开始...
我需要代入一个非专业开发人员的视角,来进行这次的项目。首先项目启动的第一个问题:在没有任何产品经理的知识,不懂得产品开发流程的小白的情况下,我需要如何开始?
在没有 LLM 以前,或许我需要先各种查阅资料学习,或者各种摇人让懂行的朋友进行指导。但是现在,一切都不一样了:随便一个 LLM 都可以帮我快速入门
一开始,我是打算接住 LLM 让我快速了解产品相关的知识。但是突然觉得,既然都用 AI 了,为什么还在遵循原有的路径,一步步自己学习、理解然后教 AI 做事呢换个思路我只要提供需求AI 来拆解任务。
于是
![image|476x415](https://blog-1301127393.file.myqcloud.com/BlogImgs/202509172249632.png)
![image-1|700x472](https://blog-1301127393.file.myqcloud.com/BlogImgs/202509172249633.png)
![image-2|700x472](https://blog-1301127393.file.myqcloud.com/BlogImgs/202509172249634.png)
利用 AI 生成一套提示词,来指导我如果分析我的需求、拆解任务
不得不说,对于这些跨领域的知识,能有一个不厌其烦的 AI 助手来循序渐进地跟你交流、帮你分析,效果非常好。人类可能还真不好干这个活。
## 「AI 教我做产品」
经过跟这个「MVP 导师」的 LLM Agent 反复沟通,确定了产品的主要构想和核心事项。以下是摘录的一部分
```markdown
#### MVP 概要3句话
- **为谁**2030 岁、周末感到无聊且有意愿尝试新事物的年轻人。
- **解决什么痛点**:不清楚该尝试哪些活动、如何快速入门、活动是否适合自己、以及能获得什么收益。
- **提供的核心功能**:活动列表页面 → 点击感兴趣的活动 → 展示入门门槛与材料推荐(入门材料按钮)并埋点上报。
```
```markdown
## MVP 核心功能:
1. **活动列表**:集中展示多种可入门活动(绘画、球类、手工等)。
2. **入门详情**:点击任意活动 → 展示入门门槛、必备材料、推荐教程链接。
3. **埋点追踪**:记录“点击 → ≥1min 外部阅读 → 回站”行为,用于验证假设。
```
这里印象深刻的是MVP 导师让我先确保用户痛点一定要是真实的在初期没有论证的情况下MVP 的意义就在于基于一个假设 (假设用户的痛点是 xxx), 我们要围绕这个痛点先开发出 1-2 个核心功能,然后通过用户数据分析,来验证我们关于用户痛点的假设是否成立。如果不成立说明是伪需求,也就没有继续投入的必要了。
这一点还是让我挺惊喜的,因为大部分人有个 idea 想做 xx 产品,大部分都是脑门一热,想要有 xxx 功能但是其实根本的需求并不是这个。花了很多精力搞出来的功能其实是伪需求。而 AI 导师专业水准还是挺在线的,能够在一开始就识别这个风险
## Vibe Coding
接下来就是要进入开发的部分了。我选择的 AI 代码工具是字节的 Trae 海外版,不用验证手机号而且可以使用 Google Gemini、OpenAI GPT-4o、Anthropic Claude 4 等高级模型。
首先让 AI 根据产品需求文档、拆解任务文档,确定了技术方案。不过这里我为了效率简化了下&注入了一些自己的私房调料,最终使用的方案为:
- astro + vue3 + tailwind css 来构建 web 站点
- directus cms 作为后端,省去编写后端和对接数据库的麻烦
- vercel 快速部署
这部分没啥好说的,简单列几个吐槽的点吧:
- astro 配置 tailwindcss, 换了一圈大模型没一个正确的。应该是跟近期大版本更新有关系。最后还是我手动跟着 astro 官方的文档搞定的
- trae 高级模型试用额度很低,没写几个功能就超限了开始排队,动不动前面几百号人基本没法用
- 现阶段 AI IDE 基本都是基于 vs code 改的。所以 vscode 的缺点也都一并继承了过来,很多语言的插件需要额外手动安装、各种变量跳转用不了、各种奇怪的波浪线报错又没法快速修正
最后简要看下最终的成果吧
![image-3](https://blog-1301127393.file.myqcloud.com/BlogImgs/202509172249635.png)
![image-4](https://blog-1301127393.file.myqcloud.com/BlogImgs/202509172249636.png)
后台数据:
![image-5](https://blog-1301127393.file.myqcloud.com/BlogImgs/202509172249637.png)
## 埋点上报与用户行为分析
之前做的都是玩具项目和公司内部平台,没怎么接触过 C 端用户行为分析。这块确实还是个挺陌生的领域。不过好在我们有万能的 AI. 在经过埋点需求分析、技术方案对比、任务拆解之后,最后采用了 Umami 平台来进行上报,并简单配置了下指标用于计算用户停留,辅助验证我们关于用户痛点的假设
![image-6|0x0](https://blog-1301127393.file.myqcloud.com/BlogImgs/202509172249639.png)
跟 MVP 导师沟通的时候,确定了验证假设的方式为:衡量用户是否点击「查看详情」按钮
- 用户点击并在外部阅读 ≥1 分钟后回站
- 成功阈值25% 的访问者完成“点击 → ≥1min 回站
为了方便统计,借助 umaimi 的统计功能快速实现,我只需要统计有多少比例的用户至少点击了一次「了解详情」. 具体到代码实现上,就是在「点击详情」按钮添加一个上报,上报内容包括用户的 session id, 后面在 umaimi 统计一段时间内,按钮点击事件里面,有多少独立的 session id 处以总的 uv 就可以。
![image-7](https://blog-1301127393.file.myqcloud.com/BlogImgs/202509172249640.png)
## 投放
众所周知,天朝桌面端 web 用户已经约等于 0 了技术博客都很少人看更别提这种泛娱乐向的内容。MVP 导师提供的方案,也是路线正确,但是 web 端用户数据反馈验证的路子基本没用。不过这个 web 页面我也不指望能成为流量主力,最多算个 wiki.
要想真的有人看,收获真实用户反馈,还是需要到各种新媒体平台去投放的。然后再收集数据进行分析,不过这个工作量就是另外一回事了。运营起来还是需要挺多时间精力的。
尝试做了几个图投放到小红书,放几个示例图
![image-8](https://blog-1301127393.file.myqcloud.com/BlogImgs/202509172249641.png)
用的搞定设计的模版调整了下,插图是用 Gemini, 效果还可以,能很好地遵循用户指令,不过美学方面跟 MidJourney 那些还是差了一截,毕竟人家专攻的方向。提示词里面限制好风格的话出图效果还是可以的,这里后续如果有必要的话,其实也可以 AI 批量生产插图。
不过小红书账号冷启动,反响平平。这里后续有时间再研究吧
## The End

View File

@@ -0,0 +1,278 @@
---
title: OpenClaw虽好, 搭配沙箱才安心 - 使用Lume构建mac虚拟环境
date: 2026-02-04
description: OpenClaw 这种应用最吸引人、最方便的地方在于 ta 可以成为「代理」, 去执行任何「你可以做」的事. 你能做, ta 就能做. 不过前提便是宽松的权限管理, 超级多的权限.下面介绍一个 基于 lume 的 Mac OS 虚拟机方案, 将其作为沙箱环境节点供 openclaw 调用.
categories:
- 技术
- 指南
tags:
- 技术
- LLM
- AI
---
![open-claw-img|700x368](https://openclaw.ai/og-image.png)
近日 OpenClaw(原 Clawdbot, 曾用名 Moltbot)爆火, 独立自主操控电脑完成各种任务, 一个挺 fancy 的 agent 应用. 结合 moltbook 网站的新闻, 在各种媒体的鼓吹下故事画风变得愈发科幻, 巴不得明天就统治全人类.
爆火没两天, 就爆出不少安全新闻, 要么是 agent 自作主张直接电脑删空, 要么是大量小白用户把实例暴露在公网, 别有用心的人可以直接通过 openclaw 的黑洞控制整个电脑. OpenClaw 这种应用最吸引人、最方便的地方在于 ta 可以成为「代理」, 去执行任何「你可以做」的事. 你能做, ta 就能做. 不过前提便是宽松的权限管理, 超级多的权限.
下面介绍一个 基于 lume 的 Mac OS 虚拟机方案, 将其作为沙箱环境节点供 openclaw 调用.
## OpenClaw Gateway 安装
由于 gateway 节点负责与各个 channel 即 bot 通信, 最好有公网 ip, 这里我在 linux 云服务器上进行部署.
官方默认给的安装命令很简单, `npm install -g openclaw` 就可以了. 但是为了安全起见我还是偏好使用 docker 容器. 官方对 docker 容器的支持并不是很好, 文档也有点混乱, 实际测下来从代码库自行构建镜像比较好
首先是克隆仓库. 注意默认的 main 分支可能不是很稳定, 最好切换到某个 tag 或者 github actions 全部通过的 commit 再构建.
```bash
# 示例: 切换到指定tag
git pull --rebase
git fetch --tags
git checkout v2026.1.29
```
之后准备构建. 很多教程包括官方文档是让用户直接在克隆后的 git 仓库里, 修改 compose 和 env 文件. 但是这样的话后续不方便更新, 因为工作区有修改, 每次都要 stash 再 pull 还要解决冲突的问题, 太麻烦了. 建议的方式是在代码库上级目录创建 compose 和 env, 这样下次要更新的话, 直接到 repo 里面 git pull 再重新构建镜像就可以了.
目录结构如下:
```
.
├── .env
├── docker-compose.yml
└── **openclaw-repo**
```
compose 文件设置好构建的目录即可. 示例如下
```yaml
services:
  openclaw-gateway:
    image: ${OPENCLAW_IMAGE:-openclaw:local}
    container_name: openclaw-gateway
    build: ./openclaw-repo
    environment:
      xxx:xxx
```
准备好目录和 docker compose 之后, 即可开始构建
完整 docker compose
```yaml
services:
  openclaw-gateway:
    image: ${OPENCLAW_IMAGE:-openclaw:local}
    container_name: openclaw-gateway
    build: ./openclaw-repo
    environment:
      HOME: /home/node
      TERM: xterm-256color
      OPENCLAW_GATEWAY_BIND: ${OPENCLAW_GATEWAY_BIND}
      OPENCLAW_GATEWAY_PORT: ${OPENCLAW_GATEWAY_PORT}
      XDG_CONFIG_HOME: ${XDG_CONFIG_HOME}
      PATH: /home/linuxbrew/.linuxbrew/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    volumes:
      - ${OPENCLAW_CONFIG_DIR}:/home/node/.openclaw
      - ${OPENCLAW_WORKSPACE_DIR}:/home/node/.openclaw/workspace
    ports:
      - "${OPENCLAW_GATEWAY_PORT}:${OPENCLAW_GATEWAY_PORT}"
      # - "${OPENCLAW_BRIDGE_PORT:-18790}:18790"
    init: true
    restart: unless-stopped
    command:
      [
        "node",
        "dist/index.mjs",
        "gateway",
        "--bind",
        "${OPENCLAW_GATEWAY_BIND:-lan}",
        "--port",
        "${OPENCLAW_GATEWAY_PORT}",
      ]
     
  openclaw-cli:
    image: ${OPENCLAW_IMAGE:-openclaw:local}
    environment:
      HOME: /home/node
      TERM: xterm-256color
      BROWSER: echo
      OPENCLAW_GATEWAY_BIND: ${OPENCLAW_GATEWAY_BIND}
      OPENCLAW_GATEWAY_PORT: ${OPENCLAW_GATEWAY_PORT}
      XDG_CONFIG_HOME: ${XDG_CONFIG_HOME}
      PATH: /home/linuxbrew/.linuxbrew/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    volumes:
      - ${OPENCLAW_CONFIG_DIR}:/home/node/.openclaw
      - ${OPENCLAW_WORKSPACE_DIR}:/home/node/.openclaw/workspace
    stdin_open: true
    tty: true
    init: true
    entrypoint: ["node", "dist/index.mjs"]
    restart: none
```
env 示例
```ini
OPENCLAW_IMAGE=openclaw:latest
OPENCLAW_GATEWAY_TOKEN=change-me
OPENCLAW_GATEWAY_BIND=lan
OPENCLAW_GATEWAY_PORT=8089
OPENCLAW_CONFIG_DIR=/data/openclaw
OPENCLAW_WORKSPACE_DIR=/data/openclaw/workspace
XDG_CONFIG_HOME=/home/node/.openclaw
```
```bash
# 镜像中的应用默认以uid 1000账户运行, 手动设置data数据目录的权限避免出现预期外的问题
sudo chown -R 1000:1000 /data/openclaw
# 构建镜像
sudo docker compose build
# 第一次使用, 初始化相关配置
docker compose run --rm openclaw-cli onboard
# 之后启动gateway
docker compose up -d openclaw-gateway
```
如果使用 tg channel ,创建完 bot 后需要配对才可以使用.
```
docker compose run --rm openclaw-cli pairing approve telegram <code>
```
日常配置可以直接使用这个 cli 镜像后面加上需要的参数. 或者直接到 Gateway 镜像中执行 `node dist/index.mjs xxx` 代替 官方文档里 `openclaw xxx` . (官方 Dockerfile 里面对 cli 工具名字的处理有问题,先曲线救国)
```
docker compose run --rm openclaw-cli xxx
```
## MacOS VM via Lume
接下来配置 mac os 的虚拟机. 使用 lume 工具
```bash
brew install lume
brew services start lume
```
之后可以快捷安装 macos vm. 一般情况下, 默认安装当前系统大版本下最新的小版本. 你可以通过以下方式查询
```bash
# 查询`latest`参数对应默认的系统镜像和版本, 可以看到显示的url指向的系统版本为15.6.1
~ » lume ipsw                                                                         
[2026-01-31T12:23:12Z] INFO: Fetching latest supported IPSW URL
[2026-01-31T12:23:13Z] INFO: Found latest IPSW URL url=https://updates.cdn-apple.com/2025SummerFCS/fullrestores/093-10809/CFD6DD38-DAF0-40DA-854F-31AAD1294C6F/UniversalMac_15.6.1_24G90_Restore.ipsw
https://updates.cdn-apple.com/2025SummerFCS/fullrestores/093-10809/CFD6DD38-DAF0-40DA-854F-31AAD1294C6F/UniversalMac_15.6.1_24G90_Restore.ipsw
# 查询当前系统版本为15.2
~ » sw_vers                                                                           
ProductName: macOS
ProductVersion: 15.2
BuildVersion: 24C101
```
也可以从这里获取指定版本的系统镜像下载地址, 手动下载. https://ipsw.me/. 一般 mac os 的镜像大小在 15-20GB
创建 vm
```bash
# 默认安装最新的版本
lume create openclaw --os macos --ipsw latest
# 如果失败报错"Installation requires a software update." 可以下载不高于当前系统运行的版本手动创建
lume create openclaw --os macos --cpu 2 --memory 8GB --disk-size 100GB --ipsw ./<YOUR-DOWNLOAD-IPSW-FILE>
# 启动vm
lume run openclaw
```
之后会输出一个 vnc 地址,可以用 mac 自带的 「屏幕共享」app 进行查看. 菜单「连接」- 「新建」
![](https://blog-1301127393.cos.ap-shanghai.myqcloud.com/BlogImgs/20260205000147405.png)
完成系统安装的几个必要步骤, 然后到设置里把远程控制打开,后面 SSH 要用到. 系统更新建议关掉.
![[image-23.png]]
![[image-24.png]]
在 mac vm 上安装 openclaw
```bash
# 基础环境配置
## brew 安装 (加速版本, 使用中科大镜像源)
export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.ustc.edu.cn/brew.git"
export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.ustc.edu.cn/homebrew-core.git"
export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.ustc.edu.cn/homebrew-bottles"
export HOMEBREW_API_DOMAIN="https://mirrors.ustc.edu.cn/homebrew-bottles/api"
/bin/bash -c "$(curl -fsSL https://mirrors.ustc.edu.cn/misc/brew-install.sh)"
## brew 镜像配置
echo 'export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.ustc.edu.cn/homebrew-bottles"' >> ~/.zshrc
echo 'export HOMEBREW_API_DOMAIN="https://mirrors.ustc.edu.cn/homebrew-bottles/api"' >> ~/.zshrc
echo 'export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.ustc.edu.cn/homebrew-core.git"' >> ~/.zshrc
echo 'export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.ustc.edu.cn/brew.git"' >> ~/.zshrc
source ~/.zshrc
## 安装基础环境
brew install node
brew install pnpm
pnpm setup
source ~/.zshrc
echo "registry=https://npmreg.proxy.ustclug.org/" >> ~/.npmrc
pnpm install -g openclaw@latest
openclaw onboard --install-daemon
```
client 端配置好 gateway 地址和 token .第一次连接显示需要配对. 在服务端执行
```bash
openclaw devices list
openclaw devices apprve <复制的request id>
```
![image-25](https://blog-1301127393.cos.ap-shanghai.myqcloud.com/BlogImgs/20260205000019565.png)
```bash
# 作为node注册
openclaw node install --host <gateway-host> --port 18789 --display-name "Mac mini"
# 然后在服务端approve
# 查看状态
openclaw node status
# 启动节点
openclaw node start
```
之后就可以让 openclaw 调用这个节点啦
![](https://blog-1301127393.cos.ap-shanghai.myqcloud.com/BlogImgs/20260204235959805.png)
THE END

View File

@@ -0,0 +1,66 @@
---
title: Search-as-a-RSS! 把任何搜索查询转换为RSS! FeedCraft 新功能速递
date: 2025-12-22
description: 作为 RSS 5 年忠实用户, 我非常享受 RSS 主动管理信息源给我带来的掌控感. 但是传统 RSS 订阅方式只能基于站点或者频道, 更多时候我其实是想关注某一个特定领域信息, 使用方式局限性很大. 其实最理想的方式是直接把搜索引擎的结果拿来作为信息源. 在 FeedCraft 新版本中, 我新增了一个 Search-as-a-RSS 的功能, 用户只需要使用自然语言指定好要搜索什么, 接下来就可以自动根据搜索结果生成一个 RSS 了.
categories:
- 技术
- 指南
tags:
- 技术
- LLM
- AI
---
## 前言
作为 RSS 5 年忠实用户, 我非常享受 RSS 主动管理信息源给我带来的掌控感. 但是传统 RSS 订阅方式只能基于站点或者频道, 更多时候我其实是想关注某一个特定领域信息, 比如 AI 领域世界模型有什么新的新闻, 或者是想订阅一个特定的信息, 比如我关注的 xxx 歌手有没有新的巡演规划.
这些需求通过传统 RSS 方式难以实现, 你只能定向的订阅某个新闻站点, 然后过滤一下关键词. 使用方式局限性很大. 其实最理想的方式是直接把搜索引擎的结果拿来作为信息源. 问题主要是噪声太多:
- 搜索查询一般是按照关键词来的, 不够灵活
- 垃圾内容农场泛滥
- 高质量的信息很多时候是多种语言的网页, 直接阅读会很困难
好在我们有了 AI, 很多问题有了新的解决方法. 在 FeedCraft 新版本中, 我新增了一个 Search-as-a-RSS 的功能, 用户只需要使用自然语言指定好要搜索什么, 接下来就可以自动根据搜索结果生成一个 RSS 了.
接下来简要介绍一下流程:
## FeedCraft 如何通过搜索结果创建 RSS
FeedCraft 本身是一个一站式处理 RSS 的工具, 这里的搜索需要依赖第三方服务. 首发支持的搜索服务是 LiteLLM Proxy(一个 AI 服务的代理转发平台, 开源可自部署, 可以方便对接各种第三方搜索服务比如 Exa, Tavily, Plexirity, Perplexity, Brave 等等)
以 Tavily 为例, 这个平台提供了每月 1000credits 的额度, 可以执行上百次搜索, 轻度使用绰绰有余了. 前往官网注册个账号, 生成一个 api key 即可.
> [Tavily](https://www.tavily.com/) 是一个专为人工智能代理AI Agents设计的搜索引擎旨在优化 AI 在执行任务时的信息检索过程。它不同于传统的面向人类用户的搜索引擎(如 Google 或 Bing而是专门为 AI 系统“理解”和“查找”所需信息而构建,强调高效、准确和上下文相关的搜索结果。
![image-14](https://blog-1301127393.cos.ap-shanghai.myqcloud.com/BlogImgs/202512220059928.png)
接下来到 LiteLLM 的后台, Tool - Search Tool 里面增加一个 search tool. 这里 search tool name 可以自定义, 先记下来待会在 feed craft 的设置页面需要填入.
![image-15](https://blog-1301127393.cos.ap-shanghai.myqcloud.com/BlogImgs/202512220059929.png)
在 LiteLLM 后台生成一个 API KEY, Key Name 可以随便写主要是备注. 这个生成的 api key 可以用于请求 LLM, 也可以调用刚才配置的搜索工具. 确认生成后, 复制 api key.
![image-16](https://blog-1301127393.cos.ap-shanghai.myqcloud.com/BlogImgs/202512220059930.png)
在 FeedCraft 后台, 设置里面配置搜索服务, 这里 API URL 是你的 LiteLLM 服务加上`/search` 后缀.
例如你的 LiteLLM 服务部署在 `https://my-litellm.example.com`, 那么这里就填写 `https://my-litellm.example.com/search` . 工具填写刚才在 LiteLLM 后台接入 Tavily 的时候填写的 search tool name
![image-17](https://blog-1301127393.cos.ap-shanghai.myqcloud.com/BlogImgs/202512220059931.png)
之后在「搜索转 RSS」页面, 输入你想查询的东西即可. 你可以直接用自然语言描述, 比如「SpaceX 的最新新闻」. 之后点击下一步即可预览搜索结果.
![image-18](https://blog-1301127393.cos.ap-shanghai.myqcloud.com/BlogImgs/202512220059932.png)
你可以按需调整搜索语句. 确认没问题一直下一步, 可以保存为自定义的配方(Custom Recipe) , 就可以生成一个唯一的 RSS 链接, 在你喜欢的任意 RSS 阅读器里面查看啦
![image-19](https://blog-1301127393.cos.ap-shanghai.myqcloud.com/BlogImgs/202512220059934.png)
更进一步, 你可以使用 FeedCraft 的各种 Craft 来做进一步的处理. 比如获取全文, 添加总结、翻译文章、以及调用 AI 使用自然语言对文章进行筛选等等
![image-21](https://blog-1301127393.cos.ap-shanghai.myqcloud.com/BlogImgs/202512220059935.png)
总体功能就是这样啦, 欢迎试用 FeedCraft 和 Star 🌟! Have fun!
https://github.com/Colin-XKL/FeedCraft

View File

@@ -320,6 +320,19 @@ Status for the jail: sshd
`- Banned IP list: 154.216.19.42 `- Banned IP list: 154.216.19.42
``` ```
### 2.7 Git 代理
一般在 `.bashrc`/`.zshrc` 中定义 `HTTP_PROXY` / `HTTPS_PROXY` 可以应对大部分场景.但是对于使用ssh 协议的git仓库 (通过ssh方式, 相较于https 的不用每次输用户名和密码. 一般对只有克隆公共仓库的时候才会用https, 其他时候对于自己的仓库我都是用ssh), 并不会走http 代理.
这里需要在ssh config 中配置转发走代理才行. 使用`nc`(macOS等默认会预装)搭配socks代理最方便
```ini
Host github.com
HostName github.com
User git
Port 22
ProxyCommand nc -x 192.168.100.222:8085 %h %p
```
## 3 - 进阶内容 ## 3 - 进阶内容

View File

@@ -38,15 +38,15 @@
src="{{ "assets/prism.js" | absURL }}"></script> src="{{ "assets/prism.js" | absURL }}"></script>
<script defer onload="tocbot_init()" <script defer onload="tocbot_init()"
onerror="fallbackJSloader('https://cdn.staticfile.org/tocbot/4.9.1/tocbot.min.js','tocbot_init')" onerror="fallbackJSloader('https://s4.zstatic.net/ajax/libs/tocbot/4.9.1/tocbot.min.js','tocbot_init')"
src="https://cdnjs.cloudflare.com/ajax/libs/tocbot/4.11.1/tocbot.min.js"></script> src="https://cdnjs.cloudflare.com/ajax/libs/tocbot/4.11.1/tocbot.min.js"></script>
<link rel="stylesheet" <link rel="stylesheet"
onerror="fallbackCSSloader('https://cdn.staticfile.org/tocbot/4.9.1/tocbot.css')" onerror="fallbackCSSloader('https://s4.zstatic.net/ajax/libs/tocbot/4.9.1/tocbot.css')"
href="https://cdnjs.cloudflare.com/ajax/libs/tocbot/4.11.1/tocbot.css"> href="https://cdnjs.cloudflare.com/ajax/libs/tocbot/4.11.1/tocbot.css">
<script defer onload="init_gitalk()" <script defer onload="init_gitalk()"
onerror="fallbackJSloader('https://cdn.staticfile.org/gitalk/1.7.2/gitalk.min.js','init_gitalk')" onerror="fallbackJSloader('https://s4.zstatic.net/ajax/libs/gitalk/1.7.2/gitalk.min.js','init_gitalk')"
src="https://cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.min.js"></script> src="https://cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.min.js"></script>
<link rel="stylesheet" <link rel="stylesheet"
onerror="fallbackCSSloader('https://cdn.staticfile.org/gitalk/1.7.2/gitalk.css')" onerror="fallbackCSSloader('https://s4.zstatic.net/ajax/libs/gitalk/1.7.2/gitalk.css')"
href="https://cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.min.css"> href="https://cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.min.css">
<!-- no min css version fallback for gitalk css --> <!-- no min css version fallback for gitalk css -->

View File

@@ -20,8 +20,8 @@ onerror="fallbackJSloader('https://cdn.staticaly.com/gh/panr/hugo-theme-hello-fr
src="{{ "assets/main.js" | absURL }}"></script> src="{{ "assets/main.js" | absURL }}"></script>
<script async onload="panguSpaing()" <script async onload="panguSpaing()"
onerror="fallbackJSloader('https://cdn.staticfile.org/pangu/4.0.7/pangu.min.js','panguSpaing')" onerror="fallbackJSloader('https://s4.zstatic.net/ajax/libs/pangu/4.0.7/pangu.min.js','panguSpaing')"
src="https://cdn.jsdelivr.net/npm/pangu@4/dist/browser/pangu.min.js"></script> src="https://cdn.jsdelivr.net/npm/pangu@4/dist/browser/pangu.min.js"></script>
<script async onload="initQuickLink()" <script async onload="initQuickLink()"
onerror="fallbackJSloader('https://cdn.staticfile.org/quicklink/2.3.0/quicklink.umd.js','initQuickLink')" onerror="fallbackJSloader('https://s4.zstatic.net/ajax/libs/quicklink/2.3.0/quicklink.umd.js','initQuickLink')"
src="https://cdn.jsdelivr.net/npm/quicklink@2/dist/quicklink.umd.js"></script> src="https://cdn.jsdelivr.net/npm/quicklink@2/dist/quicklink.umd.js"></script>

View File

@@ -1,5 +1,3 @@
<!-- <link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22>
<text y=%22.9em%22 font-size=%2290%22>👋</text></svg>"> -->
<link rel="icon" href="/favicon.png"> <link rel="icon" href="/favicon.png">
<link rel="apple-touch-icon" href="/favicon.png"> <link rel="apple-touch-icon" href="/favicon.png">