虽然谷歌的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给的建议你是否认可? 😀
- 学习 AI 和机器学习的基础知识。 了解 AI 和机器学习的基础原理和技术,包括机器学习算法、数据预处理、模型评估等。这样可以帮助程序员更好地理解 AI 技术的应用场景和局限性,以及如何将 AI 技术与自己的领域结合起来。
- 掌握编程语言和工具。 AI 领域常用的编程语言包括 Python、R 和 Java 等。此外,还有一些专门用于 AI 开发的工具,例如 TensorFlow、PyTorch 和 scikit-learn 等。掌握这些编程语言和工具,可以帮助程序员快速开发和部署 AI 模型。
- 积累数据分析和建模经验。 AI 模型的性能很大程度上取决于数据的质量和数量。因此,程序员需要积累数据分析和建模经验,以便能够从数据中提取有价值的信息,并构建出准确可靠的 AI 模型。
- 熟悉行业领域知识。 AI 技术在各个行业都有广泛的应用,包括金融、医疗、制造、零售等。程序员需要熟悉自己所在行业的领域知识,以便能够将 AI 技术应用到实际问题中。
- 保持学习和探索。 AI 领域是一个快速发展的领域,新的技术和算法不断涌现。因此,程序员需要保持学习和探索,及时了解最新的技术动态,以便能够掌握最新的 AI 技术,并在自己的工作中应用。
- 与他人合作。 AI 是一个多学科的领域,需要不同专业的人员合作才能完成复杂的任务。因此,程序员需要培养与他人合作的能力,以便能够与其他专业人员一起开发和部署 AI 系统。
安全设置
Gemini模型很注重安全,很多时候感觉都有点过了。虽然它自称可以用safety_settings
来调整设置,但是设了之后也用处不大,还是照样拦截。希望后续这点能调整。毕竟你给幼儿园小朋友做的应用和给成年人的产品,不可能应用同样的拦截规则。