qwen_agent/tests/test_memori_config.py
朱潮 455a48409d feat: integrate Memori long-term memory system
Add Memori (https://github.com/MemoriLabs/Memori) integration for
persistent cross-session memory capabilities in both create_agent
and create_deep_agent.

## New Files

- agent/memori_config.py: MemoriConfig dataclass for configuration
- agent/memori_manager.py: MemoriManager for connection and instance management
- agent/memori_middleware.py: MemoriMiddleware for memory recall/storage
- tests/: Unit tests for Memori components

## Modified Files

- agent/agent_config.py: Added enable_memori, memori_semantic_search_top_k, etc.
- agent/deep_assistant.py: Integrated MemoriMiddleware into init_agent()
- utils/settings.py: Added MEMORI_* environment variables
- pyproject.toml: Added memori>=3.1.0 dependency

## Features

- Semantic memory search with configurable top-k and threshold
- Multi-tenant isolation (entity_id=user, process_id=bot, session_id)
- Memory injection into system prompt
- Background asynchronous memory augmentation
- Graceful degradation when Memori is unavailable

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-20 00:12:43 +08:00

76 lines
2.4 KiB
Python

"""
Memori 配置测试
"""
import pytest
from agent.memori_config import MemoriConfig
class TestMemoriConfig:
"""测试 MemoriConfig 配置类"""
def test_default_values(self):
"""测试默认值"""
config = MemoriConfig()
assert config.enabled is False
assert config.api_key is None
assert config.semantic_search_top_k == 5
assert config.semantic_search_threshold == 0.7
assert config.inject_memory_to_system_prompt is True
def test_enabled_check(self):
"""测试 is_enabled 方法"""
config = MemoriConfig(enabled=False)
assert config.is_enabled() is False
config.enabled = True
assert config.is_enabled() is True
def test_get_attribution_tuple(self):
"""测试 get_attribution_tuple 方法"""
config = MemoriConfig(
entity_id="user_123",
process_id="bot_456"
)
entity_id, process_id = config.get_attribution_tuple()
assert entity_id == "user_123"
assert process_id == "bot_456"
def test_get_attribution_tuple_missing_values(self):
"""测试缺少 entity_id 或 process_id 时抛出异常"""
config = MemoriConfig(entity_id="user_123")
with pytest.raises(ValueError, match="entity_id and process_id are required"):
config.get_attribution_tuple()
def test_get_memory_prompt(self):
"""测试 get_memory_prompt 方法"""
config = MemoriConfig()
memories = ["User likes coffee", "User prefers dark mode"]
prompt = config.get_memory_prompt(memories)
assert "相关记忆" in prompt
assert "User likes coffee" in prompt
assert "User prefers dark mode" in prompt
def test_get_memory_prompt_empty(self):
"""测试空记忆列表"""
config = MemoriConfig()
prompt = config.get_memory_prompt([])
assert prompt == ""
def test_with_session(self):
"""测试 with_session 方法"""
config = MemoriConfig(
entity_id="user_123",
process_id="bot_456",
session_id="session_789"
)
new_config = config.with_session("new_session_999")
assert new_config.session_id == "new_session_999"
assert new_config.entity_id == "user_123"
assert new_config.process_id == "bot_456"
# 原配置不受影响
assert config.session_id == "session_789"