You need to enable JavaScript to run this app.
导航
核心流程
最近更新时间:2025.11.07 14:07:18首次发布时间:2025.11.07 14:07:18
复制全文
我的收藏
有用
有用
无用
无用

本页面提供一个通过 Python SDK 初始化记忆库、写入数据和检索记忆的完整请求示例。在完成安装与初始化SDK的基础上,您可以参考以下示例代码体验 Viking 长期记忆的核心流程。

"""
VikingDB 会话记忆完整示例
包含初始化、写入会话数据和检索会话记忆的完整流程
"""

import os
from datetime import datetime
from vikingdb import IAM
from vikingdb.memory import VikingMem
from vikingdb.exceptions import VikingException

def init_memory_client():
    """初始化记忆库客户端"""
    print("=== 初始化 VikingDB 客户端 ===")
    
    # 认证配置
    _auth = IAM(
        ak=os.getenv("VIKINGDB_AK", "your_ak"),
        sk=os.getenv("VIKINGDB_SK", "your_sk"),
    )
    
    # 创建客户端
    client = VikingMem(
        host="api-knowledgebase.mlp.cn-beijing.volces.com",
        region="cn-beijing",
        auth=_auth,
        scheme="http",
    )
    
    print("客户端初始化成功")
    return client
def get_or_create_collection(client, collection_name, project_name="default"):
    """获取或创建记忆库集合"""
    print(f"\n=== 获取记忆库集合: {collection_name} ===")
    
    try:
        # 尝试获取已存在的集合
        collection = client.get_collection(
            collection_name=collection_name,
            project_name=project_name
        )
        print(f"成功获取现有集合: {collection_name}")
        return collection
        
    except VikingException as e:
        print(f"获取集合失败: {e.message}")
        raise

def add_memory_sessions(collection):
    """添加会话记忆数据"""
    print(f"\n=== 添加会话记忆 ===")
    
    # 模拟对话会话数据
    memory_sessions = [
        {
            "session_id": "session_001",
            "messages": [
                {"role": "user", "content": "今天天气怎么样?"},
                {"role": "assistant", "content": "今天是晴天,适合外出活动!"},
                {"role": "user", "content": "那太好了,我正好想出去走走"},
                {"role": "assistant", "content": "记得涂防晒霜,享受美好的一天!"}
            ],
            "metadata": {
                "default_user_id": "user_001",
                "default_assistant_id": "assistant_001",
                "time": int(datetime.now().timestamp() * 1000),
            }
        },
        {
            "session_id": "session_002",
            "messages": [
                {"role": "user", "content": "你推荐什么咖啡?我喜欢浓郁的口味"},
                {"role": "assistant", "content": "推荐您尝试意式浓缩或美式咖啡,都是浓郁型的!"},
                {"role": "user", "content": "那拿铁和卡布奇诺呢?"},
                {"role": "assistant", "content": "拿铁奶味重一些,卡布奇诺奶泡丰富,都很有特色"}
            ],
            "metadata": {
                "default_user_id": "user_001",
                "default_assistant_id": "assistant_001",
                "time": int(datetime.now().timestamp() * 1000),
            }
        },
        {
            "session_id": "session_003",
            "messages": [
                {"role": "user", "content": "如何设置提醒功能?我是新用户"},
                {"role": "assistant", "content": "点击右上角的铃铛图标,然后选择'添加提醒'即可"},
                {"role": "user", "content": "可以设置重复提醒吗?"},
                {"role": "assistant", "content": "可以的,在设置提醒时选择重复频率即可"}
            ],
            "metadata": {
                "default_user_id": "user_001",
                "default_assistant_id": "assistant_001",
                "time": int(datetime.now().timestamp() * 1000),
            }
        }
    ]
    
    results = []
    for i, session_data in enumerate(memory_sessions, 1):
        try:
            print(f"添加会话 {i}/{len(memory_sessions)}...")
            
            result = collection.add_session(
                session_id=session_data["session_id"],
                messages=session_data["messages"],
                metadata=session_data["metadata"]
            )
            
            results.append(result)
            print(f"会话 {i} 添加成功")
            
        except VikingException as e:
            print(f"会话 {i} 添加失败: {e.message}")
            continue
    
    print(f"成功添加 {len(results)} 个会话记忆")
    return results

def add_user_profile(collection):
    """添加用户画像数据"""
    print(f"\n=== 添加用户画像 ===")
    
    try:
        result = collection.add_profile(
            profile_type="sys_profile_v1",  # 使用系统默认的profile type
            user_id="user_001",  # 使用新的用户ID避免重复
            assistant_id="assistant_001",
            memory_info={
                "user_profile": "### 用户画像\n- 性别: 女\n- 年龄: 28岁\n- 职业: 产品经理\n- 兴趣: 咖啡、阅读、旅行\n- 性格: 开朗、细心、有创造力\n- 饮品偏好: 咖啡\n- 爱好: 阅读、旅行、摄影\n- 沟通风格: 友好直接"
            }
        )
        
        print("用户画像添加成功")
        return result
        
    except VikingException as e:
        if "Profile already exists" in e.message:
            print("用户画像已存在,跳过添加步骤")
            return None
        else:
            print(f"用户画像添加失败: {e.message}")
            raise

def search_memories(collection):
    """搜索会话记忆数据"""
    print(f"\n=== 会话记忆搜索演示 ===")
    
    # 基础搜索 - 按用户ID和关键词
    print("\n--- 搜索用户001的会话记忆 ---")
    try:
        result = collection.search_memory(
            query="咖啡",
            filter={
                "memory_type": ["sys_profile_v1", "sys_event_v1"],
                "user_id": "user_001",
                "assistant_id": "assistant_001"
            },
            limit=10
        )
        
        if result and isinstance(result, dict) and result.get('data'):
            result_data = result['data']
            count = result_data.get('count', 0)
            print(f"找到 {count} 个结果")
            
            if count > 0 and 'result_list' in result_data:
                for item in result_data['result_list'][:3]:
                    print(f"- 结果: {item}")
            else:
                print("结果列表为空")
        else:
            print("未找到相关结果")
            
    except VikingException as e:
        print(f"搜索失败: {e.message}")
    
def main():
    """主函数 - 完整流程演示"""
    print("VikingDB 会话记忆完整示例开始")
    print("=" * 50)
    
    try:
        # 1. 初始化客户端
        client = init_memory_client()
        
        # 2. 获取集合(使用现有集合)
        collection = get_or_create_collection(
            client, 
            collection_name="my_first_memory_collection", #替换为您的记忆库名称
            project_name="default"
        )
        
        # 添加会话记忆
        add_memory_sessions(collection)
        
        # 添加用户画像
        add_user_profile(collection)
        
        # 搜索记忆
        search_memories(collection)
        
        print("完整示例执行成功")
        print("总结:")
        print("- 客户端初始化成功")
        print("- 会话记忆添加成功 (3个会话)")
        print("- 用户画像添加成功")
        print("- 会话记忆搜索功能正常")
        
    except VikingException as e:
        print(f"VikingDB异常: {e.message}")
        
    except Exception as e:
        print(f"异常: {str(e)}")
        
    finally:
        print("=" * 50)
        print("示例执行完成")

if __name__ == "__main__":
    main()