在本文中,我将向大家介绍如何为你的GPT应用添加具有"记忆"功能。通过这种方式,你可以使你的GPT应用能够记住对话的上下文,从而更加智能地回答用户的问题。
如何让你的GPT应用具备”记忆”功能

文章目录

接口分析

当我们发送消息时,通常会使用OpenAI提供的createChatCompletion SDK或调用https://api.openai.com/v1/chat/completions接口来获取GPT的响应。然而,如果你只是简单地将当前用户的提问作为请求参数传递给接口,GPT只会返回当前问题的响应,它本身没有存储上下文的能力。

然而,在真实的聊天场景中,与你聊天的人通常会知道对话的上下文。要使GPT更加智能,我们需要考虑这个因素。OpenAI团队也意识到了这一点,并在createChatCompletion接口的参数中提供了解决方案。

我们可以事先定义角色信息和具体的问答案例,将其作为上下文提供给GPT参考。

要实现GPT的"记忆"功能,我们只需记录用户与GPT之间的聊天记录,并在用户下次发送消息时,将之前的聊天记录与新消息一同作为createChatCompletion接口的messages参数传递进去。

现在,我们开始实战部分!

GPT Terminal实战

存储方案

首先,我们需要确定一个存储方案来记录用户与GPT的聊天记录。在GPT Terminal项目中,我使用了LocalStorage前端存储技术和Pinia状态管理框架来实现这个功能。

下面是一段示例代码,用于定义存储方案:

import { defineStore } from "pinia";

interface Message {
  name: string;
  role: string;
  content: string;
}

export const useMessagesStore = defineStore("messages", {
  state: () => ({
    messages: [] as Message[]
  }),
  getters: {},
  persist: {
    key: "gpt-messages",
    storage: window.localStorage,
  },
  actions: {
    addMessage(msg: Message) {
      const {messages} = this.$state
      if (messages.length >= 20) {
        messages.shift()
      }
      messages.push(msg)
    },
    clearMessages() {
      this.$state.messages = []
    }
  }
})

在上面的代码中,我们定义了一个名为messages的状态,并添加了两个动作addMessageclearMessages,用于添加和清除消息。同时,我们使用LocalStorage将数据持久化存储。

请求GPT服务

在确定好存储方案后,我们需要在相应的Vue3组件中引入useMessagesStore

import { useMessagesStore } from "../../messagesStore"
import { storeToRefs } from "pinia";

const messagesStore = useMessagesStore();
const { messages } = storeToRefs(messagesStore);

在引入之后,我们需要修改原先请求中的body参数,将聊天记录添加到body中。

const response = await fetch('http://127.0.0.1:7345/api/gpt/get', {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    message: [...(messages.value.map(({ role, content }) => ({ role, content }))), {
      role: "user",
      content: message.value
    }],
    role: role.value,
  }),
});

在请求结束后,我们还需要将这次请求的对话记录保存到messages状态中。

messagesStore.addMessage({
  name: role.value,
  role: "user",
  content: message.value
})
messagesStore.addMessage({
  name: role.value,
  role: "assistant",
  content: output.value
})

通过以上简单的改造,我们就成功地为GPT添加了"记忆"功能。

结论

通过本文的实践,我向大家展示了如何使你的GPT应用具备上下文的"记忆"功能。原理非常简单,只需要将历史聊天记录作为请求参数传递给GPT接口即可。

© 版权声明
分享是一种美德,转载请保留原链接
GPT