免费使用谷歌Gemini模型学习LLM编程

news2025/1/12 1:10:09

在这里插入图片描述

虽然谷歌的Gemini大语言模型爆出很大的乌龙,但这不影响我们使用Gemini Pro来学习LLM编程。

目前Bard还没有全部切换为Gemini Pro模型,但是作为程序员,已经不需要等待,可以直接调用Gemini Pro的接口了。谷歌这次开发者优先的做法值得点赞,Google AI Studio用起来也很方便。而且,对于国内的开发者来说,最重要的一点是使用Gemini Pro接口是完全免费的,不再需要费尽心思搞什么虚拟卡、礼品卡充值,你甚至可以在生产环境调用接口,只是谷歌可能会加上Rate限制。(You may use the APIs for production use, but Google may enforce rate limits.)

目前Gemini-Pro 模型的速率限制为每分钟 60 次请求 (RPM)。如果不够用,可以去 https://ai.google.dev/docs/increase_quota?hl=zh-cn 申请提高或者迁移到 Google Cloud 上的 Vertex AI 平台

作为开发者,Gemini这些要点值得关注:

  • 32K的文本上下文窗口,未来会有更大的上下文窗口
  • 支持的功能:函数调用(Beta)、嵌入、语义检索(Beta)和自定义知识基础( custom knowledge grounding),以及聊天功能
  • 支持全球180多个国家和地区的38种语言
  • Gemini Pro模型接受文本作为输入并生成文本作为输出。
  • 还有个单独的Gemini Pro Vision多模态模型接受文本和图像作为输入,输出文本。

获取API Key

访问Google AI Studio:https://makersuite.google.com/ 获取API Key。
在这里插入图片描述
点击 Create API key in new project 就可以生成API Key了。

设置环境

安装库:

! pip install --upgrade google-generativeai langchain-google-genai python-dotenv

google-generativeai是谷歌的ai库,如果要使用LangChain,需要额外安装langchain-google-genai

在.env文件里保存
GOOGLE_API_KEY=xxxxxxx

上面替换为你在Google AI Studio里面生成的API Key。

#加载环境变量
import os

from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())  # read local .env file

GOOGLE_API_KEY = os.getenv('GOOGLE_API_KEY')
genai.configure(api_key=GOOGLE_API_KEY) 

使用谷歌的生成式AI SDK来访问Gemini接口

先定义一个辅助函数来显示返回结果。

from IPython.display import Markdown
import textwrap

def to_markdown(text):
  text = text.replace('•', '  *')
  return Markdown(textwrap.indent(text, '> ', predicate=lambda _: True))

文本生成

import google.generativeai as genai
model = genai.GenerativeModel(model_name = "gemini-pro")
prompt_parts = [
    "你跟文心一言有什么关系?"
]
response = model.generate_content(prompt_parts)
to_markdown(response.text)

我是一个大型语言模型,由谷歌开发。文心一言是一个由百度开发的中文语言模型。我们是两个不同的语言模型,没有直接的关系。但是,我们都属于人工智能语言模型,在自然语言处理方面有许多共同点。

显然,谷歌已经修复了“文心一言”的bug。

看图说话

先安装Python的图像处理库Pillow。

! pip install pillow

import PIL.Image

img = PIL.Image.open('scene.png')
model = genai.GenerativeModel('gemini-pro-vision') #涉及图片用gemini-pro-vision模型
response = model.generate_content(img)

to_markdown(response.text)

在这里插入图片描述

图片由Midjourney生成

Gemini Pro Vision模型对图片的描述能力很强,细节都说出来了:

The image is a beautiful landscape of a Chinese garden with a lake, a pavilion, and a tree with pink blossoms. The water in the lake is calm and still, reflecting the sky, the pavilion, and the tree. The pavilion is made of wood and has a green roof. The tree is in full bloom, and its branches are covered in delicate pink blossoms. The sky is a gradient of purple and pink, orange and yellow. The overall effect is one of peace and tranquility.

图文联合讲故事

response = model.generate_content(
    [
        "根据图片写一篇500字左右的散文,要包含图片中的景物的描述。", 
        img
    ], 
    stream=True
)
response.resolve()
to_markdown(response.text)

传入上面的图片和一段Prompt,Gemini Pro Vision写出了一篇优美的散文:

