V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
amery2010
V2EX  ›  分享创造

[开源] TalkWithGemini 支持 vercel 一键部署,新版本无需代理即可免费使用 Gemini 多模态功能,支持最高 100 万 Token 的图片、音频、视频和文本文档解读。

  •  1
     
  •   amery2010 · 26 天前 · 1262 次点击

    一些朋友应该对 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 数也在稳步上升。

    Star History Chart

    随着使用人数的增加,大家也开始给出不少需求和反馈。有热心网友一次性给我提了 9 个想法🤣,这得累死我呀。也有一些朋友在使用过程中遇到了一些体验上的问题,也都在项目 issue 中友好的提问。对于这些朋友的需求和想法,我在新版本里几乎都一一实现。我会尽可能让希望这个项目的朋友能得到正向的反馈。


    接下来说一说这周痛苦的开发经历...

    之前的版本虽然可以上传文件,但由于 vercel 平台的限制,无法上传大于 4MB 的文件,这是一件非常尴尬的事情。为了解决这个问题,我先想到了用 Cloudflare Worker 代理转发的方式,但这种方式的局限性在于,虽然可以上传 500MB 的文件,但在国内无法与 Gemini 正常对话。为了解决这个问题,我想了好几天方案,也翻烂了 Google AI 的官方文档。偶然间发现 Gemini 的文件上传底层使用的是 Google Drive 。在反复研究和尝试之下,发现 Gemini 文件上传其实也支持分片上传,只不过尴尬是分片大小被限制在了 8MB 😅,这让我有**一种“柳暗花明,走错村”的感觉...**即然都到了这一步了,也没理由从头再来,即然 Gemini 接口无法解决问题,那就回过头去想想怎么让 vercel 平台支持大文件上传。功夫不负有心人,在多次尝试下,发现 vercel 的路由重写功能,可以支持 8MB 以上的文件上传。这样一样,整条路就忽然通畅了!在反复测试和完善之后,新版本的文件分片上传功能终于完整实现~虽然后来又遇到了在编译 docker 镜像过程中,动态变量丢失的问题,搞得我一夜没睡,这又是另一个 long long story 了。

    v0.10.7

    新版本除了实现大文件上传功能以外,主要是完善了整个对话框架的细节功能,其中包括十几个热心网友提出的需求。主要更新如下:

    • feat: 添加文本操作工具,包括重新生成、编辑、删除、复制和朗读
    • feat: 支持从剪贴板粘贴和上传图像/文件
    • feat: 支持拖放上传图像/文件
    • feat: 新增大文件分段上传功能
    • feat: 支持 PWA (实验性)
    • feat: 添加自定义模型列表和自定义默认模型
    • feat: 新增模型参数设置页面
    • feat: 助手市场增加分类筛选功能
    • feat: 使用通用代理接口转发数据
    • feat: 添加了文件上传的错误消息显示和文件清理
    • feat: 添加文件上传代理 url 配置参数
    • refactor: 重构文件上传逻辑,兼容 docker 部署方案
    • fix: 修复代码字段过长时页面布局混乱的问题
    • chore: 添加文件上传代理配置
    • build: 使用多个重写规则 hack 解决独立模式下重写规则变量无效的问题

    您可以通过 https://gemini.u14.app 进行体验,也可以通过使用 vercel 的一键部署功能,拥有专属于你的 Gemini 私人助理。

    项目地址:https://github.com/Amery2010/TalkWithGemini

    你们的支持( star )是我项目开发的最大动力!我会尽可能会回应所有合理的需求与反馈

    这周熬了几天夜,除了开发几乎没怎么出门😅,好在女朋友还能理解我。

    第 1 条附言  ·  26 天前

    有朋友觉得是 Gemini 是收费的,虽然不确定这是从哪先入为主的观念,但目前我一直在免费使用。你们不要使用 Google Cloud AI 的 key(收费),此项目也没做兼容。可以直接在 https://aistudio.google.com/app/apikey 上面申请免费的 Key,Gemini 1.5 Flash 目前一天可以免费使用 1500 次。注意,请创新新项目,老项目如果有接入计费 api,Google 默认会认为是商业用途,会按量收费。

    free-key

    15 条回复    2024-06-15 21:15:23 +08:00
    woorz
        1
    woorz  
       26 天前
    gemini api 收费的
    coter
        2
    coter  
       26 天前
    不错,希望加入用户系统,可以保存对话历史
    amery2010
        3
    amery2010  
    OP
       26 天前
    @woorz Google AI studio 的 key 可以免费申请,每天 1500 次,个人使用完全足够,注意不要使用计费模式下的 key 就可以。
    amery2010
        4
    amery2010  
    OP
       26 天前
    @coter 有计划做,可能要等几个版本
    cyio
        5
    cyio  
       25 天前
    作者开发给力!再请教几个问题:
    1. 文件上传到哪了,上限是多少
    2. 语音朗读有办法支持跨语言吗( chatgpt 的可以)
    amery2010
        6
    amery2010  
    OP
       25 天前
    @cyio
    1 、文件都是通过后端服务中转或者直接上传 Google AI Drive ,文件上传后只有查看 mata 信息的权限无法访问和下载源文件。
    2 、你问的跨语言是只文本在朗读过程中使用多种语言?还是你问的是中文,希望他用英文朗读文本?如果是后者可以通过设置页面进行语音合成语言类型的设置,前者的话没办法,底层调用的是微软的 edge-tts 服务。
    cyio
        7
    cyio  
       25 天前
    @amery2010 微软有,比如 Jenny Multilingual ,不知道 edge-tts 服务是怎么调的,语音选项里有没有
    amery2010
        8
    amery2010  
    OP
       24 天前
    @cyio 我底层的 tts 库是接入的免费的服务 api ,可选择的角色较少。
    设置-语音服务
    合成声源与语音合成是联动的,你可以先选择目标语言,然后选择对应的合成声源

    如果对应语言下的合成声源列表中没有你想要的语音包,那就没办法了,毕竟用的是免费的 api
    pkxutao
        9
    pkxutao  
       23 天前
    谢谢,很方便,提个个人建议: 内容最下端不要显示在输入框下面,在输入框顶端就截止会比较好,不喜欢文字被输入框覆盖
    amery2010
        10
    amery2010  
    OP
       23 天前
    @pkxutao 后续会考虑进行优化
    nfksuk
        11
    nfksuk  
       13 天前
    很棒的应用,准备尝试部署。
    nfksuk
        12
    nfksuk  
       12 天前
    直接使用提示: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.
    amery2010
        13
    amery2010  
    OP
       12 天前
    @nfksuk 国内不支持直接访问 Gemini API ,这个问题请参看常见问题部分的解决方案
    bian2023
        14
    bian2023  
       6 天前 via Android
    @amery2010
    > 我先想到了用 Cloudflare Worker 代理转发的方式,但这种方式的局限性在于,虽然可以上传 500MB 的文件,但在国内无法与 Gemini 正常对话。
    ---
    worker 默认域名被墙可以通过绑定自义定域名解决,而且还可以通过自义定路径的方式使用优选 IP 。至于地区不支持问题:国内现在连 CF 数据中心基本都是圣何塞或者洛杉矶的,不专门优选,连到香港数据中心的概率很小,所以 CF worker 连接谷歌的 IP 大概率也是美国的,所以希望考虑下 CF worker 上传的方案(主要是 vercel 每月有流量限制,免费账号我还部署这其他东西,流量不太够)
    amery2010
        15
    amery2010  
    OP
       6 天前
    目前支持使用 CF worker 作为代理,CF worker 的脚本我也有提供 [如何使用 Cloudflare Worker]( https://github.com/Amery2010/TalkWithGemini/blob/main/docs/How-to-deploy-the-Cloudflare-Worker-api-proxy.md)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2563 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 09:58 · PVG 17:58 · LAX 02:58 · JFK 05:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.