Skip to content

Commit b2b2520

Browse files
authored
Merge pull request #43 from hobbytp/feature/category-metadata-filter
RAG: 启用可筛选的 category 元数据
2 parents 4a48818 + af70022 commit b2b2520

31 files changed

Lines changed: 3179 additions & 10 deletions

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ __pycache__/
9696

9797
.cursor/
9898
.github/prompts
99-
AGENTS.md
99+
100100

101101
.serena/
102102
.trae/
@@ -131,3 +131,5 @@ CLAUDE.md
131131
.serena/
132132
.trae/
133133
.cursor/
134+
135+
.wrangler

Makefile

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
.PHONY: dev build clean stop optimize-images analyze-performance analyze-content analyze-content-ai full-build full-build-ai validate-architecture generate-covers generate-ai-covers test-covers generate-covers-for-directory help
1+
.PHONY: dev build clean stop optimize-images analyze-performance build-measure analyze-content analyze-content-ai full-build full-build-ai validate-architecture generate-covers generate-ai-covers test-covers generate-covers-for-directory ingest-data help
22

33
# Shell 设置
44
# 让每个配方(target)的所有命令在同一个 shell 中执行,确保 .env 中的导出变量可在后续命令中生效
@@ -28,6 +28,15 @@ build:
2828
@echo "🔨 执行Hugo生产构建..."
2929
docker-compose run --rm hugo-build
3030

31+
# 测量构建时间
32+
build-measure:
33+
@echo "⏱️ 测量Hugo构建时间..."
34+
@start_time=$$(date +%s); \
35+
$(MAKE) build; \
36+
end_time=$$(date +%s); \
37+
duration=$$((end_time - start_time)); \
38+
echo "✅ 构建完成,耗时: $${duration} 秒"
39+
3140
# 优化图片
3241
optimize-images:
3342
@echo "🖼️ 优化图片资源..."
@@ -270,6 +279,10 @@ generate-covers-for-directory:
270279
echo " TEXT2IMAGE_PROVIDER=openai"; \
271280
fi'
272281

282+
# RAG数据摄取
283+
ingest-data:
284+
@bash scripts/ingest.sh "$(FILE)" "$(FORCE)" "$(ENV_FILE)"
285+
273286
# 帮助信息
274287
help:
275288
@echo "Hugo Blog Management Tool"
@@ -284,6 +297,7 @@ help:
284297
@echo ""
285298
@echo "Build Commands:"
286299
@echo " make build Execute production build"
300+
@echo " make build-measure Measure build time"
287301
@echo " make full-build Full build process (validate + optimize + analyze)"
288302
@echo " make full-build-ai 🤖 AI-enhanced full build process"
289303
@echo " make clean Clean build files"
@@ -308,6 +322,11 @@ help:
308322
@echo " make test-covers Test cover generation"
309323
@echo " make generate-covers-for-directory DIRECTORY=dir [FORCE=true DRY_RUN=true NO_RECURSIVE=true] Generate AI covers for directory"
310324
@echo ""
325+
@echo "RAG Data Ingestion:"
326+
@echo " make ingest-data Ingest all blog content to Vectorize"
327+
@echo " make ingest-data FILE=path/to/file.md Ingest single file"
328+
@echo " make test-ingest Run ingest pipeline unit tests"
329+
@echo ""
311330
@echo "Maintenance Commands:"
312331
@echo " make update-theme Update Hugo theme"
313332
@echo " make install-tools Install tool dependencies"
@@ -321,4 +340,22 @@ help:
321340
@echo " make generate-json-data-ai # Generate AI-enhanced dashboard data"
322341
@echo " make analyze-content FILE=./content/zh/google/a2a.md # Analyze single file"
323342
@echo " make analyze-content-ai FILE=./content/zh/google/a2a.md # AI-enhanced analysis"
324-
@echo " make export-pdf FILE=./content/zh/google/a2a.md # Export single file PDF"
343+
@echo " make export-pdf FILE=./content/zh/google/a2a.md # Export single file PDF"
344+
345+
# Run ingest unit tests via uv + venv
346+
test-ingest:
347+
@echo "Running ingest unit tests via uv + venv"
348+
@if command -v uv >/dev/null 2>&1; then \
349+
uv run python -m unittest scripts/test_ingest.py; \
350+
else \
351+
python -m unittest scripts/test_ingest.py; \
352+
fi
353+
354+
# Vectorize metadata index creation (category as filterable field)
355+
CF_VECTOR_INDEX ?= blog-index
356+
357+
.PHONY: vectorize-create-category-index
358+
vectorize-create-category-index:
359+
@echo "Creating filterable metadata index 'category' on $(CF_VECTOR_INDEX)"
360+
@npx wrangler vectorize create-metadata-index $(CF_VECTOR_INDEX) --property-name=category --type=string
361+

