mirror of
https://github.com/Colin-XKL/Colinx-Blog.git
synced 2026-03-07 12:41:26 +08:00
Compare commits
10 Commits
dependabot
...
text-lint
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ba3da0c4f0 | ||
| 92aa523736 | |||
| 1943fb3d48 | |||
| 1c6158f07b | |||
| 8e0922f86f | |||
| 8f0cb1cf28 | |||
|
|
03be85005c | ||
|
|
4373e3ed64 | ||
| 93f0c2110b | |||
| 9e72f30ff4 |
2
.github/workflows/gh-pages.yml
vendored
2
.github/workflows/gh-pages.yml
vendored
@@ -53,7 +53,7 @@ jobs:
|
||||
--minify \
|
||||
--baseURL "/"
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-pages-artifact@v4
|
||||
uses: actions/upload-pages-artifact@v3
|
||||
with:
|
||||
path: ./public
|
||||
|
||||
|
||||
@@ -0,0 +1,128 @@
|
||||
---
|
||||
title: LLM Agent is All You Need - 让 AI 指导我完成 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 来拆解任务。
|
||||
|
||||
于是
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
利用 AI 生成一套提示词,来指导我如果分析我的需求、拆解任务
|
||||
|
||||
不得不说,对于这些跨领域的知识,能有一个不厌其烦的 AI 助手来循序渐进地跟你交流、帮你分析,效果非常好。人类可能还真不好干这个活。
|
||||
|
||||
## 「AI 教我做产品」
|
||||
|
||||
经过跟这个「MVP 导师」的 LLM Agent 反复沟通,确定了产品的主要构想和核心事项。以下是摘录的一部分
|
||||
|
||||
```markdown
|
||||
#### MVP 概要(3 句话)
|
||||
|
||||
- **为谁**:20‑30 岁、周末感到无聊且有意愿尝试新事物的年轻人。
|
||||
- **解决什么痛点**:不清楚该尝试哪些活动、如何快速入门、活动是否适合自己、以及能获得什么收益。
|
||||
- **提供的核心功能**:活动列表页面 → 点击感兴趣的活动 → 展示入门门槛与材料推荐(入门材料按钮)并埋点上报。
|
||||
```
|
||||
|
||||
```markdown
|
||||
## MVP 核心功能:
|
||||
1. **活动列表**:集中展示多种可入门活动(绘画、球类、手工等)。
|
||||
2. **入门详情**:点击任意活动 → 展示入门门槛、必备材料、推荐教程链接。
|
||||
3. **埋点追踪**:记录“点击 → ≥1 min 外部阅读 → 回站”行为,用于验证假设。
|
||||
```
|
||||
|
||||
这里印象深刻的是,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 的缺点也都一并继承了过来,很多语言的插件需要额外手动安装、各种变量跳转用不了、各种奇怪的波浪线报错又没法快速修正
|
||||
|
||||
最后简要看下最终的成果吧
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
后台数据:
|
||||

|
||||
|
||||
## 埋点上报与用户行为分析
|
||||
|
||||
之前做的都是玩具项目和公司内部平台,没怎么接触过 C 端用户行为分析。这块确实还是个挺陌生的领域。不过好在我们有万能的 AI. 在经过埋点需求分析、技术方案对比、任务拆解之后,最后采用了 Umami 平台来进行上报,并简单配置了下指标用于计算用户停留,辅助验证我们关于用户痛点的假设
|
||||
|
||||

|
||||
|
||||
跟 MVP 导师沟通的时候,确定了验证假设的方式为:衡量用户是否点击「查看详情」按钮
|
||||
|
||||
- 用户点击并在外部阅读 ≥ 1 分钟后回站
|
||||
- 成功阈值:≥ 25 % 的访问者完成“点击 → ≥ 1 min 回站
|
||||
|
||||
为了方便统计,借助 umaimi 的统计功能快速实现,我只需要统计有多少比例的用户至少点击了一次「了解详情」. 具体到代码实现上,就是在「点击详情」按钮添加一个上报,上报内容包括用户的 session id, 后面在 umaimi 统计一段时间内,按钮点击事件里面,有多少独立的 session id 处以总的 uv 就可以。
|
||||
|
||||

