叫板GPT-4的Gemini,我做了一个聊天网页,可图片输入,附教程

先看效果:

简介

Gemini 是谷歌研发的最新一代大语言模型,目前有三个版本,被称为中杯、大杯、超大杯,Gemini Ultra 号称可与GPT-4一较高低:

  • Gemini Nano(预览访问)
    为设备端体验而构建的最高效模型,支持离线使用场景。
  • Gemini Pro(已推出)
    性能最佳的模型,具有各种文本和图像推理任务的功能。
  • Gemini Ultra(预览访问)
    将于2024年初推出,用于大规模高度复杂文本和图像推理任务的最强大模型。

Gemini Pro在八项基准测试中的六项上超越了GPT-3.5,被誉为“市场上最强大的免费聊天AI工具”。

本文,我们使用的是 Gemini Pro,Pro有两个模型:

  • gemini-pro:针对仅文本提示进行了优化。
  • gemini-pro-vision:针对文本和图像提示进行了优化。

API 免费!

Google这次确实给力,API直接免费开放,只要申请就给!

如何本地执行脚本 或 开发一个前端页面,顺利白嫖Google的Gemini呢?

先去 https://ai.google.dev/ 创建Gemini API key

顺便说一句,感兴趣可以去深入学习一下文档:https://ai.google.dev/docs

Gemini 构建应用程序所需的所有信息都可以在这个网站查到,包括Python、Android(Kotlin)、Node.js 和 Swift的支持文档。

我们直接看Python 快速入门指南:

https://ai.google.dev/tutorials/python_quickstart

更省事儿的是直接从这个官方示例中copy代码:

https://github.com/google/generative-ai-docs/blob/main/site/en/tutorials/python_quickstart.ipynb

核心代码

本地运行脚本,代码其实简单到离谱,6行足矣。

注:网络要畅通

# 先安装google-generativeai
pip install -q -U google-generativeai

文本对话

import google.generativeai as genai
GOOGLE_API_KEY='这里填写上一步获取的api'
genai.configure(api_key=GOOGLE_API_KEY)
model = genai.GenerativeModel('gemini-pro')
response = model.generate_content("你好")
print(response.text)

运行一下:

图片也可以作为输入,比如让Gemini评价一下我的头像

import PIL.Image
import google.generativeai as genai
img = PIL.Image.open('img.png')
GOOGLE_API_KEY='这里填写上一步获取的api'
genai.configure(api_key=GOOGLE_API_KEY)
model = genai.GenerativeModel('gemini-pro-vision')
response = model.generate_content(["请评价一下这张照片", img])
response.resolve()
print(response.text)

运行一下:

做个网页版

网页版可以使用streamlit或者Gradio实现,Gradio 本公众号写过,包括如何将项目免费部署到huggingface。需要了解更多:可以参考我这篇文章腾讯的这个算法,我搬到了网上,随便玩!

也可以部署到自己的服务器,加个域名就OK了

这里参考了这位大佬的代码:https://github.com/meryemsakin/GeminiGradioApp

我修改了源代码中GOOGLE_API_KEY获取方式并加了登陆认证,还做了一点中文翻译

代码如下:

