ChatGPT 能“記住上文”的原因

原因如下

  1. 你把對話歷史傳給了它
    每次調用 OpenAI 接口時,都會把之前的對話作為參數傳入(messages 列表),模型“看見”了之前你說了什么。

  2. 它沒有長期記憶
    它不會自動記住你是誰或你說過什么,除非你手動保存歷史并再次傳入。

  3. 依賴上下文窗口
    能“記住”的內容是有限的(如 GPT-4 可處理約 128K tokens),超過就會“忘記”早期內容。


總結一句話:

ChatGPT 記住你說過什么,是因為你把歷史對話發給它了,而不是它自己真的記得。

在這里插入圖片描述


? 核心原理總結一句話:

ChatGPT 并不是“記住”了你說過什么,而是每次調用 API 時,你 把之前的所有對話歷史一起發給它了

這就是“它知道你說過什么”的根本原因。


代碼

🔧 使用 OpenAI Chat API 的方式

openai.ChatCompletion.create() 為例,調用格式是這樣的:

import openaiopenai.api_key = "你的API密鑰"response = openai.ChatCompletion.create(model="gpt-4",messages=[{"role": "system", "content": "你是一個有幫助的助手。"},{"role": "user", "content": "我喜歡貓"},{"role": "assistant", "content": "貓非常可愛,它們很獨立又粘人。"},{"role": "user", "content": "它們為什么這么可愛?"}]
)print(response["choices"][0]["message"]["content"])

📌 分析一下這個 messages 參數

這個 messages 是一個聊天記錄的列表,模型每次生成回答時都會“看到”這里面的全部內容:

rolecontent
system指定模型的行為和角色
user你每次輸入的內容
assistant模型上一次的回復

所以 ChatGPT 并不是自己“記得”你說了什么,而是你把之前的對話再傳了一次,它“看到”了這些內容,然后做出合理回應。


它能記住多長?

取決于你用的模型:

  • gpt-3.5-turbo:默認 16K tokens(約等于 30 頁文檔)
  • gpt-4:有 128K tokens 的版本(約等于 300 頁)

一旦對話太長,超出最大 token 限制,最早的內容就需要被“截斷”或者刪掉。


舉個動態構造的例子(代碼)

如果你自己寫聊天程序,每次發消息時都要把聊天歷史傳入:

chat_history = []def chat(user_input):chat_history.append({"role": "user", "content": user_input})response = openai.ChatCompletion.create(model="gpt-4",messages=[{"role": "system", "content": "你是一個聊天機器人。"}] + chat_history)assistant_reply = response['choices'][0]['message']['content']chat_history.append({"role": "assistant", "content": assistant_reply})return assistant_reply# 先問第一句
print(chat("我喜歡狗"))# 再問第二句,模型就知道“我”是誰,“狗”是什么
print(chat("它們聰明嗎?"))

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/83266.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/83266.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/83266.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

微信小程序van-dialog確認驗證失敗時阻止對話框的關閉

使用官方(Vant Weapp - 輕量、可靠的小程序 UI 組件庫)的before-close&#xff1a; wxml&#xff1a; <van-dialog use-slot title"名稱" show"{{ show }}" show-cancel-button bind:cancel"onClose" bind:confirm"getBackInfo"…

K8S Ingress、IngressController 快速開始

假設有如下三個節點的 K8S 集群&#xff1a; ? k8s31master 是控制節點 k8s31node1、k8s31node2 是工作節點 容器運行時是 containerd 一、理論介紹 1&#xff09;什么是 Ingress 定義&#xff1a;Ingress 是 Kubernetes 中的一種資源對象&#xff0c;它定義了外部訪問集群內…

Vue3 + Element Plus 動態表單實現

完整代碼 <template><div class"dynamic-form-container"><el-formref"dynamicFormRef":model"formData":rules"formRules"label-width"auto"label-position"top"v-loading"loading"&g…

Mac修改hosts文件方法

Mac修改hosts文件方法 在 macOS 上修改 hosts 文件需要管理員權限 步驟 1&#xff1a;打開終端 通過 Spotlight 搜索&#xff08;Command 空格&#xff09;輸入 Terminal&#xff0c;回車打開。或進入 應用程序 > 實用工具 > 終端。 步驟 2&#xff1a;備份 hosts 文件…

深度學習—BP神經網絡

文章目錄 [TOC](文章目錄) 一、基本概念二、 網絡結構三、BP神經網絡的原理總結特點&#xff1a;應用場景優缺點 一、基本概念 BP 神經網絡&#xff08;Backpropagation Neural Network&#xff09;是一種基于誤差反向傳播算法的多層前饋神經網絡&#xff0c;由輸入層、隱藏層…

Spring AI(6)——向量存儲

向量數據庫是一種特殊類型的數據庫&#xff0c;在 AI 應用中發揮著至關重要的作用。 在向量數據庫中&#xff0c;查詢與傳統關系型數據庫不同。它們執行的是相似性搜索&#xff0c;而非精確匹配。當給定一個向量作為查詢時&#xff0c;向量數據庫會返回與該查詢向量“相似”的…

Qt功能區:簡介與安裝

Qt功能區 1. 功能區簡介2. SARibbon2.1 簡介2.2 編譯與安裝采用CMake-gui進行編譯采用VS進行編譯安裝與使用 Qt 官方不支持 Ribbon 風格&#xff08;Ribbon UI 風格是微軟開創的&#xff0c;具有專利許可協議&#xff0c;許可協議對從構建 UI 的指令到每個按鈕間的空格數都做了…

