
# 示例：构建记忆库并集成SDK进行对话管理
本示例描述了如何在AgentArts智能体平台上创建记忆库，并通过SDK与记忆库进行交互。记忆库用于存储和管理智能体与用户之间的对话历史，以便于后续的对话管理和个性化服务。
#### 前提条件
- 操作系统：Linux ARM64，服务器可访问公网。
  ![](https://support.huaweicloud.com/highcode-agentarts/public_sys-resources/caution_3.0-zh-cn.png)
  需使用ARM64系统制作的Agent镜像，使用X86系统制作的镜像在调用智能体运行时时会调用失败。
  可以使用华为云ECS服务购买服务器，购买时需要选择鲲鹏架构（ARM64）。
  ![](https://support.huaweicloud.com/highcode-agentarts/zh-cn_image_0000002675304607.png "点击放大")
  
- 安装Python：请确保Python 3.10及以上版本已安装。 大多数Linux发行版（如Ubuntu）都预装了Python，您可以先通过python3 --version检查。如未安装，可以使用如下命令安装：
  ```
  sudo apt update
  sudo apt install python3
  ```
  
- 安装Docker：请确保Docker 18.06及以上版本已安装。如未安装，可以使用如下命令安装：
  ```
  # 查询 Docker 版本
  docker --version
  # 安装Docker
  sudo apt update
  sudo apt install docker.io
  ```
  安装完成后，建议立即配置国内镜像加速器。在后续执行agentarts launch构建镜像时，Docker需要拉取python:3.10-slim基础镜像，默认从docker.io官方仓库下载，可能超时失败。提前配置加速器可避免此问题。
  执行以下命令创建Docker配置目录：
  ```
  sudo mkdir -p /etc/docker
  ```
  执行以下命令配置国内镜像源（直接复制并回车执行）：
  ```
  sudo tee /etc/docker/daemon.json <<-'EOF'
  {
    "registry-mirrors":[
      "https://docker.m.daocloud.net",
      "https://dockerproxy.net",
      "https://mirror.baidubce.com"
    ]
  }
  EOF
  ```
  依次执行以下命令重启Docker服务，使配置生效：
  ```
  sudo systemctl daemon-reload
  sudo systemctl restart docker
  ```
  ![](https://support.huaweicloud.com/highcode-agentarts/public_sys-resources/note_3.0-zh-cn.png)
  华为云SWR基础版不支持OCI镜像格式，如果您使用的是Docker 27及以上版本，并且需要处理OCI镜像，可以通过设置环境变量来关闭OCI支持。
  ```
  export DOCKER_BUILDKIT=0
  # 或者
  export BUILDKIT_USE_OCI_MEDIA_TYPES=0
  ```
  
- 执行以下命令安装SDK（建议在Python虚拟环境中安装，以避免与系统包产生冲突）。
  ```
  # 安装依赖包
  apt install python3.12-venv
  # 创建并激活虚拟环境 (linux) 
  python3 -m venv venv
  source venv/bin/activate
  # 安装sdk
  pip install agentarts-sdk
  ```
  ![](https://support.huaweicloud.com/highcode-agentarts/public_sys-resources/note_3.0-zh-cn.png)
  - 执行pip install agentarts-sdk命令下载缓慢、超时可以更改为使用如下命令
    ```
    pip install agentarts-sdk -i https://repo.huaweicloud.com/repository/pypi/simple --trusted-host repo.huaweicloud.com
    ```
    
  
  - 如果系统缺少python3-venv包，导致无法创建虚拟环境，请按照命令回显提示安装python3-venv包。 ![](https://support.huaweicloud.com/highcode-agentarts/zh-cn_image_0000002568294810.png "点击放大")
    
    
- 执行以下命令配置华为云凭证，获取华为云凭证请参考[认证鉴权](https://support.huaweicloud.com/highcode-agentarts/agentarts_10_047.html)。
  ```
  export HUAWEICLOUD_SDK_AK="your-access-key"
  export HUAWEICLOUD_SDK_SK="your-secret-key"
  ```
  
 
#### 构建记忆库并集成SDK进行对话管理
1. 登录[AgentArts智能体平台](https://console.huaweicloud.com/agentarts/#/home/overview)。
2. 在左侧导航栏选择"开发中心 \> 组件库 "，单击"记忆库"页签，进入记忆库界面。
3. 单击右上角"创建记忆库"。
4. 参考[图1]配置记忆库的基本信息和网络配置。
   
   - 记忆库名称：memory-test
   
   - 网络配置：勾选私有网络，选择业务所在的VPC及子网 公网访问根据业务场景可选择开启
     
   
   - 数据加密配置：可自定义选择
     图1配置记忆库的基本信息和网络配置   
     ![](https://support.huaweicloud.com/highcode-agentarts/zh-cn_image_0000002664219017.png "点击放大") 
   
   
   
   
5. 参考[图2]配置记忆策略。
   
   - 短期记忆：90天。
   
   - 长期记忆提取策略：选择情景记忆 Episodic Memory。
   
   - 长期记忆提取触发条件：
     - 空闲时间：10秒。
     
     - 最大累计token数量：4096。
     
     - 最大累计消息数：10。
     
     
     图2配置记忆策略   
     ![](https://support.huaweicloud.com/highcode-agentarts/zh-cn_image_0000002541082534.png "点击放大") 
   
   
   
   
6. 单击"创建记忆库"，在"API Key"弹框中，请复制或下载API Key，然后单击"继续创建"。 
   ![](https://support.huaweicloud.com/highcode-agentarts/public_sys-resources/note_3.0-zh-cn.png)
   建议下载保存在本地，API Key一旦丢失只能通过重置方式解决。
   图3复制或下载API Key   
   ![](https://support.huaweicloud.com/highcode-agentarts/zh-cn_image_0000002571562821.png "点击放大")
   
   

7. 返回至记忆库列表，获取记忆库ID (对应space_id)。 
   图4获取记忆库ID   
   ![](https://support.huaweicloud.com/highcode-agentarts/zh-cn_image_0000002594056660.png "点击放大")
   
   

8. 配置环境变量。 
   ```
   # 通过 console 创建记忆库后，可以进行记忆操作。
   # 首先需要配置 API Key，配置方式：
   # 方式一：环境变量配置,若不传入,SDK会尝试从环境变量中获取apikey
   export HUAWEICLOUD_SDK_MEMORY_API_KEY="your-memory-api-key"
   # 方式二：代码中直接传入
   from agentarts.sdk.memory import MemoryClient
   client = MemoryClient(api_key="your-memory-api-key")
   其次可以配置访问端点
   export AGENTARTS_MEMORY_DATA_ENDPOINT="https://{memory_endpoint}"
   endpoint为基本信息内展示的公网域名、公网ip、私网ip或私网访问域名
   例如：
   export AGENTARTS_MEMORY_DATA_ENDPOINT = "https://memory-{space_id}.cn-southwest-2.huaweicloud-agentarts.com"
   也可通过配置region信息, SDK会自行拼接如下域名"https://memory.{region_name}.huaweicloud-agentarts.com"
   client = MemoryClient(region_name="cn-southwest-2")
   ```
   
   
9. 在项目目录中创建test.py文件，参考如下示例代码，将SDK集成在应用项目中。请将 "space_id" 和"api_key"替换为实际使用的值。 
   ```
   import time
   from agentarts.sdk.memory import MemoryClient
   from agentarts.sdk.memory.inner.config import TextMessage
   def client_mode_example():
       """Client 模式完整示例（假设已通过Console创建记忆库，并获取spaceId和api-key） 本示例仅作使用参考"""
       space_id = "your_space_id" # 使用页面上复制的记忆库ID
       api_key = "your_api_key" # 使用保存的apikey值
       with MemoryClient(api_key=api_key) as client:
           # 1. 创建会话
           print("\ncreate session...")
           session_data = client.create_memory_session(
               space_id=space_id,
               actor_id="user-001",
               assistant_id="assistant-001"
           )
           session_id = session_data.id
           print(f"Session ID: {session_id}")
           # 2. 添加消息
           print("\nadd chat message...")
           messages = [
               TextMessage(
                   role="user",
                   content="你好，我想了解机器学习的基础知识",
                   actor_id="user-001"
               ),
               TextMessage(
                   role="assistant",
                   content="机器学习是人工智能的一个分支，主要研究如何让计算机从数据中学习规律。",
                   actor_id="assistant-001"
               )
           ]
           client.add_messages(
               space_id=space_id,
               session_id=session_id,
               messages=messages
           )
           print("add message succeed")
           # 3. 等待记忆生成
           print("\nwait for memory...")
           time.sleep(90)
           # 4. 查询记忆
           print("\nsearch  memory list...")
           memories = client.list_memories(space_id=space_id, limit=10)
           print(f"find {len(memories.items)} memories")
           # 5. 搜索记忆
           print("\nsearch memories...")
           from agentarts.sdk.memory.inner.config import MemorySearchFilter
           search_results = client.search_memories(
               space_id=space_id,
               filters=MemorySearchFilter(query="机器学习", top_k=3)
           )
           print(f"find {len(search_results.results)} memories")
           return space_id, session_id
   if __name__ == "__main__":
       client_mode_example()
   ```
   
   
10. 执行如下Python命令启动项目应用，向记忆库批量插入与大型语言模型进行交互时的消息。 
    **python3 test.py**
    
    
11. 进入记忆库界面，在记忆库列表中单击已创建的记忆库名称，在"记忆检索"页签，配置检索条件后单击"确定"，可查看到保存的交互消息已经生成对应的长期记忆。
 