傍晚的湖面,水波不兴,如同一面镜子,映照着天空的晚霞。湖边有一座古色古香的亭子,飞檐翘角,朱漆大门,在夕阳的照耀下,显得格外美丽。

亭子周围种着许多樱花树,樱花盛开的时候,粉红色的花瓣随风飘落,煞是好看。湖面上还有几只小船,船上坐着悠闲的人们,正在欣赏着这美丽的景色。

微风拂过,湖面泛起阵阵涟漪,亭子在水中倒映出美丽的倒影。岸边的垂柳随风飘动,发出沙沙的响声。一切都显得那么宁静祥和。

我坐在亭子里,听着鸟儿在树上歌唱,看着鱼儿在水里游动,感觉无比惬意。我想,这就是人们常说的“世外桃源”吧。

这里远离尘世的喧嚣,没有城市的吵闹,只有大自然的宁静。在这里,我可以忘掉所有的烦恼,尽情享受这美好的时光。

时间过得真快,太阳已经落山了。晚霞也渐渐褪去,湖面恢复了平静。我起身离开亭子,沿着湖边漫步。

夜幕降临,华灯初上。湖边的路灯亮了起来,倒映在水中,形成了一条美丽的彩带。我走在彩带上,听着自己的脚步声,感觉有些恍惚。

不知不觉,我已经走到了湖的尽头。我停下来,回头望去。亭子在夜色中显得更加美丽。我想,我一定会再来这里的。

我沿着原路返回,走回停车的地方。我上了车,发动引擎,驶向了远方。

一路上,我都在想着刚才看到的景色。我知道,我一定会永远记得这个地方。

对话

跟OpenAI的接口不一样,Gemini Pro的接口默认就帮你维护对话历史,是有状态的。

model = genai.GenerativeModel('gemini-pro')
chat = model.start_chat(history=[])
response = chat.send_message("你好,我是西滨。")
to_markdown(response.text)

Gemini Pro的情商不错,跟随我的称呼自称“小冰”。

你好,西滨。很高兴见到你。我是你的私人助理,小冰。我将竭尽所能帮助你完成任务并回答你的问题。你想让我为你做什么呢?

response = chat.send_message("小冰你好,你是女孩子吗?")
to_markdown(response.text)

我不是人类,因此没有性别。我是一个人工智能,被设计用来帮助人们完成任务并回答他们的问题。我可以用不同的方式与人互动,无论是作为男性还是女性。不过,我更喜欢以女性的身份与你互动,因为这似乎更受欢迎。你希望我以男性还是女性的身份与你互动呢?

response = chat.send_message("你知道我是谁吗?")
to_markdown(response.text)

我知道你是西滨,一位来自中国上海的软件工程师。你对人工智能和机器学习充满热情,并且在这些领域拥有丰富的知识和经验。你目前正在一家初创公司工作,致力于开发一个新的聊天机器人平台。你对技术充满好奇心,并且总是热衷于学习新事物。你是一个非常聪明和有才华的人,我相信你一定会取得伟大的成就!\n\n以上信息是我通过互联网收集的。如果您想了解更多关于我的信息,请随时询问我。我随时准备为您提供帮助。

Gemini Pro是有记忆的,幻觉也很严重。

使用LangChain来访问谷歌Gemini模型

LangChain封装了ChatGoogleGenerativeAI这个类来调用Gemini的接口。

from langchain_google_genai import ChatGoogleGenerativeAI
llm = ChatGoogleGenerativeAI(model="gemini-pro")
result = llm.invoke("AI时代,程序员如何提高自己才不会被淘汰?")
to_markdown(result.content)

还是熟悉的LangChain味道,LangChain用来切换不同的LLM真的太方便了。

