diff --git a/java/example/src/main/java/com/baidubce/SystemMemoryExample.java b/java/example/src/main/java/com/baidubce/SystemMemoryExample.java new file mode 100644 index 00000000..f7220eaf --- /dev/null +++ b/java/example/src/main/java/com/baidubce/SystemMemoryExample.java @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2024 Baidu, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.baidubce; + +import com.baidubce.qianfan.Qianfan; +import com.baidubce.qianfan.core.auth.Auth; +import com.baidubce.qianfan.core.builder.MessageBuilder; +import com.baidubce.qianfan.model.chat.Message; +import com.baidubce.qianfan.util.CollUtils; + +import java.util.List; +import java.util.Map; + +/** + * 本示例实现了简易的系统记忆管理接口及推理接口的全流程调用 + * 系统记忆Console接口文档可见 创建系统记忆 + */ +public class SystemMemoryExample { + // 在模型服务-应用接入中创建应用,即可获得应用的AppID、API Key和Secret Key + private static final String APP_ID = "替换为实际的AppId"; + private static final String APP_API_KEY = "替换为实际的ApiKey"; + private static final String APP_SECRET_KEY = "替换为实际的SecretKey"; + + public static void main(String[] args) { + // 注意,在生产环境中,应当手动创建一个系统记忆并维护记忆内容,然后在推理中重复使用该系统记忆 + String systemMemoryId = createSystemMemory(APP_ID, "示例系统记忆"); + System.out.println("系统记忆ID:" + systemMemoryId); + + Boolean result = modifySystemMemory(systemMemoryId, CollUtils.listOf( + new MessageBuilder() + .add("user", "度小茶的营业时间是什么?") + .add("system", "度小茶的营业时间是每天上午9点到晚上9点,欢迎您随时光临。") + .build(), + new MessageBuilder() + .add("user", "你的名字是什么?") + .add("system", "我是度小茶饮品店的智能客服,我的具体名字叫小茶。") + .build() + )); + System.out.println("修改系统记忆结果:" + result); + + Map memories = describeSystemMemory(systemMemoryId); + System.out.println("记忆列表:" + memories); + + String response = chat(systemMemoryId, "你叫什么名字"); + System.out.println("推理结果:" + response); + String response2 = chat(systemMemoryId, "度小茶几点开门呀"); + System.out.println("推理结果2:" + response2); + } + + private static String createSystemMemory(String appId, String description) { + return new Qianfan().console() + .route("/v2/memory") + .action("CreateSystemMemory") + .body(CollUtils.mapOf( + "appId", appId, + "description", description + )) + .execute(String.class) + .getResult(); + } + + private static Boolean modifySystemMemory(String systemMemoryId, List> memories) { + return new Qianfan().console() + .route("/v2/memory") + .action("ModifySystemMemory") + .body(CollUtils.mapOf( + "systemMemoryId", systemMemoryId, + "memories", memories + )) + .execute(Boolean.class) + .getResult(); + } + + private static Map describeSystemMemory(String systemMemoryId) { + return new Qianfan().console() + .route("/v2/memory") + .action("DescribeSystemMemory") + .body(CollUtils.mapOf( + "systemMemoryId", systemMemoryId + )) + .execute() + .getResult(); + } + + private static String chat(String systemMemoryId, String query) { + // 使用系统记忆时,鉴权需要使用OAuth方式,同时需要传入与系统记忆相同应用的Api Key和Secret Key + return new Qianfan(Auth.TYPE_OAUTH, APP_API_KEY, APP_SECRET_KEY).chatCompletion() + .model("ERNIE-3.5-8K") + .enableSystemMemory(true) + .systemMemoryId(systemMemoryId) + .addUserMessage(query) + .execute() + .getResult(); + } +}