|
||||
|
||||
## 投放
|
||||
|
||||
众所周知,天朝桌面端 web 用户已经约等于 0 了,技术博客都很少人看,更别提这种泛娱乐向的内容。MVP 导师提供的方案,也是路线正确,但是 web 端用户数据反馈验证的路子基本没用。不过这个 web 页面我也不指望能成为流量主力,最多算个 wiki.
|
||||
|
||||
要想真的有人看,收获真实用户反馈,还是需要到各种新媒体平台去投放的。然后再收集数据进行分析,不过这个工作量就是另外一回事了。运营起来还是需要挺多时间精力的。
|
||||
|
||||
尝试做了几个图投放到小红书,放几个示例图
|
||||
|
||||

|
||||
|
||||
用的搞定设计的模版调整了下,插图是用 Gemini, 效果还可以,能很好地遵循用户指令,不过美学方面跟 MidJourney 那些还是差了一截,毕竟人家专攻的方向。提示词里面限制好风格的话出图效果还是可以的,这里后续如果有必要的话,其实也可以 AI 批量生产插图。
|
||||
|
||||
不过小红书账号冷启动,反响平平。这里后续有时间再研究吧
|
||||
|
||||
## The End
|
||||
|
||||
|
||||
|
||||
278
content/posts/OpenClaw虽好, 搭配沙箱才安心 - 使用Lume构建mac虚拟环境.md
Normal file
278
content/posts/OpenClaw虽好, 搭配沙箱才安心 - 使用Lume构建mac虚拟环境.md
Normal 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
|
||||
---
|
||||
|
||||
|
||||

|
||||
|
||||
近日 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 进行查看。菜单「连接」- 「新建」
|
||||

|
||||
|
||||
完成系统安装的几个必要步骤,然后到设置里把远程控制打开,后面 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>
|
||||
|
||||
```
|
||||
|
||||

|
||||
|
||||
```bash
|
||||
# 作为node注册
|
||||
|
||||
openclaw node install --host <gateway-host> --port 18789 --display-name "Mac mini"
|
||||
|
||||
# 然后在服务端approve
|
||||
|
||||
# 查看状态
|
||||
openclaw node status
|
||||
# 启动节点
|
||||
openclaw node start
|
||||
```
|
||||
|
||||
之后就可以让 openclaw 调用这个节点啦
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
THE END
|
||||
@@ -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 系统“理解”和“查找”所需信息而构建,强调高效、准确和上下文相关的搜索结果。
|
||||
|
||||

|
||||
|
||||
接下来到 LiteLLM 的后台,Tool - Search Tool 里面增加一个 search tool. 这里 search tool name 可以自定义,先记下来待会在 feed craft 的设置页面需要填入。
|
||||
|
||||

|
||||
在 LiteLLM 后台生成一个 API KEY, Key Name 可以随便写主要是备注。这个生成的 api key 可以用于请求 LLM, 也可以调用刚才配置的搜索工具。确认生成后,复制 api key.
|
||||
|
||||

|
||||
|
||||
在 FeedCraft 后台,设置里面配置搜索服务,这里 API URL 是你的 LiteLLM 服务加上`/search` 后缀。
|
||||
例如你的 LiteLLM 服务部署在 `https://my-litellm.example.com`, 那么这里就填写 `https://my-litellm.example.com/search` . 工具填写刚才在 LiteLLM 后台接入 Tavily 的时候填写的 search tool name
|
||||
|
||||

|
||||
|
||||
之后在「搜索转 RSS」页面,输入你想查询的东西即可。你可以直接用自然语言描述,比如「SpaceX 的最新新闻」. 之后点击下一步即可预览搜索结果。
|
||||
|
||||

|
||||
|
||||
你可以按需调整搜索语句。确认没问题一直下一步,可以保存为自定义的配方 (Custom Recipe) , 就可以生成一个唯一的 RSS 链接,在你喜欢的任意 RSS 阅读器里面查看啦
|
||||
|
||||

|
||||
|
||||
更进一步,你可以使用 FeedCraft 的各种 Craft 来做进一步的处理。比如获取全文,添加总结、翻译文章、以及调用 AI 使用自然语言对文章进行筛选等等
|
||||
|
||||