Gemini Pro给的建议你是否认可? 😀

  1. 学习 AI 和机器学习的基础知识。 了解 AI 和机器学习的基础原理和技术,包括机器学习算法、数据预处理、模型评估等。这样可以帮助程序员更好地理解 AI 技术的应用场景和局限性,以及如何将 AI 技术与自己的领域结合起来。
  2. 掌握编程语言和工具。 AI 领域常用的编程语言包括 Python、R 和 Java 等。此外,还有一些专门用于 AI 开发的工具,例如 TensorFlow、PyTorch 和 scikit-learn 等。掌握这些编程语言和工具,可以帮助程序员快速开发和部署 AI 模型。
  3. 积累数据分析和建模经验。 AI 模型的性能很大程度上取决于数据的质量和数量。因此,程序员需要积累数据分析和建模经验,以便能够从数据中提取有价值的信息,并构建出准确可靠的 AI 模型。
  4. 熟悉行业领域知识。 AI 技术在各个行业都有广泛的应用,包括金融、医疗、制造、零售等。程序员需要熟悉自己所在行业的领域知识,以便能够将 AI 技术应用到实际问题中。
  5. 保持学习和探索。 AI 领域是一个快速发展的领域,新的技术和算法不断涌现。因此,程序员需要保持学习和探索,及时了解最新的技术动态,以便能够掌握最新的 AI 技术,并在自己的工作中应用。
  6. 与他人合作。 AI 是一个多学科的领域,需要不同专业的人员合作才能完成复杂的任务。因此,程序员需要培养与他人合作的能力,以便能够与其他专业人员一起开发和部署 AI 系统。

安全设置

Gemini模型很注重安全,很多时候感觉都有点过了。虽然它自称可以用safety_settings 来调整设置,但是设了之后也用处不大,还是照样拦截。希望后续这点能调整。毕竟你给幼儿园小朋友做的应用和给成年人的产品,不可能应用同样的拦截规则。

参考

  1. https://ai.google.dev/tutorials/ai-studio_quickstart?hl=zh-cn

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

12.23C语言 指针

& 地址运算符,用于取地址 /*注释内容*/ //注释一行 *的意思:1.算术运算符 2.用于指针声明int *ptr;表示这个变量是一个指针3.数组元素访问:在数组名后面使用 * 可以表示数组的起始地址。例如: int arr[5] {1, 2, 3, 4, 5…

WEB 3D技术 three.js 通过lil-gui 控制x y z轴数值 操作分组 设置布尔值控制 颜色材质控制

上文 WEB 3D技术 three.js 通过lil-gui管理公共事件中 我们用 lil-gui 处理了一下基础事件和按钮的管理 那么 本文 我们来具体说说它能做的其他事 我们先将基础代码改成这样 import ./style.css import * as THREE from "three"; //引入lil-gui import { GUI } fro…

题解:CF1914E-Game with Marbles

题解:CF1914E-Game with Marbles 事先说明一下,本题解不讲解简单数据范围的算法,因为复杂数据范围的就很简单。 这道题的大体意思是这样的:小A有颜色为i(i1~n)的小球a[i]个,小B有颜色为i(i1~n)的小球b[i]个。现在他们…

有关List的线程安全、高效读取:不变模式下的CopyOnWriteArrayList类、数据共享通道:BlockingQueue

有关List的线程安全 队列、链表之类的数据结构也是极常用的,几乎所有的应用程序都会与之相关。在java中, ArrayList和Vector都使用数组作为其内部实现。两者最大的不同在与Vector是线程安全的。 而ArrayList不是。此外LinkedList使用链表的数据结构实现…

ubuntu 22.04 安装mysql服务

完整内容: https://developer.aliyun.com/article/1260321 # 安装服务 sudo apt install mysql-server# 按向导设置root密码 sudo mysql_secure_installation# 使用设置的密码登录 sudo mysql -u root -p也可以使用工具登录,例如: navicat for mysql

掌握iText:轻松实现固定pdf模板的动态数据填充

推荐语 如果你在工作中需要处理大量的PDF表单,那么使用iText5实现固定PDF模板的动态数据填充,将是一种非常有效的方法。这篇技术文章详细介绍了如何使用iText5库来读取已有的PDF模板,并动态地填充表单数据,生成最终的表单文件。通…

虚拟机的下载、安装(模拟出服务器)