import time
from typing import List, Tuple, Optionalimport google.generativeai as genai
import gradio as gr
from PIL import Imageprint("google-generativeai:", genai.__version__)TITLE = """<h1 align="center">Gemini App</h1>"""
SUBTITLE = """<h2 align="center">仅做试玩,不定期下线</h2>"""
GOOGLE_API_KEY='这里填写上一步获取的api'AVATAR_IMAGES = (None,"image.png"
)def preprocess_stop_sequences(stop_sequences: str) -> Optional[List[str]]:if not stop_sequences:return Nonereturn [sequence.strip() for sequence in stop_sequences.split(",")]def user(text_prompt: str, chatbot: List[Tuple[str, str]]):return "", chatbot + [[text_prompt, None]]def bot(#google_key: str,image_prompt: Optional[Image.Image],temperature: float,max_output_tokens: int,stop_sequences: str,top_k: int,top_p: float,chatbot: List[Tuple[str, str]]
):text_prompt = chatbot[-1][0]genai.configure(api_key=GOOGLE_API_KEY)generation_config = genai.types.GenerationConfig(temperature=temperature,max_output_tokens=max_output_tokens,stop_sequences=preprocess_stop_sequences(stop_sequences=stop_sequences),top_k=top_k,top_p=top_p)if image_prompt is None:model = genai.GenerativeModel('gemini-pro')response = model.generate_content(text_prompt,stream=True,generation_config=generation_config)response.resolve()else:model = genai.GenerativeModel('gemini-pro-vision')response = model.generate_content([text_prompt, image_prompt],stream=True,generation_config=generation_config)response.resolve()# streaming effectchatbot[-1][1] = ""for chunk in response:for i in range(0, len(chunk.text), 10):section = chunk.text[i:i + 10]chatbot[-1][1] += sectiontime.sleep(0.01)yield chatbotimage_prompt_component = gr.Image(type="pil", label="Image", scale=1)
chatbot_component = gr.Chatbot(label='Gemini',bubble_full_width=False,avatar_images=AVATAR_IMAGES,scale=2
)
text_prompt_component = gr.Textbox(placeholder="你好!",label="请在这里提问···"
)
run_button_component = gr.Button()
temperature_component = gr.Slider(minimum=0,maximum=1.0,value=0.4,step=0.05,label="Temperature",info=("Temperature 控制令牌选择的随机程度 ""较低的Temperature适用于期望获得真实或正确回答的提示, ""而较高的Temperature可以导致更多样化或意外的结果 "))
max_output_tokens_component = gr.Slider(minimum=1,maximum=2048,value=1024,step=1,label="Token limit",info=("Token 限制确定每个提示可以获得的最大文本输出量 ""每个 Token 大约为四个字符,默认值为 2048 "))stop_sequences_component = gr.Textbox(label="Add stop sequence",value="",type="text",placeholder="STOP, END",info=("停止序列是一系列字符(包括空格),如果模型遇到它,会停止生成响应""该序列不作为响应的一部分,""可以添加多达5个停止序列"))
top_k_component = gr.Slider(minimum=1,maximum=40,value=32,step=1,label="Top-K",info=("Top-k 改变了模型为输出选择 token 的方式 ""Top-k 为 1 意味着所选 token 在模型词汇表中所有 token 中是最可能的(也称为贪心解码)""而 top-k 为 3 意味着下一个 token 从最可能的 3 个 token 中选取(使用temperature)"))
top_p_component = gr.Slider(minimum=0,maximum=1,value=1,step=0.01,label="Top-P",info=("Top-p 改变了模型为输出选择 token 的方式 ""token 从最可能到最不可能选择,直到它们的概率之和等于 top-p 值 ""如果 token A、B 和 C 的概率分别为 0.3、0.2 和 0.1,top-p 值为 0.5 ""那么模型将选择 A 或 B 作为下一个 token(使用temperature) "))user_inputs = [text_prompt_component,chatbot_component
]bot_inputs = [image_prompt_component,temperature_component,max_output_tokens_component,stop_sequences_component,top_k_component,top_p_component,chatbot_component
]with gr.Blocks() as demo:gr.HTML(TITLE)gr.HTML(SUBTITLE)with gr.Column():with gr.Row():image_prompt_component.render()chatbot_component.render()text_prompt_component.render()run_button_component.render()with gr.Accordion("Parameters", open=False):temperature_component.render()max_output_tokens_component.render()stop_sequences_component.render()with gr.Accordion("Advanced", open=False):top_k_component.render()top_p_component.render()run_button_component.click(fn=user,inputs=user_inputs,outputs=[text_prompt_component, chatbot_component],queue=False).then(fn=bot, inputs=bot_inputs, outputs=[chatbot_component],)text_prompt_component.submit(fn=user,inputs=user_inputs,outputs=[text_prompt_component, chatbot_component],queue=False).then(fn=bot, inputs=bot_inputs, outputs=[chatbot_component],)demo.queue(max_size=99).launch(auth=("用户名", "密码"),debug=True)