|
||||
|
||||
总体功能就是这样啦,欢迎试用 FeedCraft 和 Star 🌟! Have fun!
|
||||
|
||||
https://github.com/Colin-XKL/FeedCraft
|
||||
|
||||
|
||||
@@ -320,6 +320,19 @@ Status for the jail: sshd
|
||||
`- 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 - 进阶内容
|
||||
|
||||
|
||||
169
content/posts/写在21世纪已然走过四分之一之际 - 我的2025年度回顾.md
Normal file
169
content/posts/写在21世纪已然走过四分之一之际 - 我的2025年度回顾.md
Normal file
@@ -0,0 +1,169 @@
|
||||
---
|
||||
title: 写在 21 世纪已然走过四分之一之际 - 我的 2025 年度回顾
|
||||
date: 2026-02-08
|
||||
lastmod: 2026-02-08
|
||||
description: 写在 21 世纪已然走过四分之一之际 - 我的 2025 年度回顾
|
||||
categories:
|
||||
- 杂记
|
||||
- 年度总结
|
||||
tags:
|
||||
- 总结
|
||||
- 杂记
|
||||
---
|
||||
|
||||
写在 21 世纪已然走过 1/4 之际
|
||||
|
||||
又是新旧年交替之际,21 世纪已然走过 1/4. 2025 的世界也是不太平的一年,一边是懂王在疯狂搞事,另一边是 AI 在飞速发展。产业还没发展起来,先利好了卖铲人,连带着 GPU、DRAM、甚至是金属矿的需求和价格都猛猛上涨。虽然不太平,但是中美股市、黄金白银等各类资产却都一路狂飙。
|
||||
|
||||
## Part 1. 2025 年度印象
|
||||
|
||||
2025 年 AI 的风吹遍了各个角落,从年初的 Deepseek 横空出世震惊世界,到后续 Qwen、OpenAI、xAI、Anthropic、Google 各家扔出王炸,新版本大模型霸榜各类 Benchmark 和 Leaderboard. 众多公司也开始在内部强推 AI 提效,大家生怕错过了这班车。
|
||||
|
||||
25 年的 AI 确实提升了很多,我日常使用的频率和场景也在逐步增加。上半年的 AI 智能程度还很有限,当时想着先在 LLM 的舒适区:文本生成领域,先搞点玩具试试水,于是便有了 WordMeme 项目。简而言之,就是让各个 LLM 根据给定的英语单词,编写一个微小说。
|
||||
|
||||
一开始让 LLM 直接写,自己选个单词,然后再编写对应的微小说。跑了一段时间发现 AI 翻来覆去就只会选那几个单词,虽然不同家的 LLM 由于训练语料不同的缘故,偏好的单子会有所不同。但是无论跑多少遍,结果的集合也就那么十几个。
|
||||
|
||||
后来换了个思路:AI 的发展,一定是智能和算力的成本不断下降。既然运算的成本这么低,干脆直接遍历所有英文单词。效果挺不错,后台又开始折腾 LLM Proxy 以及疯狂白嫖各家的 LLM API , 调用不同模型来进行对比,然后又整了个工作流对小说进行打分。发现了一些挺有意思的现象:打分的模型会偏袒自家模型生成的结果!比如我用 qwen-qwq 给 qwen-235b 生成的微小说打分,平均分明显比其他模型的结果高不少。很多打分 90-100 分的结果,点进去一看哭笑不得,驴头不对马嘴,而且尬的要死根本不是正常中文母语的人能想出来的。
|
||||
|
||||
想来这种「偏袒」的行为应该跟训练材料以及对齐流程有关。比如同一个家族的模型,训练材料和底座相同,对于什么是「搞笑」「温情」「有趣」的喜好以及判定标准也都是一样的。
|
||||
|
||||
除了 WordMeme 这种试验性项目,25 年也尝试了很多其他的东西,比如时下流行的 Vibe Coding, 以及 Google Jules 这种异步 Coding Agent. 确实能明显感觉到 LLM 的水平在不断快速进步。站在这个时间节点,结合这一年的经历,不由得令我思考几个问题:
|
||||
|
||||
- AI 的发展,智能的成本快速下降,究竟能带来什么?
|
||||
- 智能变得廉价,对人类文明,对普通人的生活幸福,会不会带来积极的结果?
|
||||
- AI 的趋势看起来是不可逆的,如果它会带来负面的结果,作为普通人应该何去何从?
|
||||
|
||||
我的一些看法:
|
||||
**科技的发展,对人类在物质层面来说一定有价值**
|
||||
过去几个世纪的科学技术发展,让人类 (大部分) 摆脱了饥饿,生活水平和平均寿命得到了确确实实的提升。
|
||||
在可以预见的未来,AI 和机器人进一步发展,替代人类危险、杂乱、不受欢迎的工作。比如养老、护理、检修等等。这些会使我们的物质生活变得更好,我也在期待这样的未来。
|
||||
|
||||
**智能变得廉价,对于当前阶段的中国,是一场灾难**
|
||||
很多科幻作品里,各种机器人帮人类处理家务、帮我们从繁杂琐碎的任务中抽离出来,人们有更多的精力投入到更具创造力、更有价值的活动当中,比如艺术创作、高精尖技术攻克等等。但是这只是人类作者的一厢情愿。已经发生的现实是,AI 最先被投入的,就是高价值的工作内容。绘画、音乐、代码、科学研究,一个又一个领域在被 AI「攻占」、「侵蚀」. 从实际情况出发,当前这些 AI 的发展是受资本驱动的。而资本一定会涌向高回报率的东西,那么自然这些所谓的「高价值」工作,最先收到资本的关注。AI 也表现也确实出色,短短一两年时间,已经可以 cover 大部分中低端工作。
|
||||
人们能从「低价值」工作中释放出来,投入「高价值」工作,或者物质极大富足根本不需要工作,这固然是好事。但是有几个问题:
|
||||
|
||||
1. 初学者失去了锻炼机会。四年过后,市面上 AI 的能力成长会比现在的大一新生强的多,企业根本没有任何理由雇佣他。以国内高校的教育体系,根本跟不上这样的变革,大批毕业生可能面临毕业即失业。至少专业对口的工作岗位会大幅减少
|
||||
2. 现阶段的中国根本没有能力消化「高端」的工作产出。如果人们的时间和精力释放出来,投入诗歌、文学、高精尖技术这些领域,以当前的大众文化水平、商业环境,根本无从消化。没有市场,就算想转型也根本无从谈起
|
||||
3. 工作的价值是什么?乌托邦真的有可能实现吗?各种科学技术进步,让人类在物质层面极大地富足,但是没有供需,劳动和生产不再具有价值。人类的生活形态会变成什么样子?AI 圈养的宠物?那人类文明还算实质上存在吗?
|
||||
|
||||
## Part 2. 我的 2025
|
||||
|
||||
### 2025 Highlight
|
||||
|
||||
- 清明故友小聚,久违的默契和放松
|
||||
- 五一川西游、六月湖南张家界、十一青甘大环线、元旦上海跨年,这一年去了不少地方,尽量把每个小长假都用起来,和朋友聚会旅游,可能这才是这个年纪、这个年代最「该干的事」
|
||||
- 下半年突然开始沉迷打卡,「学外语」「做锻炼」「练乐器」已经连续每周打卡了,回过头来看还挺有成就感
|
||||
|
||||
### 「再来亿遍」
|
||||
|
||||
#### 年度五星影片
|
||||
|
||||
- 《攻壳机动队》伟大无需多言
|
||||
- 《初步举证》独角戏,非常精彩
|
||||
- 《怪物之子》这部片的基调很熊彻一样,大大咧咧,粗犷搞怪底下又有着一丝难以直接启齿的温情。看多了一本正经的叙事和抒情,以及国产片粗制滥造尬到抠脚的搞笑片段,这部片反而能更打动我
|
||||
- 《控方证人》1957 年的片子了,经典,剧情和台词设计简练干脆,更绝的是夫妻两个在法庭作证的时候,透露出的一点点假演戏的感觉,更是微妙
|
||||
|
||||
#### 年度音乐
|
||||
|
||||
- 《Polytype》《Horizon Dreamer》by 三浦大知,两首都是《死亡搁浅 2》里面的配乐,游戏里的人偶表演以及现场演出的版本都超级惊艳,甚至有剁手 ps5 冲死亡搁浅游戏的冲动
|
||||
- 《星と僕らと》 (星星和我们) by Lyn, P5R 的曲子。就是因为这首曲子才入坑的 p5, 现在还没出来
|
||||
|
||||
#### 年度游戏
|
||||
|
||||
- P5 天下第一
|
||||
|
||||
#### 年度好物
|
||||
|
||||
缺席。但是突然发觉手头已经有一些东西陪伴很多年了,值得记录一下
|
||||
|
||||
#### N 年好物盘点
|
||||
|
||||
- iPad 2018 - 已经 7 年了,从最开始搭配 Apple Pencil 记笔记,配上蓝牙键盘上课 SSH 连服务器敲代码、到配合 Logic Remote 当 MIDI 键盘&打击垫&调音台,再到毕业工作后退居二线专职做 Bilibili 播放器。这台 iPad 竟然已经陪我走过了 7 年的光阴。不由得感叹 Apple 生态和做工,再战三年!
|
||||
- Xbox Series S & 极米投影仪 Z6X - 从 21 年末到现在已经四年多了,最开始还是显卡荒的时候买的 XSS, 没想到斗转星移,市场已经过了一轮,又来到了下一个显卡荒的年代... 自从配了专门打游戏的 PC 后 XSS 很少用了。除了过年回家为了打游戏带回去顶一下,去年又翻出来搭配回音壁组家庭影院才又开始发光发热,不过说起来 Xbox 很早以前的定位之一就是机顶盒 hhh
|
||||
- 树莓派 3B+ - 7 年前最早买回来做智能小车,后面被我改造成单独的迷你服务器,ADGuard 去广告和 SMB 服务器等等,练手 Linux ,以及陪我辗转多地。至今仍在服役
|
||||
- TTRSS - 入坑 RSS 已经五年了,受益良多。脱离了各种 App 的推送感觉世界甚是清净。未来还会继续当 RSS 坚定的拥护者
|
||||
|
||||
### 时空信件 from 2025
|
||||
|
||||
> 一年后的自己,有没有找到一件不后悔青春的事?
|
||||
|
||||
很遗憾,没有像预期一样,找到那种所谓「惊天动地」「不放肆不青春」的答案。不知道在什么时候起,就一直幻想着能有「轰轰烈烈」的 xxx, 一场毕业的狂欢,一次旅行... 又不知道什么时候起,发觉可能平凡才是常态,又或者是很多「轰轰烈烈」的节点,在当时看来也是很普通,很平凡。比如中考体育加试结束的那天,面试完接到 offer call 的那天,回想起当时,可能也只比平时要高兴些许。是当时的我没有珍视这些不平凡的平凡,没有仪式感?还是单纯没有到回首往昔感叹的年纪?现在的我没有答案。我选择先记录当下,通过照片,通过这些文字,创建记忆的锚点。或许十年后,二十年后,每每想起,会感叹「当时只道是寻常」罢。
|
||||
|
||||
### 2025 小目标 review
|
||||
|
||||
> 更多的收入来源,薪资外收入占比超过 5%
|
||||
|
||||
✅ 年度理财收益达到年度总收入的 20%, 超额完成。
|
||||
|
||||
> 在至少两个领域,分别至少有一个阶段性的代表作
|
||||
|
||||
(1/2), 除了 FeedCraft V3.0 算得上有点意义,其他的 Weekend Project、各种制作很多都不了了之,没能继续完成做下去。
|
||||
|
||||
## Part 3. 2026 Plan
|
||||
|
||||
### 一些想法
|
||||
|
||||
过去一年里,一直在思考几个问题,一直在寻找答案。
|
||||
|
||||
> 有没有「梦想成为的人」, 职业生涯/人生轨迹 能「抄作业」的目标?
|
||||
|
||||
学生时代,我们被灌输各种「等后面 xxx 了就好了」的「思想钢印」, 前面的路很清晰,也很局限。小镇做题家 可以「心无旁骛」沿着既定的道路前进。到后来脱离象牙塔才发现,之前都是命题作文,后面全是开放题。如果可以的话,能有一个可以参照的对象,是再好不过。
|
||||
|
||||
可也许,这个问题最好不要有答案。
|
||||
|
||||
> 哪些是「哪天退休了,我一定要 xxxx」的事情?
|
||||
|
||||
「土拨鼠之日」里,主角困在了时间循环,身边的人和事一直是同一天在不断的重复。主角从最开始的恼羞成怒、自暴自弃,到后来与自己和解,重新审视自己可以做的事、想做的事、要做的事。他开始尝试帮助小镇上的每一个人,因为时间足够久,他可以熟悉所有人,知道所有人即将面临的麻烦事,他开始追寻一直想做的事,比如学起了钢琴,学习各种东西。尽力过上一个更完美的「今天」.
|
||||
|
||||
很多人常常挂在嘴边「以后退休了要 xxx」, 我不想把这些留到退休。学生时代被植入了很多「延迟满足」的思想,很多需求和渴望不知不觉被深埋,现在有足够多的自由,应当去追寻真正重要的东西。
|
||||
|
||||
> 如何「做时间的朋友」? 有哪些方式和途径
|
||||
|
||||
「种一棵树最好的时机,一个是十年前,一个是现在」时间的积累和复利是非常强大的力量,近期也在一直想着怎么能利用好。
|
||||
|
||||
下半年开始打卡记录,多邻国学日语、每周锻炼、练习乐器,这几样对应的东西我觉得都是可以随时间成长获益良多的。另外今年也开始学习理财,毕竟存款放着也是放着,至少也得跑赢通胀。目前这几样也都小有成就。
|
||||
|
||||
除了这几样以外,也在思考更多其他的可能性。除了理财、身心健康、一些需要长期投入的技能,另外值得做的,一个是类似自媒体这样的影响力/品牌建设,另外就是最近在探索的 个人向 AI Agent 的迭代。
|
||||
|
||||
近日 OpenClaw 的火爆全网,最近也在研究 AI Agent, 想到「个人专属 agent」这种东西,本身也是需要花时间不断迭代的东西?AI 能力在不断发展,如果是迭代技能、工具,我觉得意义很优先。毕竟可能花几天功夫调教好让 ai 学会了什么技能,明天新的 SOTA 模型就能零门槛直接上手了。但是如果说的 Agent 的记忆,个人的偏好,这些东西还是值得去调教和迭代的,最近也在尝试跨 AI Agent 的通用记忆体方案。
|
||||
|
||||
### 2026 小目标
|
||||
|
||||
- 更多的收入来源,薪资外收入占比超过 10%
|
||||
- 在至少两个领域,留下一个阶段性的代表作
|
||||
- 构建至少一个持续迭代和进化的成长型事项
|
||||
|
||||
### 时空信件 2026
|
||||
|
||||
一年后的自己,有没有追寻到一件向往已久的事物
|
||||
|
||||
## Part 4. 年度流水账
|
||||
|
||||
- 平平无奇的春节假期,在猛肝老头环中度过
|
||||
- 入坑狂追攻壳机动队,鬼才导演齐聚一堂带来超越时代的狂想,年度五星 🌟
|
||||
- 清明,故友来深,财富自由小分队会师,安排了经典的香港和澳门各一日游,几年未见,还是熟悉的默契,话匣子忍不住打开,连带着唤醒了某些尘封已久的记忆,和落灰冷落的难以和其他人放开讨论的话题。
|
||||
- 终于还是剁手了无人机,体感穿越套装带来小鸟第一视角,很新奇的体验
|
||||
- 广东分部喜迎扩张,除了干饭就是干饭
|
||||
- 五一约了一帮同学包车游川西,上班之后要凑一起出去玩确实越来越难只能等小长假,还好川西线路基本算是避开了人潮高峰。景色比视频里刷到的更为震撼。fpv 第一视角在广阔的川西飞起来也是超爽
|
||||
- Mariah Carey 演唱会!现场有点小雨搞得工作人员有点手忙脚乱,但是不妨碍大家享受音乐,开场是卫兰带来几首粤语歌暖场,现场的声音和律动超出预期,正主更是一如既往的稳,享受丝滑的律动
|
||||
- 六月跟公司团建重游张家界,小团深度自由游体验确实很棒,加上壮阔的自然景观和耳目一新的湘西美食,不禁让我开始期待下一次的旅行
|
||||
- 把之前工作上的一些成果写了文章,没想到上内网热榜了,还引得大老板亲自赞赏,小小骄傲一下,不枉我好来回改稿折腾好几遍
|
||||
- 继续开动打印机,宝可梦系列模型手调上色,手艺更进一步了
|
||||
- 入坑狂追 鲁鲁修系列,不知是什么时候被推荐的了,追起来很是上头
|
||||
- 暑期他如约而至,我却无法赴约。目送又一波同学毕业,吃完这顿饭都是步入社会的打工人了
|
||||
- 折腾 WordMeme 项目,给定一个单词让 llm 写一个关联的微小说。然后让另一个 LLM 打分筛选。后来发现 llm 有「包庇自家人」的问题开始折腾 llm prompt evaluation. 不过折腾一通最后发现现阶段的 llm 文字能力还是很有限,先跑着看后续下一代的 llm 能不能整出点能看的东西吧
|
||||
- 忘记了是哪个夜里,听了什么歌,想起了什么事,下单了吉他。拿到手之后肌肉记忆开始开始涌现出来想要表现一把,还是像以前一样笨拙。不过弹了几天熟悉几首曲子之后好了很多。吉他这种乐器原声果然还是很令人触动。接下来也要好好继续练琴哇
|
||||
- 蹲到了喜欢的演出,专门跑去光明的剧院听音乐剧 gala, 现场演出超棒,eliza 一出意满离
|
||||
- 结合 vibe coding 做了个实验,better me 项目,设计、规划、代码都一路畅行,但是瓶颈点是在于我的认知,没法找到更多的适合 better me 的活动了,本身是个开放式问题没有关键词和描述也也没法让 ai 找,项目卡在了奇怪的地方最后止步于 demo
|
||||
- 台风天,在 10 月终于等到 25 年的居家办公。超市物资被抢购一空,路边的商铺玻璃都贴满了胶带,也算是广东台风天的经典场面了
|
||||
- 魔幻,紧张,充实的两周,23 下午 24 全天台风居家,抢购物资发现货架早已被清空。26 还在上班 27 落地西安,29 西宁,30 祁连山,10.1 早起七彩丹霞看日出,10.2 大柴旦,10.3 南八仙魔鬼城,10.4 哈拉湖,10.5 西宁野生动物园,10.6 夜游西安,10.7 落地深圳。这几天间之前长期看好且重仓的几只股票也迎来上涨,基本翻了一倍。所有这些都发生在短短两周之内
|
||||
- 开启了每天多邻国打卡学习日语的日子
|
||||
- 一个调休的工作日,我选择去了一家漫画屋。拿起纸质的漫画,找个地方一看一下午,熟悉而又陌生的体验
|
||||
- 入坑 p5, 无法自拔
|
||||
- xbox 手柄摇杆漂移的厉害,一怒之下决定买整套焊锡装备自己换摇杆。折腾了一晚上手柄满血复活了喜大普奔,不过买的焊锡装备这些不知道下次用上又是什么时候,也是怪无语的
|
||||
- 有生之年等到了健康日,顺带督促自己开始每周锻炼和体重管理起来
|
||||
- 反复横跳 n 次后还是入手了空气炸锅,正好气温降下来了,加餐可以搞些热的。有一说一不考虑涂层的问题,加热些半成品还是很方便的
|
||||
- weekend project 折腾 cliQ 项目,将命令行调用转换为模版化的 gui 表单界面,尝试了一些新技术比如 wails, monorepo, 和其他大多数玩具一样死于日常没有刚需没有动力继续迭代...
|
||||
- 发现了 Google 有个异步编程代理 Jules 还挺好使,开始疯狂提需求给 Jules 来迭代 FeedCraft, 早上提需求晚上回来收菜,搞了一堆 ai bot 和我一起 review pr, 小小的项目也有如此热闹的场面,不禁让人期待下一代编程代理了
|
||||
- 2025 的尾巴,和一帮同学在上海跨年,顺带休个小长假。魔都的二次元氛围令我大受震撼,另外作为老牌经济中心,基建实力和服务水平确实很强。一周多的时间里各种胡吃海喝,一天两杯奶茶,美食这块确实给力,沪币结算很符合我对上海的刻板印象
|
||||
- 2025 the end
|
||||
@@ -38,15 +38,15 @@
|
||||
src="{{ "assets/prism.js" | absURL }}"></script>
|
||||
|
||||
<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>
|
||||
<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">
|
||||
<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>
|
||||
<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">
|
||||
<!-- no min css version fallback for gitalk css -->
|
||||
@@ -20,8 +20,8 @@ onerror="fallbackJSloader('https://cdn.staticaly.com/gh/panr/hugo-theme-hello-fr
|
||||
src="{{ "assets/main.js" | absURL }}"></script>
|
||||
|
||||
<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>
|
||||
<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>
|
||||
@@ -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="apple-touch-icon" href="/favicon.png">
|
||||
|
||||
|
||||
Reference in New Issue
Block a user