README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,24 @@ docker build -t ai-blog .
107107
docker run -p 1313:1313 ai-blog
108108
```
109109

110+
### 使用 Make 运行与构建(推荐)
111+
112+
为确保一致的开发体验并触发必要的验证钩子,建议通过 `make` 管理 Hugo:
113+
114+
```bash
115+
# 启动开发服务器(如已在运行,先执行 make stop)
116+
make dev
117+
118+
# 停止已启动的 Hugo 服务
119+
make stop
120+
121+
# 生产构建(用于部署,包含最完整输出)
122+
make build
123+
124+
# 查看所有可用命令
125+
make help
126+
```
127+
110128
## 📁 项目结构
111129

112130
```text
@@ -335,3 +353,4 @@ This project is licensed under the [MIT License](LICENSE), free to use and distr
335353
**Content Categories**: Paper Reviews, Technical Analysis, Open Source Projects, Industry News, Product Reviews, Celebrity Interviews
336354

337355
⭐ If this project helps you, please give it a Star for support!
356+

cache/image-generation/generation_cache.json

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -538,5 +538,23 @@
538538
"relative_path": "/images/generated-covers/5533bda3d0246b6b6f6843d566ca0004.webp",
539539
"prompt": "【重要】这是一张纯视觉艺术作品,禁止出现任何文字、字母、数字、符号、Logo、水印。画面主体:论文页面化作飞翔的纸鹤群。融入'Chain of Draft 论文解读'的概念进行抽象艺术表达。色彩方案:学术蓝与论文白。艺术风格:赛博朋克风格,霓虹灯光,未来都市,柔和的漫射光,微距特写,细节丰富。画质要求:8K超高清,细节精致,专业级博客封面。构图:16:9宽屏横版,大气磅礴。再次强调:纯图案背景,绝对不要包含任何文字元素。",
540540
"generated_at": "2025-11-28T23:15:36.997956"
541+
},
542+
"9d02843782ad5d6b16ca86cff71927c7": {
543+
"title": "Thinking Machine Lab的定位与商业模式",
544+
"description": "前OpenAI首席技术官穆拉蒂创立的初创公司Thinking Machines Lab, 其核心战略就是:**Commoditize the Base Model, Monetize the Customization.**(让基座模型商品化/基础设施化,通过定制化服务来变现。)",
545+
"category": "big_companies",
546+
"image_path": "static/images/generated-covers/9d02843782ad5d6b16ca86cff71927c7.webp",
547+
"relative_path": "/images/generated-covers/9d02843782ad5d6b16ca86cff71927c7.webp",
548+
"prompt": "包豪斯风格,三分法构图,由无数精密的齿轮和结构复杂的管线组成的巨型企业级服务器,光线从服务器内部发出,照亮周围的环境,深蓝色和橙色的配色方案,高品质,8k分辨率,无文字",
549+
"generated_at": "2025-12-05T10:31:39.149948"
550+
},
551+
"e4d9bfb7b2241da6ed6444aa1df2bdde": {
552+
"title": "Google Nested Learning原理剖析与Hope架构:迈向持续学习的新范式",
553+
"description": "Google Nested Learning原理剖析与Hope架构:迈向持续学习的新范式",
554+
"category": "big_companies",
555+
"image_path": "static/images/generated-covers/e4d9bfb7b2241da6ed6444aa1df2bdde.webp",
556+
"relative_path": "/images/generated-covers/e4d9bfb7b2241da6ed6444aa1df2bdde.webp",
557+
"prompt": "包豪斯风格,三分法构图,一个由不同大小、颜色和形状的齿轮相互嵌套组成的复杂机械装置,象征着多层次的优化过程,齿轮的颜色为鲜艳的红、黄、蓝三原色,背景为干净的白色,灯光柔和均匀,高品质,8k分辨率,无文字",
558+
"generated_at": "2025-12-05T22:43:22.398137"
541559
}
542560
}
Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,182 @@
1+
---
2+
title: "OpenSkills 使用指南"
3+
date: 2025-12-04T20:00:00+08:00
4+
draft: false
5+
tags: ["OpenSkills", "Claude", "Skills"]
6+
categories: ["ai_programming"]
7+
description: "OpenSkills 是一个用于在 Cursor 和 Trae 中使用 Claude Skills 的开源工具,提供了详细的安装和使用指南。"
8+
---
9+
10+
11+
## OpenSkills 使用指南
12+
13+
在 Cursor 和 Trae 这类编辑器中使用 Claude Skills,可以借助一个名为 **OpenSkills** 的开源工具来实现的。下面的流程图清晰地展示了从准备到使用的完整步骤,你可以一目了然地掌握整个过程。
14+
15+
```mermaid
16+
flowchart TD
17+
A[开始: 使用OpenSkills<br>在Cursor/Trae中部署Claude Skills] --> B[第一步:环境准备<br>安装Node.js与OpenSkills]
18+
A --> C[第二步:安装Skills<br>获取官方或第三方技能]
19+
A --> D[第三步:创建引导文件<br>生成AGENTS.md]
20+
A --> E[第四步:调用Skills<br>在对话中通过指令使用]
21+
22+
B --> B1[终端执行<br><code>npm i -g openskills</code>]
23+
C --> C1[终端执行<br><code>openskills install</code>]
24+
D --> D1[终端执行<br><code>openskills sync</code>]
25+
E --> E1[在编辑器对话中输入<br>特定指令调用技能]
26+
27+
B1 --> F[完成部署]
28+
C1 --> F
29+
D1 --> F
30+
E1 --> F
31+
```
32+
33+
下面,我们来详细讲解每个步骤的具体操作。
34+
35+
### 详细步骤与使用方法
36+
37+
#### 第一步:安装 OpenSkills 工具
38+
39+
OpenSkills 是一个命令行工具,它是让非 Claude 官方环境(如 Cursor、Trae)能够使用 Claude Skills 的关键桥梁。
40+
41+
- **操作**:打开终端(Terminal),输入以下命令进行全局安装:
42+
43+
```bash
44+
npm install -g openskills
45+
```
46+
47+
这只需要执行一次。
48+
49+
#### 第二步:安装所需的 Claude Skills
50+
51+
安装好 OpenSkills 后,下一步是将具体的 Skills 安装到你的项目中。
52+
53+
- **安装官方Skills**:在项目的根目录下,执行以下命令。你可以选择将技能安装到当前项目或全局环境。例如,安装到当前项目:
54+
55+
```bash
56+
openskills install anthropics/skills
57+
```
58+
59+
运行后,会看到一个交互界面,让你选择要安装的特定技能(如 `pdf`, `frontend-design`, `pptx` 等)。默认是全选,你可以用空格键勾选自己需要的。
60+
- **安装第三方Skills**:你也可以安装社区开发的技能,只需要替换掉仓库地址即可:
61+
62+
```bash
63+
openskills install https://github.com/某个技能仓库地址.git
64+
```
65+
66+
- **验证**:安装成功后,你的项目文件夹里会出现一个 `.claude/skills` 目录,里面包含了所有安装好的技能文件。
67+
68+
#### 第三步:创建 AGENTS.md 引导文件
69+
70+
这是最关键的一步,前两步只是准备了“工具包”,这一步是创建让 AI 编程助手能发现并使用这些工具包的“说明书”。
71+
72+
- **操作**
73+
1. 首先,在项目根目录**手动创建一个名为 `AGENTS.md` 的空文件**
74+
2. 然后,在终端运行同步命令:
75+
76+
```bash
77+
openskills sync
78+
```
79+
80+
3. 同样在交互界面中选择你希望写入 `AGENTS.md` 文件的技能,确认后回车。OpenSkills 就会将技能的摘要信息写入该文件,AI 助手(如 Cursor 的 Agent)就能据此识别可用的技能了。
81+
82+
#### 第四步:在对话中调用 Skills
83+
84+
完成以上配置后,你就可以在 Cursor 或 Trae 的聊天窗口中通过特定的指令来调用技能了。
85+
86+
- **自动调用**:当你的需求描述匹配某个已安装技能时,AI 助手可能会自动判断并调用该技能。
87+
- **手动调用**:更可靠的方式是直接在提示词中明确指定。指令格式通常为:“调用 [技能名] skills, [你的具体需求]”。
88+
- **示例1**(前端设计):`调用 frontend-design skills,用HTML开发一个视频剪辑软件的SaaS介绍页`
89+
- **示例2**(文档处理):`使用 pdf skills,对2025年11月17日周例会.pdf进行解析,提出要点给我`
90+
91+
## 高级通用模式(Advanced Universal Mode)
92+
93+
`https://github.com/numman-ali/openskills?tab=readme-ov-file#advanced-universal-mode-for-multi-agent-setups` 部分,OpenSkills 文档介绍了 **高级通用模式(Advanced Universal Mode)**,这是一种使用Claude Code配置多代理(Multi-Agent)协作的配置方案。以下是该部分的核心内容解析和注意事项:
94+
95+
### 核心功能:多代理协作模式
96+
97+
该模式允许你在同一项目中使用Claude Code配置多个 Claude 代理(Agents),每个代理专注于不同领域的任务(如代码生成、文档解析、UI设计等),并通过 OpenSkills 实现代理间的协同工作。
98+
99+
#### 配置步骤
100+
101+
1. **创建多代理配置文件**
102+
在项目根目录创建 `.claude/agents.json` 文件,定义多个代理及其关联技能:
103+
104+
```json
105+
{
106+
"agents": [
107+
{
108+
"name": "Code Agent",
109+
"description": "负责代码生成和优化",
110+
"skills": ["code-optimizer", "debugger"]
111+
},
112+
{
113+
"name": "Doc Agent",
114+
"description": "处理文档解析与总结",
115+
"skills": ["pdf", "pptx"]
116+
}
117+
]
118+
}
119+
```
120+
121+
2. **同步代理配置**
122+
运行命令同步配置到 `AGENTS.md`
123+
124+
```bash
125+
openskills sync --multi-agent
126+
```
127+
128+
此时 `AGENTS.md` 会生成多个代理的摘要,供 AI 按需调用。
129+
130+
3. **调用特定代理**
131+
在对话中通过代理名指定使用的代理:
132+
133+
```markdown
134+
调用 [Code Agent] 代理:优化这段 Python 代码...
135+
```
136+
137+
### **关键注意事项**
138+
139+
1. **代理冲突风险**
140+
- 如果多个代理的技能有重叠(例如两个代理都安装了 `pdf` 技能),AI 可能无法确定调用哪个代理。
141+
- **解决方案**:在 `agents.json` 中明确划分技能归属,或通过提示词指定代理名。
142+
143+
2. **全局代理与项目代理的优先级**
144+
- 若同时存在全局安装的代理(通过 `openskills install -g`)和项目本地代理,**项目本地代理优先级更高**
145+
- 可通过 `openskills list-agents` 查看当前生效的代理列表。
146+
147+
3. **代理间的上下文隔离**
148+
- 每个代理的上下文(记忆、技能状态)是独立的。若需要跨代理共享数据,需手动传递信息(如通过文件或中间变量)。
149+
150+
4. **资源占用问题**
151+
- 同时运行多个代理可能显著增加内存/CPU 占用,尤其在处理大文件(如 PDF 解析)时。
152+
- **建议**:在轻量级任务中启用多代理,复杂任务按需逐个调用。
153+
154+
---
155+
156+
### **典型使用场景**
157+
158+
| 场景 | 配置方案 |
159+
|---------------------|------------------------------------------|
160+
| **代码+文档双核协作** | Code Agent(代码技能) + Doc Agent(文档技能) |
161+
| **多语言开发** | Python Agent + JS Agent + Rust Agent |
162+
| **设计+前端联动** | UI Designer Agent + Frontend Dev Agent |
163+
164+
---
165+
166+
### **故障排查**
167+
168+
若遇到代理未响应:
169+
170+
1. 检查 `agents.json` 语法是否正确(可通过 `JSONLint` 验证);
171+
2. 运行 `openskills sync --debug` 查看同步日志;
172+
3. 确保 `AGENTS.md` 未被手动修改(否则会覆盖配置)。
173+
174+
通过此模式,你可以构建一个“AI 团队”,让不同代理各司其职,显著提升复杂任务的完成效率。如需进一步优化协作流程,可结合 OpenSkills 的 `hook` 功能(如任务完成后自动触发下一个代理)。
175+
176+
## 总结
177+
178+
希望这份指南能帮助你在 Cursor 和 Trae 中顺利运用 Claude Skills 来提升你的编程效率。如果你在某个具体步骤(比如安装或调用)中遇到问题,可以告诉我,我很乐意提供更详细的帮助。
179+
180+
## 参考文献
181+
182+
- [Github: OpenSkills](https://github.com/numman-ali/openskills)

content/zh/baidu/ernie4.5_open_now.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,13 @@ draft: false
55
tags: ["Opensource", "ERNIE-4.5", "论文", "技术"]
66
categories: ["large_models"]
77
description: "本文介绍了百度开源的ERNIE 4.5模型,并对其技术原理、主要贡献、论文方法、评估结果和局限性进行了详细解读。"
8-
8+
wordCount: 8051
9+
readingTime: 33
910
ai_cover: "static/images/generated-covers/16d7468d046dab9d04831d6934b4fe05.webp"
1011
cover:
1112
image: "static/images/generated-covers/16d7468d046dab9d04831d6934b4fe05.webp"
1213
alt: "ERNIE 4.5 技术报告解读"
1314
ai_generated: true
14-
wordCount: 8051
15-
readingTime: 33
1615
---
1716

1817

content/zh/celebrity_insights/Ilyasutskever.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ draft: false
66
tags: ["AI","Ilya Sutskever"]
77
categories: ["celebrity_insights"]
88
description: "Ilya Sutskever在各个场合的观点"
9+
wordCount: 5602
10+
readingTime: 23
911

1012
ai_cover: "/images/generated-covers/7667e514eb0042e927794ee19c26ce90.webp"
1113
cover:

content/zh/companies/tml/ThinkMachineLab.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,3 +67,8 @@ TML 的核心战略就是:**Commoditize the Base Model, Monetize the Customiza
6767
**让基座模型商品化/基础设施化,通过定制化服务来变现。**
6868

6969
他们赌的是:未来不会只有一个超级模型统治世界,而是会有成千上万个针对特定场景优化的垂直模型。而他们,就是制造这些垂直模型的 “**精密机床厂**”。
70+
71+
## 参考文献
72+
73+
* [Thinking Machines Lab](https://thinkingmachines.ai/)
74+
*

0 commit comments

Comments
 (0)