佬 我是Mac nextchat 去哪下载app 还是有什么网站呀 api在用cherry studio 这个能支持 互联网么 感谢感谢!!!
感谢佬的大力帮助!!!
我已经和newapi作者说了,估计快适配 -search 了
cherry studio的最新版已经可以用搜索了
好像适配了,但是不会用。佬教一下
就是添加一个 gemini-2.0-flash-exp-search 模型就好
佬。使用newapi的openai格式的话,这个url.endsWith(‘gemini-2.0-flash-exp:streamGenerateContent’)总是判断为false怎么办?
或者说使用openai格式的话,这些工具和参数的设置还能生效吗
OpenAI 的请求体和 Gemini 的不一样,你试试这个
// 保存原始的 fetch 函数
const originalFetch = window.fetch;
// 重写 fetch 函数
window.fetch = async function(...args) {
// 如果是 POST 请求
if (args[1]?.method === 'POST') {
try {
// 获取请求体
const body = JSON.parse(args[1].body);
// 如果包含 messages 数组,说明是目标请求
if (Array.isArray(body.messages) && body.messages.length > 0) {
// 检查 model 参数是否同时包含 gemini, 2.0, flash(不区分大小写)
if (body.model &&
body.model.toLowerCase().includes('gemini') &&
body.model.toLowerCase().includes('2.0') &&
body.model.toLowerCase().includes('flash')) {
// 为最后一条消息添加 tools 参数
const lastMessage = body.messages[body.messages.length - 1];
lastMessage.tools = [{
"googleSearch": {}
}];
// 更新请求参数
args[1].body = JSON.stringify(body);
}
}
} catch (e) {
console.log('解析请求体失败:', e);
}
}
// 调用原始的 fetch 函数
return originalFetch.apply(this, args);
};
// 监听发送按钮点击
const sendButton = document.querySelector('button.button_icon-button__VwAMf.chat_chat-input-send__GFQZo');
if (sendButton) {
console.log('已设置请求拦截器');
}
改了下,你的模型名称需要同时包含 gemini
, 2.0
, flash
三要素才会进行拦截重写。
如果 New API 的逻辑是整个请求体反手闭眼传就能,如果是每一项都写死的不传输 tools 参数的话就不能,总而言之试试看,回车后就问问今天是几日几号诸如此类。
New API 会对请求进行转换统一为 OpenAI 格式,如果转换函数把这个 tools 参数过滤掉了的话就用不了。(楼上已经有佬向 New API 作者提 Issue 了,Cherry 客户端也已经原生支持)
确实用不了,直接报错 GenerateContentRequest.tools[0].function_declarations[0].name: Invalid function name
似乎不可以使用这种
这个错误今天见过,我修改了你再试试上面的 ↑
NextChat 页面按下 F5 刷新再试(不刷新的话监听是旧函数优先)
麻烦佬了,还是没有用,看来newapi问题还是太多了,这种统一转换为openai格式的管理系统好像抹杀了一大堆原有功能……
悲,有空我再找个支持 Gemini 2.0 的 New API 的公益站试试。已经有佬写好其他中转方式了你可以试试他们的。
感谢大佬分享 11
佬,可以了,更新一下newapi,然后将代码改成这样子就行了。
// 保存原始的 fetch 函数 const originalFetch = window.fetch; // 重写 fetch 函数 window.fetch = async function(...args) { // 如果是 POST 请求 if (args[1]?.method === 'POST') { try { // 获取请求体 const body = JSON.parse(args[1].body); // 如果包含 messages 数组,说明是目标请求 if (Array.isArray(body.messages) && body.model.toLowerCase().includes("gemini-2.0-flash-exp")) { // 添加 tools 参数 body.tools = [ { "type": "function", "function": { "name": "googleSearch" } }] // 更新请求参数 args[1].body = JSON.stringify(body); } } catch (e) { console.log('解析请求体失败:', e); } } // 调用原始的 fetch 函数 return originalFetch.apply(this, args); }; // 监听发送按钮点击 const sendButton = document.querySelector('button.button_icon-button__VwAMf.chat_chat-input-send__GFQZo'); if (sendButton) { console.log('已设置请求拦截器'); }