从静态投资组合到索引化决策 📃
Source: Dev.to
这是一篇提交给 Algolia Agent Studio Challenge:面向消费者的非对话式体验的作品
🦄 我一看到这个挑战与 New Year, New You Google 挑战相结合,就立刻知道该做什么。说实话,我早就想做一个作品集,只是一直没把它放在优先位置。这个挑战终于让我足够感兴趣,决定把这个想法付诸实践。
此外,当背后有故事时,展示 为什么某件事有效会更令人满足。如果你想直接跳到后面,至少请仔细阅读第一部分。
静态作品集把决策当作叙事。本项目把它们视为数据。
Source:
我构建的内容
这个以后端为中心的项目并不是为漂亮的 UI 而建造的;它是为系统而生的。我创建了一个 非对话式作品集,它的运作像一台润滑良好的机器,而不是一个静态的展示。
传统作品集需要解读。这个系统彻底消除了这种解读。
当我最初设想我的作品集网站时,我希望它能与常见的 LinkedIn 简历回声区分开来。我在最好的日子里也对“普通”有强烈的过敏反应,但仅靠新奇是无法扩展的。我同样明白,网站必须依托足够强大的基础设施,以承受我不断的实验和随时间变化的做法。
于是,这些想法自然汇聚成一个决定:构建一个实时记录我的项目、挑战和决策的活日志。
在这里,决策是一级记录,而不是解释性的散文。
这将使未来的我在几个月后查询时,能够回答那句不可避免的自问:“当时你到底在想什么?”
一看到这个挑战帖,我就开始记录每一个挑战、决策、结果和约束。这个过程从我能够从现有 GitHub 项目中重建的所有内容开始。
🦄 即使我记录了每一次改变想法的细节,这种索引结构也完全能够应付。别担心——我并没有做到那么极致。
索引设计
索引就是系统本身。如果它失效,其他一切都无关紧要。
一旦我在 UI 端掌握了控制助手代理的方式,索引就成了真正的工作重点。设计它、拆解它、以及策划它耗费了最多的时间。早期的模式在检索性能上并不理想,但在研究了 Algolia 的最佳实践指南后,终于恍然大悟。
结果是一组针对检索进行优化的小型原子记录。
这些记录通过分面(facets)和使用信号强度以及记录创建时间的确定性排序,为干净的用户体验提供动力。
下面是直接从站点上抓取的真实示例:
[
{
"objectID": "card:project:challenge:algolia-agent-studio-2026-02",
"title": "Algolia Agent Studio Challenge participation",
"blurb": "An applied exploration of conversational retrieval.",
"fact": "I participated in the Algolia Agent Studio DEV Challenge during February 2026, focusing on conversational and non‑conversational search behavior using indexed content.",
"tags.lvl0": ["DEV Challenge", "Approach"],
"tags.lvl1": [
"DEV Challenge > Algolia Agent Studio",
"Approach > Experimentation"
],
"projects": ["System Notes"],
"category": "Experience",
"created_at": "2026-02-08T05:42:00-05:00",
"signal": 5
}
]
为什么会有这些字段
signal– 在排序时控制相关性压力created_at– 稳定随时间的排序顺序- 分层标签 – 实现细化而不稀释结果
- 受限类别 – 防止出现模糊的分组
🦄 如果你在想,我并不是手动编写这些记录。我定义了规则和约束,交给 ChatGPT 生成,并在仓库的 System Notes v2.0.0/Algolia 中手动跟踪生成的 JSON 文件。
Source: …
将 Ask AI 作为搜索
此项目同时包含对话聊天界面和 Ask AI 搜索 体验。
对于本条目,Ask AI 被有意视为纯粹的搜索界面,而非对话代理。
对话状态是可选的;这些结果仅考虑针对 Algolia 索引执行的非对话查询。
我评估了随时间变化的检索性能——具体包括速度、相关性和一致性——并在此过程中对索引配置、排序规则和分面进行迭代改进。
如果相同的查询未返回相同的结果,则说明配置尚未完成。
系统现在能够快速且可预测地返回正确的索引记录,无需重新构造查询。


实时演示
该站点部署在 ,以便与之前的挑战提交分开。
尝试搜索“Algolia”或通过左侧的类别进行筛选,以加载相关结果。
当前规范:
Source code: System Notes v2.0.0
🦄 如果您想要完整的对比快照,原始站点仍然在 上线上。该版本与 Algolia 驱动的构建之间的差异非常显著。
Algolia Agent Studio 实践
单靠设计良好的索引并不足够。
检索质量取决于配置纪律,而非功能数量。
在调优该系统时,我测试了 Algolia 配置面板中可用的大多数选项。影响最大的改动是积极限制可搜索属性并收紧 facet(分面)定义。
我还发现,过度宽松的同义词扩展会对代理检索速度产生负面影响,因此我们有意将其缩减。
保持索引同步
为了避免手动复制内容,我配置了 Algolia 爬虫,使用我的 AI 优化镜像站点对 DEV 的内容进行索引。
这使得索引能够在无需人工干预的情况下保持权威性。
该爬虫是一个轻量级的 JavaScript 配置,直接在 Algolia 仪表板上管理。
💡 爬虫配置文件存放在仓库的
apps/api/algolia/sources/crawler.js (System Notes v2.0.0)
调优与分析
一次不幸的 API‑key 错误导致我无法保留完整的历史分析数据。
即便如此,仍使用分析来确认在重复查询下检索行为已趋于稳定。
🦄 需要说明的是,Algolia 在你记录了原始密钥的情况下可以轻松恢复 API‑key。显然,我没有记录。
为什么快速、可预测的检索很重要
在使用 Algolia 之前,用户必须依赖我来记住并记录每一个与项目相关的有意义决策。
这无法扩展。检索可以。
现在我拥有一个系统,能够在活跃的构建中快速检索 数百条决策层级记录。
| 原始设计 | 与 Algolia 配合 | 观察到的改进 |
|---|---|---|
| 显示已完成工作的项目卡片 | 选择卡片被索引为搜索记录 | ✅ 实现 决策层级检索 而非内容浏览 |
| 项目显示为静态工件 | 可搜索的受限决策序列 | ✅ 展示 检索优先的系统思维 |
| 仅有叙述性解释 | 基于检索的记录并附有理由 | ✅ 证明答案 基于已索引的数据 |
| 通用作品集导航 | Algolia 驱动的发现作为主要用户体验 | ✅ 使 Algolia 成为 体验的结构性要素 |
| “与 AI 对话” 作为功能 | AI 层叠在 Algolia 检索之上 | ✅ 表明 有意的 AI 限制 |
| 数据缺失时的静默空白 | 结果中显现回退逻辑 | ✅ 展示 真实世界的约束处理 |
没有 Algolia,这个系统不存在。它不是一个增强,而是基础。
接下来
我时间用完了,这个挑战有硬性截止。
如果可以选择,我更优化了检索的稳定性而非功能的广度。
有时间时,接下来的步骤如下:
- 为自定义 URL 路由接线,使搜索结果可直接访问
- 完成基于真实用户交互事件的推荐
- 引入 Supabase 作为索引记录的后端存储,以支持长期增长
- 将现有项目卡迁移到新的索引记录格式
- 继续进行 UI 精细化和性能调优
🦄 获奖者公布后,此站点将仅在 作为我的官方作品集进行托管。
🛡️ 边缘的署名
这篇文章由人类撰写,在撰写过程中使用了 ChatGPT 进行编辑、澄清以及结构上的紧凑。最终的形态、技术主张和决策均由人类完成。



