openai-translator / openai-translator

基于 ChatGPT API 的划词翻译浏览器插件和跨平台桌面端应用 - Browser extension and cross-platform desktop application for translation based on ChatGPT API.
GNU Affero General Public License v3.0
23.93k stars 1.74k forks source link

[Bug] 当翻译内容较长时,总是出现大段的翻译错误和格式错误。以下是一个 #1603

Open terrysc opened 5 months ago

terrysc commented 5 months ago

Please search before asking

Please read README

Please check your network and OpenAI API quota

OpenAI Translator version

Version 0.4.20

Model name

ChatGPT 4o

系统/浏览器版本 System/Browser version

macOS 14.4.1

复现步骤 Reproduce step

将较长的英文使用PopClip翻译成中文时必触发。

截屏2024-06-18 12 40 08

你看到了什么错误?What errors do you see?

在翻译较长(也不是特别长)的中文文本时发生格式和翻译的双重乱码,该问题已经在多个版本发生,一直未被修正。怀疑中译英也有类似问题,但暂未查证。

你期望看到什么?What did you expect to see?

在翻译较长文本时能和短文本翻译时一样,如实反映chatgpt反回的结果。这能大大增加效率和避免不必要的精力花费,如多次确认文本细节,以及在中译英时过度担心相似问题的发生。

还有其他的内容吗?Anything else?

No response

你是否愿意提交一份 PR 来修改这个错误?Are you willing to submit a PR?

omegaduncan commented 5 months ago

Please search before asking

  • [x] I searched in the issues and found nothing similar.

Please read README

  • [x] I have read the troubleshooting section in the README in detail.

Please check your network and OpenAI API quota

  • [x] I am sure it is not a network issue or an OpenAI API quota issue.

OpenAI Translator version

Version 0.4.20

Model name

ChatGPT 4o

系统/浏览器版本 System/Browser version

macOS 14.4.1

复现步骤 Reproduce step

将较长的英文使用PopClip翻译成中文时必触发。 截屏2024-06-18 12 40 08

你看到了什么错误?What errors do you see?

在翻译较长(也不是特别长)的中文文本时发生格式和翻译的双重乱码,该问题已经在多个版本发生,一直未被修正。怀疑中译英也有类似问题,但暂未查证。

你期望看到什么?What did you expect to see?

在翻译较长文本时能和短文本翻译时一样,如实反映chatgpt反回的结果。这能大大增加效率和避免不必要的精力花费,如多次确认文本细节,以及在中译英时过度担心相似问题的发生。

还有其他的内容吗?Anything else?

No response

你是否愿意提交一份 PR 来修改这个错误?Are you willing to submit a PR?

  • [ ] 我愿意提供 PR! I'm willing to submit a PR!

我也遇過這個狀況,我將 frequency_penaltiespresence_penalties1 調整為 0 後就正常了,現階段可以先自己修改源碼頂著用

sunsky89757 commented 1 month ago

image 这个问题一直没解决

omegaduncan commented 1 month ago

image 这个问题一直没解决

frequency_penaltypresence_penalty 從 1 調整為 0 後就恢復正常了

  1. 對於手動安裝的擴展:可以在 ./assets 文件夾中找到 i18n-*.js 文件,找到此文件中的 getBaseRequestBody 函數。 將此函數中的 frequency_penaltypresence_penalty 從 1 調整為 0,然後重新載入擴展即可。

  2. 對於從原始碼構建的擴展:找到以下文件及函數 https://github.com/openai-translator/openai-translator/blob/95f92ff12e0058857146d5e700658216496d657b/src/common/engines/abstract-openai.ts#L94

    async getBaseRequestBody(): Promise<Record<string, any>> {
        const model = await this.getAPIModel()
        return {
            model,
            temperature: 0,
            top_p: 1,
            frequency_penalty: 1,
            presence_penalty: 1,
            stream: true,
        }
    }

將此函數中的 frequency_penaltypresence_penalty 從 1 調整為 0,然後使用以下命令重新編譯成未封裝擴展:

npm install
npm run build

編譯後的文件將生成在 build 目錄下。在瀏覽器中開啟開發人員模式,並載入這個未封裝的擴展即可。

相關的 PR #1627 社區已經提交,可以等待合併