Repository navigation
Releases
Releases · AmritaBot/nonebot_plugin_amrita
V0.5.0
✨ 新特性
会话标签
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
Full Changelog: 0.4.0...0.5.0
V0.4.0
V0.3.0
V0.2.3.1
修复了自增ID错误
Full Changelog: 0.2.3...0.2.3.1
V0.2.3
修复了数据库会话泄露与日期检查错误。
Full Changelog: 0.2.2...0.2.3
V0.2.2
V0.2.1.post1
Full Changelog: 0.2.1...0.2.1.post1
V0.2.1
本次发布为 补丁版本,主要修正文档中存在的 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随依赖更新同步刷新,确保可重复构建。
📌 升级指南
-
更新依赖:
"nonebot-plugin-amrita>=0.2.1"或执行
uv sync/pip install -U nonebot-plugin-amrita。 -
检查代码:
- 如果你曾按照旧版 README 使用了
agent.chat(),请改为正确的get_chatobject()写法(参考新版文档)。 - 如果已正确使用
get_chatobject(),则无需修改业务代码。
- 如果你曾按照旧版 README 使用了
-
测试用量统计:建议在测试环境验证 token 用量能正常记录到
InsightsModel和UserMetadataSchema。
Full Changelog: 0.2.0...0.2.1
V0.2.0
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