iOS safari和android chrome開啟網頁調試與檢查器的方法

手機開啟遠程調試教程&#xff08;適用于 Chrome / Safari&#xff09; 前端移動端調試指南&#xff5c;適用 iPhone 和 Android&#xff5c;WebDebugX 出品 本教程將詳細介紹如何在 iPhone 和 Android 手機上開啟網頁檢查器&#xff0c;配合 WebDebugX 實現遠程調試。教程包含…

Golang企業級商城高并發微服務實戰

Golang企業級商城高并發微服務實戰包含內容介紹&#xff1a; 從零開始講了百萬級單體高并發架構、千萬級微服務架構&#xff0c;其中包含Rpc實現微服務、微服務的跨語言調用jsonrpc和protobuf、protobuf的安裝、protobuf高級語法、protobuf結合Grpc實現微服務實戰、微服務服務…

實現可靠的 WebSocket 連接:心跳與自動重連的最佳實踐

概覽 本文將手把手教你如何從零編寫一個可用于直播或在線聊天的 WSocket 類&#xff0c;依次實現連接建立、心跳檢測、斷線重連、消息收發以及資源清理等功能。我們將結合 WebSocket API 的標準用法、心跳保持 和 重連策略&#xff0c;并充分運用現代 JavaScript 語法&#xf…

UEFI Spec 學習筆記---33 - Human Interface Infrastructure Overview(1)

33 - Human Interface Infrastructure Overview 本章節主要用于介紹Human Interface Infrastructure&#xff08;HII&#xff09;架構介紹&#xff0c;描述如何通過 HII 來管理用戶的輸入&#xff0c;以及描述在 UEFI spec 中涉及 HII 相關的 Protocol、function 和類型定義。…

ip命令詳解

控制網卡的硬件狀態 ip link set ens36 down ip link set ens36 up 修改網卡名稱&#xff08;臨時&#xff09; ip link set ens36 down ip link set ens36 name xxx 修改網卡的mac地址 ip link set ens36 down ip link set xxx name ens36 查看ip的addr ip addr show ip ad…

hadoop中了解yarm

Hadoop中的YARN&#xff08;Yet Another Resource Negotiator&#xff09;是一種新的Hadoop資源管理器&#xff0c;是一個通用資源管理系統&#xff0c;可為上層應用提供統一的資源管理和調度。以下是其相關介紹&#xff1a; 核心思想 將JobTracker的資源管理和作業調度/監控功…

做好的QT軟件,換一個筆記本打開后發現字體很小,部分字體還被控件遮擋

出現這種情況的原因主要是屏幕的DPI&#xff08;每英寸點數&#xff09;不同。Qt中控件的大小單位為像素&#xff0c;在高DPI下&#xff0c;控件會變小&#xff0c;低DPI下控件會變大。而Qt中字體的單位默認為磅&#xff0c;無論在什么顯示器上顯示同一磅值的字體&#xff0c;其…

linux - 權限的概念

目錄 用戶權限 超級用戶與普通用戶的區別 超級用戶&#xff08;root&#xff09;&#xff1a; 普通用戶&#xff1a; 切換用戶身份 使用sudo執行高權限命令 用戶管理 用戶組管理 文件權限 文件訪問者類別 基本權限 權限表示方法 權限修改 chmod chown chgrp u…

Python函數返回值的藝術:為何True/False是更優實踐及例外情況分析

在Python編程實踐中&#xff0c;子程序的返回值設計往往是一個容易被忽視但卻至關重要的設計決策。本文將深入探討為什么返回True/False往往是更好的選擇&#xff0c;何時應該避免這種做法&#xff0c;以及如何處理與None值相關的問題。 為什么返回True/False是更好的實踐&…

STM32單片機內存分配詳細講解

單片機的內存無非就兩種&#xff0c;內部FLASH和SRAM&#xff0c;最多再加上一個外部的FLASH拓展。在這里我以STM32F103C8T6為例子講解FLASH和SRAM。 STM32F103C8T6具有64KB的閃存和20KB的SRAM。 一. Flash 1.1 定義 非易失性存儲器&#xff0c;即使在斷電后&#xff0c;其所…

【Tools】Visual Studio使用經驗介紹(包括基本功能、遠程調試、引入第三方庫等等)

這里寫目錄標題 1. VS基本使用1.1. 快捷鍵1.2. 查看變量地址1.3. 查看代碼匯編1.4. visual studio 熱重載功能的使用1.5. vs遠程服務器調試1.6. 引入第三方庫VLD1.7. release debug模式 1. VS基本使用 1.1. 快捷鍵 ctrl c :復制光標所在行 注意&#xff1a;只需要光標在這…

網絡爬蟲學習之httpx的使用

開篇 本文整理自《Python3 網絡爬蟲實戰》&#xff0c;主要是httpx的使用。 筆記整理 使用urllib庫requests庫的使用&#xff0c;已經可以爬取絕大多數網站的數據&#xff0c;但對于某些網站依然無能為力。 這是因為這些網站強制使用HTTP/2.0協議訪問&#xff0c;這時urllib和r…

Python內存管理:賦值、淺拷貝與深拷貝解析

賦值與共享資源 在Python中&#xff0c;直接賦值操作&#xff08;如 list2 list1&#xff09;會導致兩個變量共享同一個內存地址。這意味著對 list1 的修改會直接影響到 list2&#xff0c;因為它們指向同一個對象。 注意: 賦值等于完全共享資源 如果我們不希望這樣完全共享&…