一些朋友应该对 TalkWithGemini 已经不在陌生,这是我作为独立开发者第三次在 V2EX 上发布新版本。
回顾之前的两篇文章:
可能是目前唯一完整支持 Gemini 1.5 Pro 和 Gemini 1.5 Flash 多模态模型的开源聊天框架
[开源] Gemini Pro 极简聊天框架,支持图文聊天和语音对话模式 https://gemini.u14.app/
起初,我只是作为爱好而开发了 TalkWithGemini,作为 Gemini 的基础聊天框架,除了极简之外其实没有太多的亮点。但 V2EX 上的朋友还是给了我不错的反馈,不到一天时间 star 数破百。作为独立开发者而言这是一次不小的激励。
在 Google I/O 2024 发布会之后,Google 开放了更强大的 Gemini 1.5 Pro 和 Gemini 1.5 Flash 。这两个强大的多模态模型,和之前的 Gemini Pro 相比,完全是质的飞跃。为了兼容 Gemini 1.5 系列的接口,我不得不重写底层的对话结构。如果要让模型理解除文字以外的内容,我需要先上传文件,但官方的 npm 包只支持 node 环境,我不得不用几天的时间研究开发了一套通用环境的文件上传功能。这个过程虽然辛苦,但当我看到最后的成果时忽然觉得一切都是值得的。上周发布的版本,一开始反响平平,但想不到经过一些热心的 v 友主动转发,项目开始不断扩散,star 数也在稳步上升。
随着使用人数的增加,大家也开始给出不少需求和反馈。有热心网友一次性给我提了 9 个想法🤣,这得累死我呀。也有一些朋友在使用过程中遇到了一些体验上的问题,也都在项目 issue 中友好的提问。对于这些朋友的需求和想法,我在新版本里几乎都一一实现。我会尽可能让希望这个项目的朋友能得到正向的反馈。
接下来说一说这周痛苦的开发经历...
之前的版本虽然可以上传文件,但由于 vercel 平台的限制,无法上传大于 4MB 的文件,这是一件非常尴尬的事情。为了解决这个问题,我先想到了用 Cloudflare Worker 代理转发的方式,但这种方式的局限性在于,虽然可以上传 500MB 的文件,但在国内无法与 Gemini 正常对话。为了解决这个问题,我想了好几天方案,也翻烂了 Google AI 的官方文档。偶然间发现 Gemini 的文件上传底层使用的是 Google Drive 。在反复研究和尝试之下,发现 Gemini 文件上传其实也支持分片上传,只不过尴尬是分片大小被限制在了 8MB 😅,这让我有**一种“柳暗花明,走错村”的感觉...**即然都到了这一步了,也没理由从头再来,即然 Gemini 接口无法解决问题,那就回过头去想想怎么让 vercel 平台支持大文件上传。功夫不负有心人,在多次尝试下,发现 vercel 的路由重写功能,可以支持 8MB 以上的文件上传。这样一样,整条路就忽然通畅了!在反复测试和完善之后,新版本的文件分片上传功能终于完整实现~虽然后来又遇到了在编译 docker 镜像过程中,动态变量丢失的问题,搞得我一夜没睡,这又是另一个 long long story 了。
新版本除了实现大文件上传功能以外,主要是完善了整个对话框架的细节功能,其中包括十几个热心网友提出的需求。主要更新如下:
您可以通过 https://gemini.u14.app 进行体验,也可以通过使用 vercel 的一键部署功能,拥有专属于你的 Gemini 私人助理。
项目地址:https://github.com/Amery2010/TalkWithGemini
你们的支持( star )是我项目开发的最大动力!我会尽可能会回应所有合理的需求与反馈
这周熬了几天夜,除了开发几乎没怎么出门😅,好在女朋友还能理解我。
有朋友觉得是 Gemini 是收费的,虽然不确定这是从哪先入为主的观念,但目前我一直在免费使用。你们不要使用 Google Cloud AI 的 key(收费),此项目也没做兼容。可以直接在 https://aistudio.google.com/app/apikey 上面申请免费的 Key,Gemini 1.5 Flash 目前一天可以免费使用 1500 次。注意,请创新新项目,老项目如果有接入计费 api,Google 默认会认为是商业用途,会按量收费。
1
woorz 213 天前
gemini api 收费的
|
2
coter 213 天前
不错,希望加入用户系统,可以保存对话历史
|
5
cyio 212 天前
作者开发给力!再请教几个问题:
1. 文件上传到哪了,上限是多少 2. 语音朗读有办法支持跨语言吗( chatgpt 的可以) |
6
amery2010 OP @cyio
1 、文件都是通过后端服务中转或者直接上传 Google AI Drive ,文件上传后只有查看 mata 信息的权限无法访问和下载源文件。 2 、你问的跨语言是只文本在朗读过程中使用多种语言?还是你问的是中文,希望他用英文朗读文本?如果是后者可以通过设置页面进行语音合成语言类型的设置,前者的话没办法,底层调用的是微软的 edge-tts 服务。 |
8
amery2010 OP @cyio 我底层的 tts 库是接入的免费的服务 api ,可选择的角色较少。
设置-语音服务 合成声源与语音合成是联动的,你可以先选择目标语言,然后选择对应的合成声源 如果对应语言下的合成声源列表中没有你想要的语音包,那就没办法了,毕竟用的是免费的 api |
9
pkxutao 209 天前
|
11
nfksuk 199 天前
很棒的应用,准备尝试部署。
|
12
nfksuk 199 天前
直接使用提示:400: [GoogleGenerativeAI Error]: Error fetching from https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:streamGenerateContent?alt=sse: [400 ] User location is not supported for the API use.
|
14
bian2023 193 天前 via Android
@amery2010
> 我先想到了用 Cloudflare Worker 代理转发的方式,但这种方式的局限性在于,虽然可以上传 500MB 的文件,但在国内无法与 Gemini 正常对话。 --- worker 默认域名被墙可以通过绑定自义定域名解决,而且还可以通过自义定路径的方式使用优选 IP 。至于地区不支持问题:国内现在连 CF 数据中心基本都是圣何塞或者洛杉矶的,不专门优选,连到香港数据中心的概率很小,所以 CF worker 连接谷歌的 IP 大概率也是美国的,所以希望考虑下 CF worker 上传的方案(主要是 vercel 每月有流量限制,免费账号我还部署这其他东西,流量不太够) |
15
amery2010 OP 目前支持使用 CF worker 作为代理,CF worker 的脚本我也有提供 [如何使用 Cloudflare Worker]( https://github.com/Amery2010/TalkWithGemini/blob/main/docs/How-to-deploy-the-Cloudflare-Worker-api-proxy.md)
|