跳到主要内容

Agent 与对话历史

对话历史保存在夜莺服务端,可查看和删除;开源版的「Agent」是内部绑定,不是可以自行创建的对象。

这页上有两件不太相干的事,先说清楚区别:对话历史是天天在用的真功能; 而**「Agent」在开源版里是一个内部绑定,不是你能创建的东西**—— 细节放在下半页,免得你去找一个并不存在的页面。

对话存在哪​

每一轮对话都是边发生边落库的,所以刷新页面、换个浏览器、重启 n9e 都不会丢。 两张表装着它:

表装什么
ai_assistant_chat一次对话一行:id、归属用户、标题、最后活跃时间
ai_assistant_message一轮一行:你的问题、回答,以及背后的工具调用

两张表的正文都是压缩存的,实际占用比看聊天记录想象的要小。

对话严格按用户隔离。 每一次读写都会校验请求账号是不是这次对话的主人, 管理员也没有例外,所以别人的对话你看不到——走 API 也一样。

/a2a 上的对话就是同一个对象:调用方回传的 contextId 就是 chat_id, 所以通过 A2A 跟夜莺说话的 Agent,会和这个用户在浏览器里敲的对话 出现在同一个列表里。

一次对话能做什么​

Nightingale AI 侧栏的会话区列出你自己的对话,按最近活跃排序, 分成今天 / 昨天 / 更早,上面那个框按标题过滤。鼠标移到某一行会出现一个菜单:

  • 重命名——就地改。不改的话标题是根据第一个问题自动生成的, 改过之后就锁住,自动标题不会再覆盖它;
  • 分享——复制一个以只读模式打开该对话的链接。服务端每次读取仍然校验归属, 所以这个链接只有你自己打得开;把它当成一个指向只读视图的书签, 而不是把聊天记录交给同事的手段。要给同事看,把文字复制过去。

怎么删​

界面上没有删除按钮。 接口是有的,只是界面上没有任何地方去调它。 在这一点改变之前,删除是拿自己的 Token 发一个 API 请求:

curl -s --request DELETE \
-H 'X-User-Token: YOUR_TOKEN' \
http://127.0.0.1:17000/api/n9e/assistant/chat/YOUR_CHAT_ID

chat id 就是对话地址的最后一段。删除会连同它的消息一起删掉, 并且——还是那条归属校验——只删得掉你自己的对话。

没有保留策略,也没有 TTL。 没有任何东西会让对话过期, 所以在用得多的实例上这两张表只会一直涨。在意的话就把上面这个调用脚本化; 它们也就是普通的表,备份和归档流程按常规处理即可。

这里的「Agent」是什么​

确实有一张 ai_agent 表,表里一行把一个使用场景绑到一条 LLM 配置和一批 Skill 上。 在开源版里,这件事比听起来小得多:

  • 使用场景只有 chat 一种,而且只有一行启用的记录会被用到;
  • 启动时会自动建好一行——default-chat-agent,不绑定具体模型—— 好让助手开箱即用;
  • 这一行上没有系统提示词,也没有工具选择。 两者都编译在产品里, Agent 上的任何字段都改不了助手怎么想、能调什么;
  • 绑在 chat agent 上的 Skill 在普通对话路径上是被忽略的。 Skill 走的是 「从目录里发现、按需加载」——见安装、管理与编写 Skills;
  • 没有菜单入口,没有自己的权限点,而那个确实存在的列表页, 新建按钮已经被去掉了。它仅限管理员,而且只能靠手敲地址进去。

所以:不要在开源版里围绕具名 Agent 搭工作流。 别处的页面或截图把 Agent 管理当成一个功能来讲的话,那不是这个版本。

想改的东西该去哪改​

你真正想要的去哪做
换助手用的模型把另一条 LLM 配置设为默认——它本来就压过 Agent 上的绑定(配置大模型提供方)
让某一类问题有不同的行为写一个 Skill,它的描述决定什么时候生效(安装、管理与编写 Skills)
某个流程要更多工具那个 Skill frontmatter 里的 builtin_tools
诊断链要更长那个 Skill frontmatter 里的 max_iterations
限制助手够得着什么提问账号的角色和业务组(权限继承与 RBAC)

下一步​