在本文中,我将向大家介绍如何为你的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
的状态,并添加了两个动作addMessage
和clearMessages
,用于添加和清除消息。同时,我们使用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接口即可。