为 OpenViking 内存命中添加最新内容读取功能,并更新相关文档和测试用例

This commit is contained in:
2026-06-03 16:29:59 +08:00
parent c76c8d47d1
commit 8c479e4ecd
4 changed files with 106 additions and 1 deletions

View File

@ -488,6 +488,59 @@ def test_search_returns_compact_items_and_backend_diagnostics_without_duplicate_
assert not _has_key(response.backends["everos"].result, "original_data")
def test_search_includes_latest_openviking_memory_content_for_memory_hits():
class FakeOpenVikingWithStaleSearch(FakeOpenViking):
async def search(
self,
user_key: str,
query: str,
limit: int,
level: int = 2,
score_threshold: float = 0.8,
target_uri: str = "viking://user/memories",
) -> dict:
self.calls.append(("search", user_key, query, limit, level, score_threshold, target_uri))
return {
"status": "ok",
"result": {
"memories": [
{
"context_type": "memory",
"uri": "viking://user/tom/memories/preferences/drink.md",
"level": 2,
"score": 0.91,
"abstract": "用户喜欢拿铁咖啡。",
}
],
"resources": [],
"skills": [],
"total": 1,
},
}
async def read_memory(self, user_key: str, uri: str) -> dict:
self.calls.append(("read_memory", user_key, uri))
return {"status": "ok", "result": {"uri": uri, "content": "用户不喜欢咖啡,只喜欢下午喝奶茶"}}
openviking = FakeOpenVikingWithStaleSearch()
service = MemorySystemService(openviking=openviking, everos=FakeEverOS())
response = asyncio.run(service.search(
SearchRequest(user_id="tom", user_key="tom-key", session_id="sess-1", query="我喜欢喝什么?", limit=5),
))
assert response.items[0] == {
"source_backend": "openviking",
"context_type": "memory",
"uri": "viking://user/tom/memories/preferences/drink.md",
"level": 2,
"score": 0.91,
"abstract": "用户喜欢拿铁咖啡。",
"content": "用户不喜欢咖啡,只喜欢下午喝奶茶",
}
assert ("read_memory", "key-tom", "viking://user/tom/memories/preferences/drink.md") in openviking.calls
def test_session_context_combines_openviking_context_and_everos_search_items():
openviking = FakeOpenViking()
everos = FakeEverOSVerbose()