部署到服务器涉及Nginx配置,域名注册、域名解析等等,蛮麻烦的,这里就不展开了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/229365.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于PI控制的PMSM永磁同步电机控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 PMSM数学模型 4.2 矢量控制策略 4.3 PI控制器设计 4.4 控制系统实现 5.完整工程文件 1.课题概述 基于PI控制的PMSM永磁同步电机控制系统simulink建模与仿真。其中&#xff0c;基于PI&#xff08;…

查看ios app运行日志

摘要 本文介绍了一款名为克魔助手的iOS应用日志查看工具&#xff0c;该工具可以方便地查看iPhone设备上应用和系统运行时的实时日志和奔溃日志。同时还提供了奔溃日志分析查看模块&#xff0c;可以对苹果奔溃日志进行符号化、格式化和分析&#xff0c;极大地简化了开发者的调试…

极值和平均值-第11届蓝桥杯选拔赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第22讲。 极值和平均值&…

java设计模式实战【策略模式+观察者模式+命令模式+组合模式,混合模式在支付系统中的应用】

引言 在代码开发的世界里&#xff0c;理论知识的重要性毋庸置疑&#xff0c;但实战经验往往才是知识的真正试金石。正所谓&#xff0c;“读万卷书不如行万里路”&#xff0c;理论的学习需要通过实践来验证和深化。设计模式作为软件开发中的重要理论&#xff0c;其真正的价值在…

【心得】PHP反序列化高级利用(phar|session)个人笔记

目录 ①phar反序列化 ②session反序列化 ①phar反序列化 phar 认为是java的jar包 calc.exe phar能干什么 多个php合并为独立压缩包&#xff0c;不解压就能执行里面的php文件&#xff0c;支持web服务器和命令行 phar协议 phar://xxx.phar $phar->setmetadata($h); m…

计算机视觉与自然语言处理(Open AI)

1.语音识别技术 语音识别是将语音转换为文本的技术&#xff0c; 是自然语言处理的一个分支。通过特征的提取、模式的匹配将语音信号变为文本或命令&#xff0c;以实现机器识别和理解语音。 按照应用场景的不同&#xff0c;可以大致分为三类&#xff1b; • 电信级系统应用&…

动画墙纸:将视频、网页、游戏、模拟器变成windows墙纸——Lively Wallpaper

文章目录 前言下载github地址&#xff1a;网盘 关于VideoWebpagesYoutube和流媒体ShadersGIFs游戏和应用程序& more:Performance:多监视器支持&#xff1a;完结 前言 Lively Wallpaper是一款开源的视频壁纸桌面软件&#xff0c;类似 Wallpaper Engine&#xff0c;兼容 Wal…

echarts手动触发气泡的显示和隐藏

点击echarts图表后将点击的那个进行突出显示 <template><div id"demo"> </div><el-button type"primary" click"set">设置</el-button><el-button type"primary" click"cancel">取消&…

ubuntu20部署Bringing-Old-Photos-Back-to-Life

环境准备&#xff1a; ubuntu20.04 Python 3.8.10 首先将微软的「Bringing-Old-Photos-Back-to-Life」库 clone 到本地&#xff1a; git clone https://github.com/microsoft/Bringing-Old-Photos-Back-to-Life.git cd Face_Enhancement/models/networks/ git clone https:/…

API 开放平台项目(已整理,已废弃)

项目大纲 前端 React 18Ant Design Pro 5.x 脚手架Ant Design & Procomponents 组件库Umi 4 前端框架OpenAPI 前端代码生成 后端 Java Spring BootMySQL 数据库MyBatis-Plus 及 MyBatis X 自动生成API 签名认证&#xff08;Http 调用&#xff09;Spring Boot Starter&#…

Langchain访问OpenAI ChatGPT API Account deactivated的另类方法,访问跳板机API

