[GH-ISSUE #137] openai方式调用gemini乱码,docker部署,找不到配置文件 #110

Closed
opened 2026-02-27 07:18:02 +03:00 by kerem · 8 comments
Owner

Originally created by @jorthmb on GitHub (Dec 25, 2025).
Original GitHub issue: https://github.com/justlovemaki/AIClient-2-API/issues/137

openai方式调用gemini乱码:
比如提问一些简单问题“你是谁”,回复中个别字符乱码显示不出来,显示为"??"

docker部署,找不到配置文件:
比如登录的时候,找不到token-store.json,然后创建失败,没有权限
进去配置提供商也同样找不到,也创建不了配置文件.....

建议把需要的配置文件放在一个文件夹里,方便挂载、绑定文件夹,直接使用之前的

Originally created by @jorthmb on GitHub (Dec 25, 2025). Original GitHub issue: https://github.com/justlovemaki/AIClient-2-API/issues/137 openai方式调用gemini乱码: 比如提问一些简单问题“你是谁”,回复中个别字符乱码显示不出来,显示为"??" docker部署,找不到配置文件: 比如登录的时候,找不到token-store.json,然后创建失败,没有权限 进去配置提供商也同样找不到,也创建不了配置文件..... 建议把需要的配置文件放在一个文件夹里,方便挂载、绑定文件夹,直接使用之前的
kerem closed this issue 2026-02-27 07:18:03 +03:00
Author
Owner

@justlovemaki commented on GitHub (Dec 25, 2025):

1.回复乱码是模型问题
2.配置问题可以这么解决

<!-- gh-comment-id:3690823238 --> @justlovemaki commented on GitHub (Dec 25, 2025): 1.回复乱码是模型问题 2.配置问题可以这么解决
Author
Owner

@jorthmb commented on GitHub (Dec 25, 2025):

用new-api接入AIClient-2-API,有几率出现乱码,直接接入官方链接"https://generativelanguage.googleapis.com/v1beta/openai/",一点问题都没有。

<!-- gh-comment-id:3691186129 --> @jorthmb commented on GitHub (Dec 25, 2025): 用new-api接入AIClient-2-API,有几率出现乱码,直接接入官方链接"https://generativelanguage.googleapis.com/v1beta/openai/",一点问题都没有。
Author
Owner

@justlovemaki commented on GitHub (Dec 25, 2025):

基于gemini cli的2api是这个链接:https://cloudcode-pa.googleapis.com
和aistudio的api不一样的。

<!-- gh-comment-id:3691213948 --> @justlovemaki commented on GitHub (Dec 25, 2025): 基于gemini cli的2api是这个链接:https://cloudcode-pa.googleapis.com 和aistudio的api不一样的。
Author
Owner

@jorthmb commented on GitHub (Dec 25, 2025):

这个链接"https://generativelanguage.googleapis.com/v1beta/openai/"是以openai的方式调用gemini的,官方有文档
第二个问题怎么解决呢?

<!-- gh-comment-id:3691216735 --> @jorthmb commented on GitHub (Dec 25, 2025): 这个链接"https://generativelanguage.googleapis.com/v1beta/openai/"是以openai的方式调用gemini的,官方有文档 第二个问题怎么解决呢?
Author
Owner

@justlovemaki commented on GitHub (Dec 25, 2025):

这个链接"https://generativelanguage.googleapis.com/v1beta/openai/"是以openai的方式调用gemini的,官方有文档 第二个问题怎么解决呢?

1.aistudio的文档不适用于gemini cli
2.已处理,更新就行

<!-- gh-comment-id:3691286252 --> @justlovemaki commented on GitHub (Dec 25, 2025): > 这个链接"[https://generativelanguage.googleapis.com/v1beta/openai/"是以openai的方式调用gemini的,官方有文档](https://generativelanguage.googleapis.com/v1beta/openai/%22%E6%98%AF%E4%BB%A5openai%E7%9A%84%E6%96%B9%E5%BC%8F%E8%B0%83%E7%94%A8gemini%E7%9A%84%EF%BC%8C%E5%AE%98%E6%96%B9%E6%9C%89%E6%96%87%E6%A1%A3) 第二个问题怎么解决呢? 1.aistudio的文档不适用于gemini cli 2.已处理,更新就行
Author
Owner

@jorthmb commented on GitHub (Dec 25, 2025):

请看这个https://ai.google.dev/gemini-api/docs/openai?hl=zh-cn
不是gemini cli,看其中的 OpenAI 兼容性
from openai import OpenAI

client = OpenAI(
api_key="GEMINI_API_KEY",
base_url="https://generativelanguage.googleapis.com/v1beta/openai/"
)

response = client.chat.completions.create(
model="gemini-2.5-flash",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{
"role": "user",
"content": "Explain to me how AI works"
}
]
)

