Skip to content

Releases

V0.5.0

Choose a tag to compare

@JohnRichard4096 JohnRichard4096 released this 30 Oct 02:40
decc982

✨ 新特性

会话标签

  • amrita_memory_sessions 表新增 tag 列(VARCHAR(64),可为空),用于存放归档时由模型生成的一行短摘要,也可由 /session rename 手动改写。
  • 旧数据该列为 NULL,用于区分「从未生成过标签」与「生成失败/被清空」;展示侧按 tag → data.abstract → 首条用户消息 的顺序逐级回落。
  • 标签长度统一在写入前截断到 64 字符(_clip_tag):SQLite 不校验 VARCHAR 长度,但严格方言会直接拒写,模型生成的摘要长度不可控,这里统一收口,避免归档因标签过长而失败。

新增数据库/接口方法

  • MemorySessions.add_session(data, tag=None):插入归档并返回 (id, created_at),created_at 显式取值,便于后续回填标签时精确定位该行。
  • MemorySessions.update_session_tag(session_id, tag, created_at):条件写,仅在 tag IS NULL 且 id、user_id、created_at 全部匹配时生效,用于归档流程的标签回填。
  • MemorySessions.rename_session(session_id, tag, created_at=None):强制写,用于用户手动重命名,不校验 tag IS NULL;调用方持有 created_at 时建议一并传入,防止主键回收后改到新行。
  • 对应在 AmritaMemory(memory.py)上暴露同名方法,均复用 database_lock(owner) 与 add_session 串行,避免 SQLite 上的交叉写入。

🐛 问题修复

会话列表排序不稳定

  • get() 现在显式使用 ORDER BY created_at ASC, id ASC。/session list 的编号、use / del / rename 均按下标定位,而 SQLite 的 id 会回收复用,仅依赖隐式 rowid 顺序并不稳定;同一秒内连续归档导致 created_at 相同时,再以 id 兜底。
  • _expire() 同步改为 ORDER BY created_at DESC, id DESC,与 get() 保持同一口径,避免在保留边界上删掉列表顺序里本该保留的那条。

主键回收导致的误写

  • 写入标签时同时校验 id、user_id 与 created_at,防止 SQLite 回收复用 id 后,把旧会话的标签写到新行,或改到他人的归档上。

🗃️ 数据库迁移

  • 新增迁移 9a1f4c7b2d30_session_tag(父迁移 072361e8936f):
    • upgrade:为 amrita_memory_sessions 添加 tag 列(nullable=True,无 server_default,旧行保持 NULL)。
    • downgrade:删除该列。
  • 升级时自动执行,无需手动干预。

⬆️ 升级说明

  • 版本号:0.4.0 → 0.5.0。
  • 由于涉及表结构变更,升级后首次启动会触发 Alembic 迁移;建议升级前备份数据库文件。
  • add_session 的返回值由 None 变为 (id, created_at),如有直接调用请按需适配;update_session_tag / rename_session 为新增接口,对现有调用无影响。

What's Changed

  • feat: session tag for archived sessions by @AmriaLin in #2

Full Changelog: 0.4.0...0.5.0

V0.4.0

Choose a tag to compare

@JohnRichard4096 JohnRichard4096 released this 02 Oct 04:38

Full Changelog: 0.3.0...0.4.0

V0.3.0

Choose a tag to compare

@AmriaLin AmriaLin released this 13 Sep 06:10
3354ca8

What's Changed

  • Fix: 持久化自定义提示词 extra_prompt(修复操作 session 后 prompt 丢失) by @AmriaLin in #1

New Contributors

Full Changelog: 0.2.3.1...0.3.0

V0.2.3.1

Choose a tag to compare

@JohnRichard4096 JohnRichard4096 released this 26 Jul 01:26

修复了自增ID错误

Full Changelog: 0.2.3...0.2.3.1

V0.2.3

Choose a tag to compare

@JohnRichard4096 JohnRichard4096 released this 25 Jul 14:51

修复了数据库会话泄露与日期检查错误。

Full Changelog: 0.2.2...0.2.3

V0.2.2

Choose a tag to compare

@JohnRichard4096 JohnRichard4096 released this 21 Jul 13:36

Full Changelog: 0.2.1...0.2.2

V0.2.1.post1

Choose a tag to compare

@JohnRichard4096 JohnRichard4096 released this 19 Jul 12:11

Full Changelog: 0.2.1...0.2.1.post1

V0.2.1

Choose a tag to compare

@JohnRichard4096 JohnRichard4096 released this 19 Jul 12:00

本次发布为 补丁版本,主要修正文档中存在的 API 描述错误、修复用量统计潜在的空值访问问题,并升级核心依赖至最新稳定版。

