diff --git a/docs/zh/samples/chat-with-memory.md b/docs/zh/samples/chat-with-memory.md new file mode 100644 index 0000000..dfed764 --- /dev/null +++ b/docs/zh/samples/chat-with-memory.md @@ -0,0 +1,77 @@ +# 历史对话 + +## 示例代码 + +历史对话 和 简单对话类似,只需要把 prompt 修改为 `HistoriesPrompt` 即可,代码如下: + +```java +public static void main(String[] args) { + Llm llm = new OpenAILlm.of("sk-rts5NF6n*******"); + + HistoriesPrompt prompt = new HistoriesPrompt(); + pormpt.addMessage(new HumanMessage("你叫什么名字?")); + + String response = llm.chat(prompt); + System.out.println(response); +} +``` + +## 连续对话 + +```java +public static void main(String[] args) { + System.out.println("请开始向 AI 提问!"); + + Llm llm = new OpenAILlm.of("sk-rts5NF6n*******"); + HistoriesPrompt prompt = new HistoriesPrompt(); + + Scanner scanner = new Scanner(System.in); + String userInput = scanner.nextLine(); + while (userInput != null) { + + prompt.addMessage(new HumanMessage(userInput)); + + llm.chatStream(prompt, (context, response) -> { + System.out.println(">>>> " + response.getMessage().getContent()); + }); + + //等待用户输入 + userInput = scanner.nextLine(); + } +} +``` + +在以上的连续对话中,`HistoriesPrompt` 有一个成员变量 `memory` 用于存储所有的历史对话内容。 +默认的情况下,是使用内存进行存储,当我们需要对对话内容进行持久化时,只需要实现自己的 Memory 即可,示例代码如下: + +```java +public class DatabaseChatMemory implements ChatMemory { + + @Override + public List getMessages() { + //从数据库查询所有的历史消息 + return Db.findList("select * from ...."); + } + + @Override + public void addMessage(Message message) { + //把消息添加到数据库 + Db.save(message); + } +} +``` + +然后,在创建 `HistoriesPrompt` 时,传入自己的 `DatabaseChatMemory`,如下代码所示: + +```java +public static void main(String[] args) { + + Llm llm = new OpenAILlm.of("sk-rts5NF6n*******"); + + HistoriesPrompt prompt = new HistoriesPrompt(new DatabaseChatMemory()); + prompt.addMessage(new HumanMessage("user new question....")); + + llm.chat(prompt); + //.... +} +```