print(response.choices[0].message)

<!-- gh-comment-id:3691373346 --> @jorthmb commented on GitHub (Dec 25, 2025): 请看这个https://ai.google.dev/gemini-api/docs/openai?hl=zh-cn 不是gemini cli,看其中的 OpenAI 兼容性 from openai import OpenAI client = OpenAI( api_key="GEMINI_API_KEY", base_url="https://generativelanguage.googleapis.com/v1beta/openai/" ) response = client.chat.completions.create( model="gemini-2.5-flash", messages=[ {"role": "system", "content": "You are a helpful assistant."}, { "role": "user", "content": "Explain to me how AI works" } ] ) print(response.choices[0].message)
Author
Owner

@jorthmb commented on GitHub (Dec 25, 2025):

棒棒哒,慢慢完善了,非常看好这个项目,如果能添加一个多用户,堪称完美

<!-- gh-comment-id:3691398777 --> @jorthmb commented on GitHub (Dec 25, 2025): 棒棒哒,慢慢完善了,非常看好这个项目,如果能添加一个多用户,堪称完美
Author
Owner

@jorthmb commented on GitHub (Dec 26, 2025):

[src\openai\openai-core.js]

async *streamApi(endpoint, body, isRetry = false, retryCount = 0) {
const maxRetries = this.config.REQUEST_MAX_RETRIES;
const baseDelay = this.config.REQUEST_BASE_DELAY; // 1 second base delay

    // OpenAI 的流式请求需要将 stream 设置为 true
    const streamRequestBody = { ...body, stream: true };

    try {
        const response = await this.axiosInstance.post(endpoint, streamRequestBody, {
            responseType: 'stream'
        });

        const stream = response.data;
        let buffer = '';

        for await (const chunk of stream) {
            buffer += chunk.toString();                   //101<<--------------这里是不是有问题
            let newlineIndex;
            while ((newlineIndex = buffer.indexOf('\n')) !== -1) {
                const line = buffer.substring(0, newlineIndex).trim();
                buffer = buffer.substring(newlineIndex + 1);

                if (line.startsWith('data: ')) {
                    const jsonData = line.substring(6).trim();
                    if (jsonData === '[DONE]') {
                        return; // Stream finished
                    }
                    try {
                        const parsedChunk = JSON.parse(jsonData);
                        yield parsedChunk;
                    } catch (e) {
                        console.warn("[OpenAIApiService] Failed to parse stream chunk JSON:", e.message, "Data:", jsonData);
                    }
                } else if (line === '') {
                    // Empty line, end of an event
                }
            }
        }
    }

..........................................
buffer += chunk.toString(); //101<<--------------这里是不是有问题
一个中文占两个字节,如果接收到的数据最末字节只是一个中文字符串的第一个字节,或者数据的第一个字节是中文的第二个字节,这里没接收完整就直接转为字符串了,是不是有可能造成返回的数据乱码?

<!-- gh-comment-id:3692164854 --> @jorthmb commented on GitHub (Dec 26, 2025): [src\openai\openai-core.js] async *streamApi(endpoint, body, isRetry = false, retryCount = 0) { const maxRetries = this.config.REQUEST_MAX_RETRIES; const baseDelay = this.config.REQUEST_BASE_DELAY; // 1 second base delay // OpenAI 的流式请求需要将 stream 设置为 true const streamRequestBody = { ...body, stream: true }; try { const response = await this.axiosInstance.post(endpoint, streamRequestBody, { responseType: 'stream' }); const stream = response.data; let buffer = ''; for await (const chunk of stream) { buffer += chunk.toString(); //101<<--------------这里是不是有问题 let newlineIndex; while ((newlineIndex = buffer.indexOf('\n')) !== -1) { const line = buffer.substring(0, newlineIndex).trim(); buffer = buffer.substring(newlineIndex + 1); if (line.startsWith('data: ')) { const jsonData = line.substring(6).trim(); if (jsonData === '[DONE]') { return; // Stream finished } try { const parsedChunk = JSON.parse(jsonData); yield parsedChunk; } catch (e) { console.warn("[OpenAIApiService] Failed to parse stream chunk JSON:", e.message, "Data:", jsonData); } } else if (line === '') { // Empty line, end of an event } } } } .......................................... buffer += chunk.toString(); //101<<--------------这里是不是有问题 一个中文占两个字节,如果接收到的数据最末字节只是一个中文字符串的第一个字节,或者数据的第一个字节是中文的第二个字节,这里没接收完整就直接转为字符串了,是不是有可能造成返回的数据乱码?
Sign in to join this conversation.
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/AIClient-2-API-justlovemaki#110
No description provided.