This commit is contained in:
GH Action - Upstream Sync 2023-08-28 01:05:26 +00:00
commit 19e82b9318
26 changed files with 537 additions and 11 deletions

View File

@ -45,7 +45,7 @@ One-Click to get well-designed cross-platform ChatGPT web UI.
- New in v2: create, share and debug your chat tools with prompt templates (mask)
- Awesome prompts powered by [awesome-chatgpt-prompts-zh](https://github.com/PlexPt/awesome-chatgpt-prompts-zh) and [awesome-chatgpt-prompts](https://github.com/f/awesome-chatgpt-prompts)
- Automatically compresses chat history to support long conversations while also saving your tokens
- I18n: English, 简体中文, 繁体中文, 日本語, Français, Español, Italiano, Türkçe, Deutsch, Tiếng Việt, Русский, Čeština, 한국어
- I18n: English, 简体中文, 繁体中文, 日本語, Français, Español, Italiano, Türkçe, Deutsch, Tiếng Việt, Русский, Čeština, 한국어, Indonesia
## Roadmap
@ -257,6 +257,16 @@ If your proxy needs password, use:
bash <(curl -s https://raw.githubusercontent.com/Yidadaa/ChatGPT-Next-Web/main/scripts/setup.sh)
```
## Documentation
> Please go to the [docs][./docs] directory for more documentation instructions.
- [Deploy with cloudflare (Deprecated)](./docs/cloudflare-pages-en.md)
- [Frequent Ask Questions](./docs/faq-en.md)
- [How to add a new translation](./docs/translation.md)
- [How to use Vercel (No English)](./docs/vercel-cn.md)
- [User Manual (Only Chinese, WIP)](./docs/user-manual-cn.md)
## Screenshots
![Settings](./docs/images/settings.png)

View File

@ -584,7 +584,7 @@ export function JsonPreviewer(props: {
messages: [
{
role: "system",
content: "You are an assistant that " + props.topic,
content: `${Locale.FineTuned.Sysmessage} ${props.topic}`,
},
...props.messages.map((m) => ({
role: m.role,

View File

@ -174,7 +174,7 @@ export function SideBar(props: { className?: string }) {
</Link>
</div>
<div className={styles["sidebar-action"]}>
<a href={REPO_URL} target="_blank">
<a href={REPO_URL} target="_blank" rel="noopener noreferrer">
<IconButton icon={<GithubIcon />} shadow />
</a>
</div>

View File

@ -63,6 +63,8 @@ Knowledge cutoff: 2021-09
Current model: {{model}}
Current time: {{time}}`;
export const SUMMARIZE_MODEL = "gpt-3.5-turbo";
export const DEFAULT_MODELS = [
{
name: "gpt-4",

View File

@ -233,6 +233,9 @@ ${builtin} مدمجة، ${custom} تم تعريفها من قبل المستخد
Plugin: {
Name: "المكوّن الإضافي",
},
FineTuned: {
Sysmessage: "أنت مساعد ي",
},
Mask: {
Name: "الأقنعة",
Page: {

View File

@ -271,6 +271,9 @@ const bn: PartialLocaleType = {
Plugin: {
Name: "প্লাগইন",
},
FineTuned: {
Sysmessage: "আপনি একটি সহকারী যা",
},
Mask: {
Name: "মাস্ক",
Page: {

View File

@ -290,6 +290,9 @@ const cn = {
Plugin: {
Name: "插件",
},
FineTuned: {
Sysmessage: "你是一个助手",
},
Mask: {
Name: "面具",
Page: {

View File

@ -188,6 +188,9 @@ const cs: PartialLocaleType = {
Plugin: {
Name: "Plugin",
},
FineTuned: {
Sysmessage: "Jste asistent, který",
},
Mask: {
Name: "Maska",
Page: {

View File

@ -192,6 +192,9 @@ const de: PartialLocaleType = {
Plugin: {
Name: "Plugin",
},
FineTuned: {
Sysmessage: "Du bist ein Assistent, der",
},
Mask: {
Name: "Mask",
Page: {

View File

@ -295,6 +295,9 @@ const en: LocaleType = {
Plugin: {
Name: "Plugin",
},
FineTuned: {
Sysmessage: "You are an assistant that",
},
Mask: {
Name: "Mask",
Page: {

View File

@ -190,6 +190,9 @@ const es: PartialLocaleType = {
Plugin: {
Name: "Plugin",
},
FineTuned: {
Sysmessage: "Eres un asistente que",
},
Mask: {
Name: "Mask",
Page: {

View File

@ -244,6 +244,9 @@ const fr: PartialLocaleType = {
Plugin: {
Name: "Extension",
},
FineTuned: {
Sysmessage: "Eres un asistente que",
},
Mask: {
Name: "Masque",
Page: {

352
app/locales/id.ts Normal file
View File

@ -0,0 +1,352 @@
import { SubmitKey } from "../store/config";
import { PartialLocaleType } from "./index";
const id: PartialLocaleType = {
WIP: "Coming Soon...",
Error: {
Unauthorized:
"Akses tidak diizinkan. Silakan [otorisasi](/#/auth) dengan memasukkan kode akses.",
},
Auth: {
Title: "Diperlukan Kode Akses",
Tips: "Masukkan kode akses di bawah",
Input: "Kode Akses",
Confirm: "Konfirmasi",
Later: "Nanti",
},
ChatItem: {
ChatItemCount: (count: number) => `${count} pesan`,
},
Chat: {
SubTitle: (count: number) => `${count} pesan`,
Actions: {
ChatList: "Buka Daftar Chat",
CompressedHistory: "Ekspor Riwayat Terkompresi",
Export: "Ekspor Semua Pesan sebagai Markdown",
Copy: "Salin",
Stop: "Berhenti",
Retry: "Coba Lagi",
Pin: "Pin",
PinToastContent: "2 pesan telah ditandai",
PinToastAction: "Lihat",
Delete: "Hapus",
Edit: "Edit",
},
Commands: {
new: "Mulai Chat Baru",
newm: "Mulai Chat Baru dengan Masks",
next: "Chat Selanjutnya",
prev: "Chat Sebelumnya",
clear: "Bersihkan Percakapan",
del: "Hapus Chat",
},
InputActions: {
Stop: "Berhenti",
ToBottom: "Ke Bagian Bawah",
Theme: {
auto: "Otomatis",
light: "Tema Terang",
dark: "Tema Gelap",
},
Prompt: "Prompts",
Masks: "Masks",
Clear: "Bersihkan Percakapan",
Settings: "Pengaturan",
},
Rename: "Ubah Nama Chat",
Typing: "Mengetik...",
Input: (submitKey: string) => {
var inputHints = `${submitKey} untuk mengirim`;
if (submitKey === String(SubmitKey.Enter)) {
inputHints += ", Shift + Enter untuk membalut";
}
return inputHints + ", / untuk mencari prompt, : untuk menggunakan perintah";
},
Send: "Kirim",
Config: {
Reset: "Reset ke Default",
SaveAs: "Simpan sebagai Masks",
},
},
Export: {
Title: "Ekspor Pesan",
Copy: "Salin Semua",
Download: "Unduh",
MessageFromYou: "Pesan dari Anda",
MessageFromChatGPT: "Pesan dari ChatGPT",
Share: "Bagikan ke ShareGPT",
Format: {
Title: "Format Ekspor",
SubTitle: "Markdown atau Gambar PNG",
},
IncludeContext: {
Title: "Sertakan Konteks",
SubTitle: "Apakah akan menyertakan masks",
},
Steps: {
Select: "Pilih",
Preview: "Pratinjau",
},
},
Select: {
Search: "Cari",
All: "Pilih Semua",
Latest: "Pilih Terbaru",
Clear: "Bersihkan",
},
Memory: {
Title: "Prompt Memori",
EmptyContent: "Belum ada yang tersedia.",
Send: "Kirim Memori",
Copy: "Salin Memori",
Reset: "Reset",
ResetConfirm:
"Jika Anda mereset, riwayat obrolan saat ini dan memori historis akan dihapus. Apakah Anda yakin ingin melakukan reset?",
},
Home: {
NewChat: "Obrolan Baru",
DeleteChat: "Anda yakin ingin menghapus percakapan yang dipilih?",
DeleteToast: "Percakapan telah dihapus",
Revert: "Kembali",
},
Settings: {
Title: "Pengaturan",
SubTitle: "Semua Pengaturan",
Danger: {
Reset: {
Title: "Setel Ulang Semua Pengaturan",
SubTitle: "Mengembalikan semua pengaturan ke nilai default",
Action: "Setel Ulang",
Confirm: "Anda yakin ingin mengembalikan semua pengaturan ke nilai default?",
},
Clear: {
Title: "Hapus Semua Data",
SubTitle: "Menghapus semua pesan dan pengaturan",
Action: "Hapus",
Confirm: "Anda yakin ingin menghapus semua pesan dan pengaturan?",
},
},
Lang: {
Name: "Bahasa", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language`
All: "Semua Bahasa",
},
Avatar: "Avatar",
FontSize: {
Title: "Ukuran Font",
SubTitle: "Ubah ukuran font konten chat",
},
InjectSystemPrompts: {
Title: "Suntikkan Petunjuk Sistem",
SubTitle:
"Tambahkan petunjuk simulasi sistem ChatGPT di awal daftar pesan yang diminta dalam setiap permintaan",
},
InputTemplate: {
Title: "Template Input",
SubTitle: "Pesan baru akan diisi menggunakan template ini",
},
Update: {
Version: (x: string) => `Version: ${x}`,
IsLatest: "Versi terbaru",
CheckUpdate: "Periksa Pembaruan",
IsChecking: "Memeriksa pembaruan...",
FoundUpdate: (x: string) => `Versi terbaru ditemukan: ${x}`,
GoToUpdate: "Perbarui Sekarang",
},
AutoGenerateTitle: {
Title: "Hasilkan Judul Otomatis",
SubTitle: "Hasilkan judul yang sesuai berdasarkan konten percakapan",
},
SendKey: "Kirim",
Theme: "Tema",
TightBorder: "Batas Ketat",
SendPreviewBubble: {
Title: "Pratinjau Obrolan",
SubTitle: "Pratinjau Obrolan dengan markdown",
},
Mask: {
Splash: {
Title: "Layar Pembuka Masks",
SubTitle:
"Tampilkan layar pembuka masks sebelum memulai percakapan baru",
},
Builtin: {
Title: "Sembunyikan Masks Bawaan",
SubTitle: "Sembunyikan Masks bawaan dari daftar masks",
},
},
Prompt: {
Disable: {
Title: "Nonaktifkan Otomatisasi",
SubTitle: "Aktifkan/Matikan otomatisasi",
},
List: "Daftar Prompt",
ListCount: (builtin: number, custom: number) =>
`${builtin} bawaan, ${custom} penggunaan khusus`,
Edit: "Edit",
Modal: {
Title: "Daftar Prompt",
Add: "Tambahkan",
Search: "Cari Prompt",
},
EditModal: {
Title: "Edit Prompt",
},
},
HistoryCount: {
Title: "Jumlah Pesan Riwayat",
SubTitle: "Jumlah pesan yang akan dikirim setiap permintaan",
},
CompressThreshold: {
Title: "Batas Kompresi Riwayat",
SubTitle:
"Jika panjang pesan melebihi batas yang ditentukan, pesan tersebut akan dikompresi",
},
Token: {
Title: "Kunci API",
SubTitle: "Gunakan kunci Anda untuk melewati batas kode akses",
Placeholder: "Kunci API OpenAI",
},
Usage: {
Title: "Saldo Akun",
SubTitle(used: any, total: any) {
return `Digunakan bulan ini: ${used}, total langganan: ${total}`;
},
IsChecking: "Memeriksa...",
Check: "Periksa",
NoAccess: "Masukkan kunci API untuk memeriksa saldo",
},
AccessCode: {
Title: "Kode Akses",
SubTitle: "Kontrol akses diaktifkan",
Placeholder: "Diperlukan kode akses",
},
Endpoint: {
Title: "Endpoint",
SubTitle: "Harus dimulai dengan http(s):// untuk endpoint kustom",
},
Model: "Model",
Temperature: {
Title: "Suhu",
SubTitle: "Semakin tinggi nilainya, semakin acak keluarannya",
},
TopP: {
Title: "Top P",
SubTitle: "Tidak mengubah nilai dengan suhu",
},
MaxTokens: {
Title: "Token Maksimum",
SubTitle: "Panjang maksimum token input dan output",
},
PresencePenalty: {
Title: "Penalti Kehadiran",
SubTitle: "Semakin tinggi nilai, semakin mungkin topik baru muncul",
},
FrequencyPenalty: {
Title: "Penalti Frekuensi",
SubTitle: "Semakin tinggi nilai, semakin rendah kemungkinan penggunaan ulang baris yang sama",
},
},
Store: {
DefaultTopic: "Percakapan Baru",
BotHello: "Halo! Bagaimana saya bisa membantu Anda hari ini?",
Error: "Terjadi kesalahan, silakan coba lagi nanti.",
Prompt: {
History: (content: string) =>
"Ini adalah ringkasan singkat dari riwayat percakapan: " + content,
Topic:
"Buat judul berisi empat hingga lima kata untuk percakapan kita yang tidak akan disertakan dalam ringkasan percakapan, seperti instruksi, format, kutipan, tanda baca awal, tanda kutip pendahuluan, atau karakter tambahan. Silakan coba dengan kutipan berakhir.",
Summarize:
"Buat ringkasan percakapan dalam 200 kata yang akan digunakan sebagai promp di masa depan.",
},
},
Copy: {
Success: "Berhasil disalin ke clipboard",
Failed: "Gagal menyalin, berikan izin untuk memberikan izin",
},
Context: {
Toast: (x: any) => `Dengan ${x} promp kontekstual`,
Edit: "Pengaturan Obrolan Saat Ini",
Add: "Tambahkan Promp",
Clear: "Bersihkan Konteks",
Revert: "Kembali ke Posisi Sebelumnya",
},
Plugin: {
Name: "Plugin",
},
FineTuned: {
Sysmessage: "Anda adalah asisten yang",
},
Mask: {
Name: "Masks",
Page: {
Title: "Template Promp",
SubTitle: (count: number) => `${count} template prompt`,
Search: "Cari template",
Create: "Buat",
},
Item: {
Info: (count: number) => `${count} prompt`,
Chat: "Obrolan",
View: "Lihat",
Edit: "Edit",
Delete: "Hapus",
DeleteConfirm: "Anda yakin ingin menghapus?",
},
EditModal: {
Title: (readonly: boolean) =>
`Edit Template Prompt ${readonly ? "(hanya baca)" : ""}`,
Download: "Unduh",
Clone: "Duplikat",
},
Config: {
Avatar: "Avatar Bot",
Name: "Nama Bot",
Sync: {
Title: "Gunakan Konfigurasi Global",
SubTitle: "Gunakan konfigurasi global dalam percakapan ini",
Confirm:
"Pastikan untuk mengganti konfigurasi kustom dengan konfigurasi global?",
},
HideContext: {
Title: "Sembunyikan Prompt Konteks",
SubTitle: "Tidak menampilkan prompt konteks dalam obrolan",
},
Share: {
Title: "Bagikan Masks Ini",
SubTitle: "Buat tautan untuk masks ini",
Action: "Salin Tautan",
},
},
},
NewChat: {
Return: "Kembali",
Skip: "Lewati",
Title: "Pilih Masks",
SubTitle: "Berkonversasilah dengan diri Anda di balik masks",
More: "Lebih Lanjut",
NotShow: "Jangan Tampilkan Sekarang",
ConfirmNoShow:
"Pastikan untuk menonaktifkannya? Anda dapat mengaktifkannya nanti melalui pengaturan.",
},
UI: {
Confirm: "Konfirmasi",
Cancel: "Batal",
Close: "Tutup",
Create: "Buat",
Edit: "Edit",
},
Exporter: {
Model: "Model",
Messages: "Pesan",
Topic: "Topik",
Time: "Waktu",
},
URLCommand: {
Code: "Kode akses terdeteksi dari url, konfirmasi untuk mendaftar ? ",
Settings: "Pengaturan terdeteksi dari url, konfirmasi untuk diterapkan ?",
},
};
export default id;

View File

@ -1,6 +1,7 @@
import cn from "./cn";
import en from "./en";
import tw from "./tw";
import id from "./id";
import fr from "./fr";
import es from "./es";
import it from "./it";
@ -25,6 +26,7 @@ const ALL_LANGS = {
tw,
jp,
ko,
id,
fr,
es,
it,
@ -48,6 +50,7 @@ export const ALL_LANG_OPTIONS: Record<Lang, string> = {
tw: "繁體中文",
jp: "日本語",
ko: "한국어",
id: "Indonesia",
fr: "Français",
es: "Español",
it: "Italiano",

View File

@ -191,6 +191,9 @@ const it: PartialLocaleType = {
Plugin: {
Name: "Plugin",
},
FineTuned: {
Sysmessage: "Sei un assistente che",
},
Mask: {
Name: "Mask",
Page: {

View File

@ -204,6 +204,7 @@ const jp: PartialLocaleType = {
Add: "追加",
},
Plugin: { Name: "プラグイン" },
FineTuned: { Sysmessage: "あなたはアシスタントです" },
Mask: {
Name: "キャラクタープリセット",
Page: {

View File

@ -186,6 +186,9 @@ const ko: PartialLocaleType = {
Plugin: {
Name: "플러그인",
},
FineTuned: {
Sysmessage: "당신은 어시스턴트입니다",
},
Mask: {
Name: "마스크",
Page: {

View File

@ -191,6 +191,9 @@ const ru: PartialLocaleType = {
Plugin: {
Name: "Плагин",
},
FineTuned: {
Sysmessage: "Вы - ассистент, который",
},
Mask: {
Name: "Маска",
Page: {

View File

@ -191,6 +191,9 @@ const tr: PartialLocaleType = {
Plugin: {
Name: "Plugin",
},
FineTuned: {
Sysmessage: "Sen bir asistansın",
},
Mask: {
Name: "Mask",
Page: {

View File

@ -180,6 +180,7 @@ const tw: PartialLocaleType = {
Add: "新增一條",
},
Plugin: { Name: "外掛" },
FineTuned: { Sysmessage: "你是一個助手" },
Mask: {
Name: "面具",
Page: {

View File

@ -186,6 +186,9 @@ const vi: PartialLocaleType = {
Plugin: {
Name: "Plugin",
},
FineTuned: {
Sysmessage: "Bạn là một trợ lý",
},
Mask: {
Name: "Mẫu",
Page: {

View File

@ -11,6 +11,7 @@ import {
DEFAULT_INPUT_TEMPLATE,
DEFAULT_SYSTEM_TEMPLATE,
StoreKey,
SUMMARIZE_MODEL,
} from "../constant";
import { api, RequestMessage } from "../client/api";
import { ChatControllerPool } from "../client/controller";
@ -80,6 +81,11 @@ function createEmptySession(): ChatSession {
};
}
function getSummarizeModel(currentModel: string) {
// if it is using gpt-* models, force to use 3.5 to summarize
return currentModel.startsWith("gpt") ? SUMMARIZE_MODEL : currentModel;
}
interface ChatStore {
sessions: ChatSession[];
currentSessionIndex: number;
@ -501,7 +507,7 @@ export const useChatStore = create<ChatStore>()(
api.llm.chat({
messages: topicMessages,
config: {
model: "gpt-3.5-turbo",
model: getSummarizeModel(session.mask.modelConfig.model),
},
onFinish(message) {
get().updateCurrentSession(
@ -555,7 +561,11 @@ export const useChatStore = create<ChatStore>()(
date: "",
}),
),
config: { ...modelConfig, stream: true, model: "gpt-3.5-turbo" },
config: {
...modelConfig,
stream: true,
model: getSummarizeModel(session.mask.modelConfig.model),
},
onUpdate(message) {
session.memoryPrompt = message;
},

View File

@ -1,6 +1,10 @@
export function merge(target: any, source: any) {
Object.keys(source).forEach(function (key) {
if (source[key] && typeof source[key] === "object") {
if (
source.hasOwnProperty(key) && // Check if the property is not inherited
source[key] &&
typeof source[key] === "object" || key === "__proto__" || key === "constructor"
) {
merge((target[key] = target[key] || {}), source[key]);
return;
}

101
docs/user-manual-cn.md Normal file
View File

@ -0,0 +1,101 @@
# 用户手册 User Manual
> No english version yet, please read this doc with ChatGPT or other translation tools.
本文档用于解释 ChatGPT Next Web 的部分功能介绍和设计原则。
## 面具 (Mask)
### 什么是面具?它和提示词的区别是什么?
面具 = 多个预设提示词 + 模型设置 + 对话设置。
其中预设提示词Contextual Prompts一般用于 In-Context Learning用于让 ChatGPT 生成更加符合要求的输出,也可以增加系统约束或者输入有限的额外知识。
模型设置则顾名思义,使用此面具创建的对话都会默认使用对应的模型参数。
对话设置是与对话体验相关的一系列设置,我们会在下方的章节中依次介绍。
### 如何添加一个预设面具?
目前仅能够通过编辑源代码的方式添加预设面具,请根据需要编辑 [mask](../app/masks/) 目录下对应语言的文件即可。
编辑步骤如下:
1. 在 ChatGPT Next Web 中配置好一个面具;
2. 使用面具编辑页面的下载按钮,将面具保存为 JSON 格式;
3. 让 ChatGPT 帮你将 json 文件格式化为对应的 ts 代码;
4. 放入对应的 .ts 文件。
后续会增加使用旁加载的方式加载面具。
## 对话 (Chat)
### 对话框上方的按钮的作用
在默认状态下,将鼠标移动到按钮上,即可查看按钮的文字说明,我们依次介绍:
- 对话设置:当前对话的设置,它与全局设置的关系,请查看下一小节的说明;
- 颜色主题:点击即可在自动、暗黑、浅色之间轮换;
- 快捷指令:项目内置的快捷填充预设提示词,也可以在对话框中输入 / 进行搜索;
- 所有面具:进入面具页面;
- 清除聊天:插入一个清除标记,标记上方的聊天将不会发给 GPT效果相当于清除了当前对话当然你也可以再次点击该按钮可取消清除
- 模型设置:更改当前对话的模型,注意,此按钮只会修改当前对话的模型,并不会修改全局默认模型。
### 对话内设置与全局设置的关系
目前有两处设置入口:
1. 页面左下角的设置按钮,进入后是全局设置页;
2. 对话框上方的设置按钮,进入后是对话设置页。
在新建对话后,该对话的设置默认与全局设置保持同步,修改全局设置,则新建对话的对话内设置也会被同步修改。
一旦用户手动更改过对话内设置,则对话内设置将与全局设置断开同步,此时更改全局设置,将不会对该对话生效。
如果想恢复两者的同步关系,可以将“对话内设置 -> 使用全局设置”选项勾选。
### 对话内设置项的含义
点开对话框上方的按钮,进入对话内设置,内容从上到下依次为:
- 预设提示词列表:可以增加、删除、排序预设提示词
- 角色头像:顾名思义
- 角色名称:顾名思义
- 隐藏预设对话:隐藏后,预设提示词不会出现在聊天界面
- 使用全局设置:用于表示当前对话是否使用全局对话设置
- 模型设置选项:剩余的选项与全局设置选项含义一致,见下一小节
### 全局设置项的含义
- model / temperature / top_p / max_tokens / presence_penalty / frequency_penalty 均为 ChatGPT 的设置参数,详情请查阅 OpenAI 官方文档,再次不再赘述;
- 注入系统级提示信息、用户输入预处理:详情请看 [https://github.com/Yidadaa/ChatGPT-Next-Web/issues/2144](https://github.com/Yidadaa/ChatGPT-Next-Web/issues/2144)
- 附带历史消息数:用户每次输入消息并发送时,所携带的最近 n 条消息数量;
- 历史消息长度压缩阈值:当已经产生的聊天字数达到该数值以后,则自动触发历史摘要功能;
- 历史摘要:是否启用历史摘要功能。
### 什么是历史摘要?
历史摘要功能,也是历史消息压缩功能,是保证长对话场景下保持历史记忆的关键,合理使用该功能可以在不丢失历史话题信息的情况下,节省所使用的 token。
由于 ChatGPT API 的长度限制,我们以 3.5 模型为例,它只能接受小于 4096 tokens 的对话消息,一旦超出这个数值,就会报错。
同时为了让 ChatGPT 理解我们对话的上下文,往往会携带多条历史消息来提供上下文信息,而当对话进行一段时间之后,很容易就会触发长度限制。
为了解决此问题,我们增加了历史记录压缩功能,假设阈值为 1000 字符,那么每次用户产生的聊天记录超过 1000 字符时,都会将没有被总结过的消息,发送给 ChatGPT让其产生一个 100 字所有的摘要。
这样,历史信息就从 1000 字压缩到了 100 字,这是一种有损压缩,但已能满足大多数使用场景。
### 什么时候应该关闭历史摘要?
历史摘要可能会影响 ChatGPT 的对话质量,所以如果对话场景是翻译、信息提取等一次性对话场景,请直接关闭历史摘要功能,并将历史消息数设置为 0。
### 当用户发送一条消息时,有哪些信息被发送出去了?
当用户在对话框输入了一条消息后,发送给 ChatGPT 的消息,包含以下几个部分:
1. 系统级提示词:用于尽可能贴近 ChatGPT 官方 WebUI 的使用体验,可在设置中关闭此信息;
2. 历史摘要:作为长期记忆,提供长久但模糊的上下文信息;
3. 预设提示词:当前对话内设置的预设提示词,用于 In-Context Learning 或者注入系统级限制;
4. 最近 n 条对话记录:作为短期记忆,提供短暂但精确的上下文信息;
5. 用户当前输入的消息。

View File

@ -10,7 +10,7 @@ case "$(uname -s)" in
exit 1
fi
else
if [[ ! "$(cat /etc/*-release | grep '^ID=')" =~ ^(ID=\"ubuntu\")|(ID=\"centos\")|(ID=\"arch\")$ ]]; then
if [[ !"$(cat /etc/*-release | grep '^ID=')" =~ ^(ID=\"ubuntu\")|(ID=\"centos\")|(ID=\"arch\")|(ID=\"debian\")$ ]]; then
echo "Unsupported Linux distribution."
exit 1
fi
@ -32,6 +32,9 @@ if ! command -v node >/dev/null || ! command -v git >/dev/null || ! command -v y
if [[ "$(cat /etc/*-release | grep '^ID=')" = "ID=ubuntu" ]]; then
sudo apt-get update
sudo apt-get -y install nodejs git yarn
elif [[ "$(cat /etc/*-release | grep '^ID=')" = "ID=debian" ]]; then
sudo apt-get update
sudo apt-get -y install nodejs git yarn
elif [[ "$(cat /etc/*-release | grep '^ID=')" = "ID=centos" ]]; then
sudo yum -y install epel-release
sudo yum -y install nodejs git yarn

View File

@ -9,7 +9,7 @@
},
"package": {
"productName": "ChatGPT Next Web",
"version": "2.9.4"
"version": "2.9.5"
},
"tauri": {
"allowlist": {