总览

learn 索引 | 主题索引

1. 一句话定位

Khoj = “对话即可创建的定时 AI 研究助理”。 不是流程编排(AP/n8n),不是 chatbot 平台(Dify/Coze),也不是个人 IM 助手(OpenClaw);它专做”按时跑 + AI 自主决定怎么跑 + 把结果推给你”。

2. 顶层架构

flowchart TD
    User[用户] -->|"对话:每天9点做X"| Chat[Khoj Chat 接口]
    Chat -->|crontime_prompt| LLM[LLM 解析]
    LLM -->|cron + query + subject| Sched[APScheduler]
    Sched -->|到点触发| Exec[scheduled_chat 执行器]
    Exec -->|内部 HTTP 自调用| Chat2[Khoj Chat 接口]
    Chat2 -->|11 个工具自由调度| Tools[工具层]
    Tools --> Out[AI 输出]
    Out -->|should_notify 判断| Notify{值得通知?}
    Notify -->|是| Email[邮件/WhatsApp/Phone]
    Notify -->|否| Skip[静默跳过]

要点:

  • “创建任务”和”执行任务”都走同一条 Chat 链路,区别是 /automated_task 前缀触发自动化分支
  • 调度器是 APScheduler(生产级 Python 调度框架,非系统 cron)
  • “结果是否值得发”由 LLM 二次判断,避免每次都骚扰你

3. 内置 11 个工具(AI 自主调度)

工具枚举中文职责
Online / SearchWeb互联网搜索
Webpage / ReadWebpage抓取指定 URL 正文
Research多轮迭代深度研究
Notes读个人知识库(Notion / 上传文档 / Obsidian)
Code / PythonCoder跑 Python 处理数据、做计算、出图
Operator / OperateComputer操作浏览器(截图、填表、点按钮)
Image文生图
Diagram出流程图/示意图
ViewFile / ListFiles / RegexSearchFiles / SemanticSearchFiles文件查/搜

源码出处:src/khoj/utils/helpers.py:415 class ConversationCommand(str, Enum)

任务到点执行时,AI 会根据任务内容自主决定调用哪些工具——这正是”按需自动采集”的本意。

4. 与同类工具差异

维度KhojActivePiecesOpenClawDify
对话创建采集任务🌟🌟🌟 主场❌ 手工配 trigger⚠️ chat 而非任务⚠️ App Generator 偏 chatbot
AI 自主决策怎么查🌟🌟🌟 11 工具自由调❌ 死板执行步骤🌟🌟 agent 形态🌟 LLM Chain
触发:定时✅ APScheduler,最细到小时✅ Schedule trigger,分钟级✅ croner 模块✅ 1.x 有 schedule trigger
触发:外部 webhook🌟🌟🌟 主场⚠️ Gateway HTTP
数据来源:网络✅✅ Online + Webpage + Operator⚠️ piece-fetch✅ extension/browser✅ web search 节点
数据来源:邮箱(IMAP)❌ 不在能力图里✅✅ piece-imap⚠️
数据来源:Notion✅ 原生✅ piece-notion
推送:邮件✅✅ 原生 send_task_email✅ piece-smtp⚠️
推送:国内 IM⚠️ webhook + HTTP piece✅✅ feishu/wechat/qq⚠️
推送:WhatsApp✅ Twilio✅ piece-twilio

5. 关键限制(避免选错场景)

5.1 触发粒度限制

# api_automation.py:91
if not minute_value.isdigit():
    return Response("Minute level recurrence is unsupported", status_code=400)

意思是 cron 分钟字段必须是固定数字(如 0 9 * * * 可以,*/5 * * * * 不可以)。最细粒度是小时,不能做”每 5 分钟轮询”。

5.2 同任务 6 小时去重

# helpers.scheduled_chat
if (now - last_run_time) < 6 hours: skip

同一任务两次执行间隔必须 ≥ 6 小时,防多线程重复跑。这对”每天/每周”完全够;想做”每小时”在 Khoj 行不通。

5.3 不能消费”事件”

Khoj 是主动拉取型——定时去查、去搜、去读。不是事件驱动型——没法监听外部 webhook、没法收一封新邮件就触发。事件触发场景请用 AP。

5.4 推送渠道相对单薄

原生只有邮件 + WhatsApp + Phone。要推飞书/钉钉/企业微信群,要么走 webhook 自己接,要么让 Khoj 推到一个”中转邮箱”由 AP 中继。

6. 适合 Khoj 的典型场景

  • 每天定时搜某主题、AI 总结成中文简报、邮件给我
  • 每天读 Notion 里某 tag 的笔记、AI 整理待办、邮件提醒
  • 每周抓 GitHub Trending / Hugging Face 新模型 / arXiv 新论文,按主题筛后简报
  • 每天用 Operator 打开网页填表查数据并截图记录

7. 不适合 Khoj 的场景

  • 读 Gmail/QQ 邮箱新邮件后总结推送 → 用 ActivePieces piece-imap
  • 接外部 SaaS webhook 触发链路 → 用 ActivePieces
  • 实时事件流(IoT 上行、监控告警)→ 用 ActivePieces 或自写脚本
  • 推送到飞书/微信/企业微信群(无中继)→ 用 OpenClaw 或 AP webhook