Skip to content

Repository files navigation

Kimi Knowledge Desk

一个根据你的身份、兴趣爱好和关注内容不断成长的个人知识仓库。

收集文章、学习资料、项目文档或网页链接 → Kimi 自动生成摘要、标签、核心观点和学习建议 → 通过阅读、收藏与反馈,推荐内容会持续进化,形成「收集内容 — 理解内容 — 建立关联 — 持续更新」的自增长闭环。

功能特性

  • 🪪 个人画像:设置身份、专业、兴趣标签和关注主题
  • 📥 多种内容来源:直接粘贴文本 / Markdown,或输入网页链接自动抓取正文
  • 🤖 AI 分析(Kimi API):生成摘要、关键词标签、核心观点、内容分类、相关主题、下一步学习建议
  • 🃏 知识卡片:结构化展示分析结果,支持展开、收藏、修改标签、删除
  • 🧭 推荐主题:基于透明的本地评分算法(标签权重),随你的行为自动调整
  • 👍 反馈闭环:点击「有帮助 / 不相关」直接影响推荐结果
  • 💾 本地优先:所有数据存在浏览器 localStorage,无需数据库、无需登录
  • 🧪 Demo 模式:未配置 API Key 时使用本地示例数据,项目照常运行

技术栈

  • Next.js(App Router)+ TypeScript
  • Tailwind CSS v4
  • Vitest(推荐算法单元测试)
  • 无数据库、无登录系统、无向量数据库

快速开始

# 1. 安装依赖
npm install

# 2.(可选)配置 Kimi API Key
cp .env.example .env.local
# 编辑 .env.local,填入你的 KIMI_API_KEY

# 3. 启动开发服务器
npm run dev

打开 http://localhost:3000 即可使用。

运行测试

npm run test

测试验证推荐权重会根据用户反馈(有帮助 / 不相关)发生变化,见 __tests__/recommend.test.ts。

Demo 模式

如果没有配置 KIMI_API_KEY,项目会自动进入 Demo 模式:

  • /api/analyze 返回本地启发式分析结果(lib/demo-analysis.ts),不调用任何外部服务
  • 界面顶部会显示 Demo 模式提示
  • 添加内容、知识卡片、推荐主题、反馈闭环等所有功能均可正常体验

配置真实 Key 后刷新页面即可切换到 AI 分析。

Kimi API 调用说明

Kimi API 由 Moonshot AI 提供,采用 OpenAI 兼容格式。本项目在服务端直接 fetch 调用(不依赖 SDK):

  • 接口:POST https://api.moonshot.ai/v1/chat/completions
  • 鉴权:请求头 Authorization: Bearer <KIMI_API_KEY>
  • 默认模型:kimi-k2.6(可通过 KIMI_MODEL 覆盖)
  • 文档:https://platform.kimi.ai/docs/api-reference

调用流程(lib/kimi.ts):

  1. 服务端将用户提交的标题和内容(截断到 2 万字符)连同 system prompt 发给 Kimi
  2. 要求模型只返回 JSON(摘要 / 标签 / 核心观点 / 分类 / 相关主题 / 下一步建议)
  3. 对返回内容做容错解析(剥离 markdown 代码块、提取最外层花括号)
  4. 60 秒超时保护,失败时返回明确错误信息

API Key 只在服务端读取(process.env.KIMI_API_KEY),不会打包进前端代码。

环境变量

变量 必填 说明
KIMI_API_KEY 否 Kimi API 密钥,不填则进入 Demo 模式
KIMI_MODEL 否 模型名称,默认 kimi-k2.6
KIMI_BASE_URL 否 API 基础地址,默认 https://api.moonshot.ai/v1

项目结构

├── app/
│   ├── layout.tsx              # 根布局(中文 lang、页面元信息)
│   ├── page.tsx                # 知识工作台主页面(客户端状态管理)
│   ├── globals.css
│   └── api/
│       ├── analyze/route.ts    # 内容分析:有 Key 走 Kimi,无 Key 走 Demo
│       └── fetch-url/route.ts  # 网页链接正文抓取(服务端,避免 CORS)
├── components/
│   ├── Sidebar.tsx             # 左侧导航
│   ├── ProfilePanel.tsx        # 右侧个人画像 / 学习进度 / 推荐主题
│   ├── KnowledgeCard.tsx       # 知识卡片
│   ├── AddContentDialog.tsx    # 添加内容对话框
│   ├── TagEditor.tsx           # 标签编辑器
│   ├── SimpleChart.tsx         # 学习进度条(无图表库)
│   └── EmptyState.tsx          # 空状态
├── lib/
│   ├── types.ts                # 数据类型定义
│   ├── storage.ts              # localStorage 读写(含错误处理)
│   ├── recommend.ts            # 标签权重评分与推荐算法
│   ├── kimi.ts                 # Kimi API 服务端封装
│   ├── demo-analysis.ts        # Demo 模式本地分析
│   └── demo-data.ts            # 示例数据
├── __tests__/recommend.test.ts # 推荐算法测试
├── .env.example
├── LICENSE                     # MIT
└── README.md

推荐算法

第一版使用简单、透明、可解释的本地评分(lib/recommend.ts):

行为 对标签权重的影响
阅读条目 +2
收藏条目 +2
点击「有帮助」 +1
点击「不相关」 −3
  • 权重限制在 [-10, 20],负权重标签不会再出现在推荐中
  • 与用户兴趣 / 关注主题匹配的标签额外 +1.5
  • 推荐主题来自知识卡片的标签与关联主题,按总分排序
// ponytail: simple local scoring; replace with embeddings/vector search only when scale requires it

数据隐私说明

  • 所有用户数据(内容、分析结果、个人信息、标签权重)仅保存在你自己的浏览器 localStorage 中,不会上传到任何服务器,项目也没有任何数据收集
  • 点击「添加并分析」时,你粘贴的标题和内容会通过本项目自己的 API 路由转发给 Kimi API 用于生成分析,除此之外不发送到任何第三方
  • 网页抓取功能由服务端代为请求你提供的 URL
  • 清除浏览器数据(或使用页内删除按钮)即可彻底删除所有本地数据
  • 请勿在公开部署实例中粘贴敏感个人信息

部署

任意支持 Next.js 的平台均可部署(如 Vercel):

  1. 将代码推送到 GitHub
  2. 在平台中导入仓库
  3. 在环境变量设置中添加 KIMI_API_KEY(如需要)
  4. 部署完成

注意:部署到公网后,用户数据仍只存在各自浏览器本地,但 /api/analyze 会消耗你账号的 Kimi API 额度,建议只部署给个人或小范围使用。

测试

npm run test

包含的最小测试验证:正向反馈提高标签权重、负向反馈降低权重并将其移出推荐、反馈变化会改变推荐排序。

License

MIT

About

Kimi Knowledge Desk

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages