news 2026/10/7 19:31:53

给 AI agent 造一个“认识你“的后台:Kith / agent-sys 的设计笔记与 TaoToken 接入实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
给 AI agent 造一个“认识你“的后台:Kith / agent-sys 的设计笔记与 TaoToken 接入实践

1. 为什么每个 AI agent 都要你重新自我介绍一遍

先说一个我反复遇到的场景:早上在 Cursor 里改一个 Python 解析模块,中午切到 Claude Code 继续调同一份逻辑,晚上又用 Codex 写测试。三个工具都很聪明,但它们有一个共同点——失忆。每开一个新会话,我都得重新交代:项目在哪个目录、我习惯用什么命名风格、上次那段 parsing 逻辑放在哪个文件、~/Downloads里的东西别动那是临时的。关掉窗口,这些上下文全部蒸发。

这不是模型能力问题,是架构问题。当前主流 agent 工具的记忆是「会话级」的,会话结束即销毁。你当然可以把这些信息塞进 system prompt,但那只解决了「被问才回答」的一半。更往前一步的问题是:能不能有一个常驻后台,持续观察你在这台设备上的信息,主动积累对你的理解,让所有 agent 工具共享同一份「你是谁」的认知?

这就是 Kith / agent-sys 想解决的问题。一句话概括:它是一个常驻本地的守护进程(daemon),持续扫描你指定的目录,用 LLM 理解每个文件,把结果存进本地 SQLite,再通过 RPC 暴露给外部 agent 调用。它默认扫~/Documents、~/Desktop,LLM 负责给文件打标签、做摘要、抽取知识点、生成个人画像,对外提供 Unix Socket 和 HTTP 两种接口,数据 100% 留在本地(除了发给 LLM 的那一小部分内容)。

适合谁?如果你同时用两个以上 AI 编码工具、经常需要重复交代背景、或者在做本地 agent 基础设施,这套东西值得一看。本文会给出可复制的 daemon 配置、RPC 接口定义、TaoToken 接入参数,并演示一次完整的 agent 记忆读写验证流程。核心检索词就三个:Kith、agent-sys、AI agent 长期记忆后台。

2. 为什么选 daemon 而不是 MCP server,以及 TaoToken 前置准备

这是我做的第一个硬决策,也是很多人会问的:现在 MCP 这么火,为什么不用 MCP server?

答案在生命周期。MCP server 是由调用方拉起、调用方退出时终止的。而 agent-sys 要做的事——慢慢扫 21 万个文件、每天跑一次 daily report、watch 文件变化——天然需要独立寿命。你 Cursor 关了我还得跑,你 Claude Code 退出了索引不能停。所以形态上必须是 daemon,协议层用最无聊的 HTTP:任何语言、任何工具,只要能发 HTTP 就能用。MCP 那套 stdio 通信、capability negotiation 的复杂度,在本地单用户单机场景下一点都用不上。

选协议时先问「我在解决什么问题」,不是「什么协议最新最潮」。

接下来是模型能力接入。daemon 里的 LLM 业务逻辑(triage 分诊、summarizer 摘要、cron 决策)都需要调模型。如果每个 agent 各自配一套 Key,管理会非常乱。我的做法是用 TaoToken 统一 Key/API 通道,所有模型调用走同一个入口。

TaoToken 是什么?它是一个统一的模型 API 网关,把不同厂商的模型能力收敛到一套 Base URL + Key 的调用方式上。对 agent-sys 这种「一个 daemon 里跑十几个 agent、每个 agent 可能用不同模型」的场景特别合适——你不需要为每个 agent 单独申请和轮换 Key,改一处配置就能切换底层模型。

前置准备三步:

第一步,注册并拿到 Key。访问官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 完成注册,然后进控制台 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console 创建 API Key。Key 只在创建时显示一次,记得立刻存到安全的地方。

第二步,确认你要用的 Model ID。进模型对话页 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=model_chat 可以试跑,确认哪个模型适合你的 triage 和 summarizer 任务。triage 这种批量分类任务用便宜快速的模型就够,summarizer 需要理解长文本可以选能力更强的。

第三步,记下 API 地址。TaoToken 的 API 端点是 https://taotoken.net/api(注意这个地址不加 UTM 参数,直接用于代码里的 Base URL)。

三件套凑齐:Base URL =https://taotoken.net/api,Key = 你刚创建的那串,Model ID = 你在对话页确认的模型名。后面所有配置都围绕这三个值展开。

3. 可复制的 daemon 配置与 TaoToken 接入参数

这一节是全文最实操的部分。agent-sys 的配置分两块:daemon 自身的运行配置,和 LLM 通道的接入配置。我按文件路径给你完整片段,直接抄改就能跑。

先看 daemon 主配置config/default.yaml。这里定义扫描范围、triage 规则、调度策略:

# config/default.yaml daemon: host: 127.0.0.1 port: 7437 socket_path: ~/.agent_sys/agent_sys.sock auth_token_path: ~/.agent_sys/auth_token scan_roots: - ~/Documents - ~/Desktop watch: true triage: skip_path_patterns: - site-packages/ - node_modules/ - .cursor/extensions/ - __pycache__/ - .venv/ file_type_priority: .md: 9 .py: 8 .docx: 9 .txt: 2 hints: - "Downloads 文件夹里的 PDF 多是学习资料,值得总结" - "带 test_ 前缀的 python 文件通常是测试,可以降级" memory: lru_cache_size: 5000 sqlite_path: ~/.agent_sys/memory.db scheduler: max_concurrency: 4 daily_report_at: "03:00"

然后是 LLM 通道配置,这是 TaoToken 接入的核心。agent-sys 把所有模型调用收敛到一个llm配置块,用 OpenAI 兼容格式:

# config/llm.yaml llm: provider: openai_compatible base_url: "https://taotoken.net/api" api_key: "${TAOTOKEN_API_KEY}" default_model: "claude-sonnet-4-5" timeout: 120 max_retries: 3 agents: triage: model: "gpt-4o-mini" temperature: 0.1 max_tokens: 512 summarizer: model: "claude-sonnet-4-5" temperature: 0.3 max_tokens: 2048 cron_decider: model: "gpt-4o-mini" temperature: 0.0 max_tokens: 1024

注意api_key用的是环境变量引用,不要把 Key 硬编码进文件。启动前导出:

export TAOTOKEN_API_KEY="sk-你的key"

如果你用 Claude Code 做开发,它的配置在~/.claude/settings.json,同样三件套:

{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "sk-你的key", "ANTHROPIC_MODEL": "claude-sonnet-4-5" } }

如果你用 Codex,配置在~/.codex/auth.json:

{ "OPENAI_BASE_URL": "https://taotoken.net/api", "OPENAI_API_KEY": "sk-你的key", "model": "gpt-4o-mini" }

三件套在任何工具里都是同一个逻辑:Base URL 指向 TaoToken 的 API 端点,Key 用你创建的那串,Model ID 用你在对话页确认的。Cline 的 MCP 配置也是同理,在cline_mcp_settings.json里把 provider 设成 openai compatible,base_url 填https://taotoken.net/api。

配置写完后启动 daemon:

python -m agent_sys.kernel.daemon --config config/default.yaml --llm-config config/llm.yaml

启动日志里会看到子系统初始化顺序:kernel 加载生命周期、syscall 挂载 RPC 端点、scheduler 启动优先级队列、memory 打开 SQLite、agents 注册业务逻辑。如果 LLM 通道配置正确,你会看到llm channel ready: https://taotoken.net/api这一行。

4. 验证一次完整的 agent 记忆读写流程

配置跑起来只是第一步,真正要验证的是「agent 能不能读到关于你的记忆」。这一节走一遍完整流程:写入记忆、通过 RPC 读取、让外部 agent 消费。

先确认 daemon 活着:

curl http://127.0.0.1:7437/health # {"status": "ok", "uptime": 42, "agents": 12}

/health和/status不鉴权,方便监控。/syscall和/reload必须带 token。token 在~/.agent_sys/auth_token,权限 0600:

TOKEN=$(cat ~/.agent_sys/auth_token)

现在触发一次 triage,让 daemon 扫描并理解文件。这一步会调 TaoToken 通道:

curl -X POST http://127.0.0.1:7437/syscall \ -H "X-Agent-Token: $TOKEN" \ -H "Content-Type: application/json" \ -d '{"call_type": "triage.run", "params": {"limit": 200}, "caller": "manual"}'

返回会告诉你分诊了多少文件、跳过了多少、消耗了多少 token。第一次跑建议 limit 设小一点,确认通道通了再放大。

接着写入一条显式记忆——比如告诉 daemon「X 是 Y 的代号」:

curl -X POST http://127.0.0.1:7437/syscall \ -H "X-Agent-Token: $TOKEN" \ -H "Content-Type: application/json" \ -d '{"call_type": "memory.write", "params": {"key": "codename", "value": "Kith 指代 agent-sys 项目", "tags": ["project"]}, "caller": "manual"}'

然后读取用户上下文简报,这是外部 agent 最常调的端点:

curl -X POST http://127.0.0.1:7437/syscall \ -H "X-Agent-Token: $TOKEN" \ -H "Content-Type: application/json" \ -d '{"call_type": "report.brief", "params": {}, "caller": "cursor"}'

返回是一段自然语言简报,包含你最近在做什么、有哪些高优先级文件、显式记忆里的代号。这就是「认识你」的后台对外输出的东西。

最后一步,让 Cursor 或 Claude Code 通过 skill 消费它。skill 就是一个带 YAML frontmatter 的 markdown,丢进~/.cursor/skills/或~/.claude/skills/:

--- name: agent-sys-user-context description: Use when the user asks "based on what you know about me", "what have I been working on", "do you know me yet". --- You have access to a local daemon. To fetch the user's current context: ```bash TOKEN=$(cat ~/.agent_sys/auth_token) curl -X POST http://127.0.0.1:7437/syscall \ -H "X-Agent-Token: $TOKEN" \ -d '{"call_type": "report.brief", "params": {}, "caller": "cursor"}'

Return a one-paragraph synthesis grounded only in the brief.

skill 是接入面,daemon 是能力源。同一份 SKILL.md 丢进不同工具的 skills 目录都能工作,不用为每个新 agent 工具单独开发集成。 验证成功的标志:你在 Cursor 里问「你了解我吗」,它不再让你从头介绍,而是直接说出你最近在做的项目和偏好。那一刻这套后台就算跑通了。 ## 5. 本篇常见报错排查:401、local proxy failed、reading choices、OAuth 配置和验证过程中最容易踩的坑集中在四类报错。我按真实遇到的顺序列出来,对照排查。 **401 unauthorized**。这是最高频的。分两种:一种是 daemon 的 `X-Agent-Token` 不对,检查 `~/.agent_sys/auth_token` 内容和你 header 里带的是否一致,注意别把换行符带进去。另一种是 TaoToken 通道的 Key 不对,检查 `TAOTOKEN_API_KEY` 环境变量是否导出、是否在 daemon 启动的同一个 shell 里。如果 Key 正确还报 401,确认 Base URL 是不是写成了带路径的形式——正确值是 `https://taotoken.net/api`,不要多加 `/v1` 之类的后缀。 **local proxy failed**。这个报错通常出现在 daemon 尝试连 LLM 通道时。先确认 `config/llm.yaml` 里 `base_url` 拼写正确,再确认本机网络能访问 `taotoken.net`。如果 daemon 跑在容器里,检查容器网络是否能出网。还有一种情况是 timeout 设太短,长文本摘要任务 120 秒不够,调到 300。 **reading choices 相关报错**。这类报错一般出现在解析 LLM 返回时。TaoToken 返回的是 OpenAI 兼容格式,`choices[0].message.content` 是正文。如果你的代码直接读 `response["content"]` 就会报 KeyError。检查你的解析逻辑是否按 `choices` 数组取。另外 triage 任务如果 max_tokens 设太小(比如 128),返回会被截断导致 JSON 解析失败,调到 512 以上。 **OAuth 相关报错**。如果你在 Claude Code 里看到 OAuth 报错,说明它还在走默认的登录流程而不是你配的 Base URL。检查 `~/.claude/settings.json` 里 `ANTHROPIC_BASE_URL` 和 `ANTHROPIC_API_KEY` 是否都设了,两个缺一不可。设完后重启 Claude Code,让它重新读配置。Codex 同理,检查 `~/.codex/auth.json` 的 `OPENAI_BASE_URL`。 排查通用思路:先看 daemon 日志里 LLM 通道那行是否 ready,再用一条最小 curl 直接打 TaoToken 的 API 确认 Key 和网络没问题,最后才怀疑业务代码。分层定位能省很多时间。 ## 6. 把记忆后台接进你的日常编码流 跑通之后,真正让它产生价值的是接进日常流程。我的做法是三个 skill 常驻:`agent-sys-user-context` 查上下文、`agent-sys-file-search` 搜文件、`agent-sys-admin` 管 daemon,加起来不到 300 行。每次开新会话,agent 自己判断该不该调,不需要我手动触发。 下一步值得做的是双向对话。现在 agent 只能读,还应该能写——通过 syscall 告诉 daemon「这个文件很重要,升级成 high」「帮我记住 X 是 Y 的代号」。单向消费变双向,后台才会越用越懂你。 如果你也在为「每次对 agent 都要重新自我介绍」挠头,或者在做类似的本地 agent 基础设施,可以从最小配置跑起:先配好 TaoToken 三件套,启动 daemon,跑一次 triage,再写一个 skill 丢进 Cursor。跑通那一刻你会明白,agent 不该每次被召唤才出现,它该是持续存在的背景智能。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/7 19:30:16

仿Bindows登陆渐变滚动条(1):用TaoToken统一Key跑通单向滚动动效

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/7 19:26:41

AI搜索进入分层时代:GEO如何决定内容生态的下一次洗牌

一、AI搜索流量分配的四个常见问题当用户习惯从“搜网页”转向“问AI要答案”,企业内容面临的第一个问题是:为什么有的品牌能被豆包、文心一言频繁引用,有的却连收录都困难?第二个问题是:大模型筛选信源时,…

作者头像 李华