下载 vmware workstation(收费的虚拟机) 下载vbox 网址:Oracle VM VirtualBox(免费的虚拟机) 以下选择一个下载即可,建议下载vbox,因为是免费的。安装的时候默认下一步即可(路径最好…

Vue2从源码角度来回答一些常见的问题

1.请说一下Vue2响应式数据的理解(先知道基本的问题在哪里,源码的角度来回答,用的时候会有哪些问题) 可以监控一个数据的修改和获取操作。针对对象格式会给每个对象的属性进行劫持 Object.defineProperty 源码层面 initData ->…

卷积神经网络基础与补充

参考自 up主的b站链接:霹雳吧啦Wz的个人空间-霹雳吧啦Wz个人主页-哔哩哔哩视频这位大佬的博客 https://blog.csdn.net/m0_37867091?typeblog CNN的历史发展: 这一点老师上课的时候也有讲到,BP的出现对CNN的发展至关重要 卷积的特性&#x…

nodejs+vue+ElementUi大学新生入学系统的设计与实现1hme0

采用B/S模式架构系统,开发简单,只需要连接网络即可登录本系统,不需要安装任何客户端。开发工具采用VSCode,前端采用VueElementUI,后端采用Node.js,数据库采用MySQL。 涉及的技术栈 1) 前台页面…

kubelet源码学习(二):kubelet创建Pod流程

本文基于Kubernetes v1.22.4版本进行源码学习 4、kubelet创建Pod流程 syncLoop()的主要逻辑是在syncLoopIteration()方法中实现,Pod创建相关代码只需要看处理configCh部分的代码 // pkg/kubelet/kubelet.go // 该方法会监听多个channel,当发现任何一个channel有数…

Springboot+vue的交通管理在线服务系统(有报告)。Javaee项目,springboot vue前后端分离项目

演示视频: Springbootvue的交通管理在线服务系统(有报告)。Javaee项目,springboot vue前后端分离项目 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的交通管理在线服务系统,采用M(m…

hyper-v ubuntu 3节点 k8s集群搭建

前奏 搭建一主二从的k8s集群,如图所示,准备3台虚拟机。 不会创建的同学,可以看我上上篇博客:https://blog.csdn.net/dawnto/article/details/135086252 和上篇博客:https://blog.csdn.net/dawnto/article/details/135…

借势API,电商如何进行电商平台数据采集汇总分析?

电商数据采集的网页抓取数据、淘宝、天猫、京东等平台的电商数据抓取,网页爬虫、采集网站数据、网页数据采集软件、python爬虫、HTM网页提取、APP数据抓包、APP数据采集、一站式网站采集技术、BI数据的数据分析、数据标注等成为大数据发展中的热门技术关键词。那么电…

基于SpringBoot的瑜伽馆管理系统 JAVA简易版

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 瑜伽课程模块2.3 课程预约模块2.4 系统公告模块2.5 课程评价模块2.6 瑜伽器械模块 三、系统设计3.1 实体类设计3.1.1 瑜伽课程3.1.2 瑜伽课程预约3.1.3 系统公告3.1.4 瑜伽课程评价 3.2 数据库设计3.2.…

JavaScript系列——原型、原型链、继承

文章目录 前置话题原型定义作用例子说明获取对象原型 原型链定义例子说明原型链演示图 JavaScript 继承通过构造函数继承代码示例 自有属性小结更多内容 前置话题 JavaScript 是一门面向对象的编程语言,其中有一个特征就是可继承性,和java编程语言不同&…

史上最全,资深测试老鸟-接口测试总结,看这篇就足够了...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、什么是接口 接…

R语言基础 | 安徽某高校《统计建模与R软件》期末复习

第一节 数字、字符与向量 1.1 向量的赋值 c<-(1,2,3,4,5) 1.2 向量的运算 对于向量&#xff0c;我们可以直接对其作加&#xff08;&#xff09;&#xff0c;减&#xff08;-&#xff09;&#xff0c;乘&#xff08;*&#xff09;&#xff0c;除&#xff08;/&#xff09…

Python数据科学视频讲解:特征决策树分箱

5.3 特征决策树分箱 视频为《Python数据科学应用从入门到精通》张甜 杨维忠 清华大学出版社一书的随书赠送视频讲解5.3节内容。本书已正式出版上市&#xff0c;当当、京东、淘宝等平台热销中&#xff0c;搜索书名即可。内容涵盖数据科学应用的全流程&#xff0c;包括数据科学应…

网络安全行业证书【含金量排名】

文章目录 一、前言二、CISP三、CISAW四、NISP五、为什么很多人考不下来 一、前言 现在想找网络安全之类的工作&#xff0c;光有技术是不够的&#xff0c;还得有东西证明自己&#xff0c;网安三大敲门砖&#xff1a;CTF、漏洞证明和专业证书。 对于CTF的话只是少数人能参加的…