📝 主要变更

1. 文档全面修正(README.md)

  • 修正了错误的 API 示例:此前文档中错误地使用了 agent.chat() 方法,而该接口 从未在代码中存在。现在所有示例均替换为正确的 agent.get_chatobject() 用法,并补充了完整的生命周期管理说明(begin() → async with → 流式或完整响应)。
  • 更正了继承关系:AgentSession 继承自 AgentRuntime 而非 AmRuntime。
  • 补充了 ChatObject 使用指南:明确说明需要先调用 begin(),然后使用 async with 管理执行,再通过 io_stream 或 full_response() 获取响应。
  • 修正了依赖注入示例:确保导入路径正确。

如果你的代码此前按照错误文档编写,将无法运行。请参考新的示例进行修正。

2. 用量统计 Bug 修复(agent.py)

  • 修复了 AgentSession.__aexit__ 中可能因 chat_object.response 为 None 而引发异常的问题。
  • 现在改用 chat_object._di_resp.response 并增加空值检查,确保用量统计稳定写入数据库。

3. 类型注解增强(backends.py)

  • 添加了 from __future__ import annotations,改善类型检查器对前向引用的支持。

⬆️ 依赖升级

  • amrita-core:升级至 >=0.12.0(包含新的 ChatObject 接口及性能优化)
  • 其他依赖(如 aiohappyeyeballs, aiologic, cffi, click, fastapi, fastmcp-slim, greenlet 等)已同步更新至最新稳定版本(详见 uv.lock)。

🧩 其他

  • 锁定文件 uv.lock 随依赖更新同步刷新,确保可重复构建。

📌 升级指南

  1. 更新依赖:

    "nonebot-plugin-amrita>=0.2.1"

    或执行 uv sync / pip install -U nonebot-plugin-amrita。

  2. 检查代码:

    • 如果你曾按照旧版 README 使用了 agent.chat(),请改为正确的 get_chatobject() 写法(参考新版文档)。
    • 如果已正确使用 get_chatobject(),则无需修改业务代码。
  3. 测试用量统计:建议在测试环境验证 token 用量能正常记录到 InsightsModel 和 UserMetadataSchema。

Full Changelog: 0.2.0...0.2.1

V0.2.0

Choose a tag to compare

@JohnRichard4096 JohnRichard4096 released this 21 Jun 07:34

Release Summary – nonebot-plugin-amrita v0.2.0

依赖升级:

  • amrita-core 升级至 >=0.10.0
  • 新增 aiologic>=0.16.0

✨ 主要变更

🔧 配置精简

移除插件内置的 LLM 记忆窗口、工具调用次数、Agent 模式等环境变量配置(amrita_tool_call_limit、amrita_memory_*、amrita_agent_*),这些行为现在由用户自定义 AmritaConfig 传入,插件只负责运行时集成。

🧠 会话 & 后端增强

  • AgentSession.load_from 新增 backend 参数,支持自定义记忆后端(BackendSlots)
  • 新增 AmritaMemoryBackend 模块,统一管理记忆数据的加载与提交
  • 默认 Agent 策略从 AmritaAgentStrategy 切换为 ReActAgentStrategy

🔄 内部优化

  • 日志系统改用 amrita-sense,统一输出格式
  • 并发锁从原生 asyncio.Lock 迁移至 aiologic.Lock,提供更可靠的异步锁机制
  • 移除自定义的脏标记模块(dirty.py),直接复用 amrita-core 的 DirtyAwareModel
  • 弱引用缓存(WeakValueLRUCache)改用 amrita-sense 实现

🗃️ 数据持久化

  • 数据库事务管理统一使用 session.begin(),简化提交逻辑
  • UserDataExecutor 支持外部事务的 savepoint,增强嵌套事务场景的可靠性

📝 文档重写

  • README 全面翻新,更清晰地说明插件定位为 library(无内置指令)
  • 新增完整的 API 文档、架构图和 FAQ,涵盖 AgentSession、数据模型、锁机制等

⚠️ 破坏性变更

  • 移除的配置项需通过代码构造 AmritaConfig 传入,环境变量不再支持
  • AgentSession.load_from 签名变化,新增 strategy、template、backend 参数,原 **kwargs 不再接受额外参数

🔗 更多信息


感谢使用!如有问题请提交 Issue 或 PR。

Full Changelog: 0.1.4.1...0.2.0

V0.1.4.1

Choose a tag to compare

@JohnRichard4096 JohnRichard4096 released this 22 Apr 09:06

Full Changelog: 0.1.4...0.1.4.1