笔者曾经写过 ChatGPT OpenAI API请求限制 尝试解决 Account deactivated. Please contact us through our help center at help.openai.com if you need assistance. 结果如何&#xff1f; 没有啥用。目前发现一条曲线救国的方案。 1. 在官方 openai 库中使用 此处为最新Op…

Jupyter Notebook的10个常用扩展介绍

Jupyter Notebook&#xff08;前身为IPython Notebook&#xff09;是一种开源的交互式计算和数据可视化的工具&#xff0c;广泛用于数据科学、机器学习、科学研究和教育等领域。它提供了一个基于Web的界面&#xff0c;允许用户创建和共享文档&#xff0c;这些文档包含实时代码、…

『番外篇九』SwiftUI 实战:打造一款“五脏俱全”的网络图片显示 App(上)

概览 俗话说得好:“读书破万卷,下笔如有神”。不过如果把这句话放到编程的学习上可就不那么贴切了。 要想熟练掌握一门编程语言,光看书是绝对不够的。我们还需尽可能的多撸码、早撸码,撸到无路可退、海枯石烂才有可能一窥门径。 在本篇和续篇博文中,我们将和小伙伴们一起…

Linux 内核学习笔记: hlist 的理解

前言 最近阅读 Linux 内核时&#xff0c;遇到了 hlist&#xff0c;这个 hlist 用起来像是普通的链表&#xff0c;但是为何使用 hlist&#xff0c;hlist 是怎么工作的&#xff1f; 相关代码 hlist_add_head(&clk->clks_node, &core->clks); /*** clk_core_link_…

华为鸿蒙运行Hello World

前言&#xff1a; 从11月中旬开始通过B站帝心接触鸿蒙&#xff0c;至今一个半月左右不到&#xff0c;从小白到入坑&#xff0c;再到看官网案例&#xff0c;分析案例&#xff0c;了解技术点&#xff0c;还需要理清思路&#xff0c;再写博客&#xff0c;在决定写 &#xff1c;Har…

DragonEnglish:COCA20000+单词+释义

去年的时候接触到了 COCA20000 单词&#xff0c;对这种给单词特定顺序的方式蛮感兴趣的。因为我当时接触的版本只有单词或者单词释义的版本&#xff0c;所以我直接通过各种方式给它搭配了音标例句发音&#xff0c;然后每100个切割成1份&#xff0c;分成了 202 个文件来学习&…

2023年,腾讯游戏转型成功了吗?

随着游戏行业的发展与我国人口红利的降低&#xff0c;“精品化”的口号越来越多次在行业内响起。 但种种迹象表明&#xff0c;常年位于国内游戏收入榜第一的腾讯&#xff0c;对自身在产品上的能力并不满意。 早在2022年12月15日&#xff0c;腾讯内部员工大会上&#xff0c;马…

连接progressql报错Cannot load JDBC driver class ‘org.postgresql.Driver‘,亲测有效!!!

Jmeter连接progressql报错Cannot load JDBC driver class ‘org.postgresql.Driver’ 1.到官方下载驱动注意&#xff1a;根据项目的JDK版本来下载对应的驱动Download | pgJDBC 2.将postgresql-42.2.27.jar复制到lib目录下面&#xff0c; 然后重新启动 连接driver信息如下&#…

为什么设计制造行业需要数据加密?

设计制造行业是一个涉及多种技术、工艺、材料和产品的广泛领域&#xff0c;它对经济和社会的发展有着重要的影响。然而&#xff0c;随着数字化、智能化和网络化的发展&#xff0c;设计制造行业也面临着越来越多的数据安全风险&#xff0c;如数据泄露、数据篡改、数据窃取等。这…

java maven项目添加oracle jdbc的依赖

一般添加依赖是直接在pom.xml中添加配置即可&#xff0c;Maven会自动获取对应的jar包&#xff0c;但是oracle驱动依赖添加后会显示红色&#xff0c;代表找不到依赖项&#xff0c;是因为Oracle授权问题&#xff0c;Maven3不提供Oracle JDBC driver&#xff0c;为了在Maven项目中…