https://github.com/philschmid/gemini-samples
我将为各位同学深度解析一个宝藏级的官方开源项目——gemini-samples。它就像一本为 Gemini 开发者量身打造的“武功秘籍”,包含了从入门到精通的各种即用型代码示例和权威指南。本文将作为你的专属向导,带你把这个项目从头到尾、由浅入深地“吃透”。我们将不仅告诉你“怎么做”,更会解释“为什么这么做”,为你构建一个完整而坚实的 Gemini 技术知识体系。在这场深度探索之旅中,你将收获:
在深入探索 Gemini 的魔法之前,我们需要先熟悉我们的“藏宝图”——gemini-samples 项目,并搭建好我们的“炼金实验室”。
gemini-samples 是一个官方维护的 GitHub 代码仓库,它远不止是一个简单的示例集合,更是一个动态更新、紧跟技术前沿的实践知识库。GitHub 链接:gemini-samples
让我们先快速浏览一下它的项目结构,做到心中有数:
这个项目的主要特点是:
“工欲善其事,必先利其器”。一个稳定、配置正确的开发环境是成功的开端。
第一步:安装必要的 Python “魔药”
你需要安装 Google 的官方 SDK 以及一些辅助库。强烈建议使用虚拟环境(如 venv 或 conda)来管理项目依赖,避免版本冲突。
# 创建并激活虚拟环境 (推荐)
python -m venv gemini-env
source gemini-env/bin/activate # a Mac/Linux
# gemini-env\Scripts\activate # a Windows
# 安装核心库和常用依赖
pip install google-generativeai pillow
# 安装其他示例中可能用到的生态库
# langchain/*: 强大的LLM应用开发框架
# crewai: 用于创建多智能体协作系统
# pydantic: 用于数据校验和结构化输出
pip install "langchain-google-genai" langchain crewai pydantic youtube-transcript-api
第二步:获取你的专属“通行证”——API 密钥
要与 Gemini 的云端大脑进行通信,你需要一个专属的 API 密钥。访问 Google AI for Developers,登录你的谷歌账户,点击 “Create API key” 按钮,生成你的密钥。
安全警示:这个密钥是你账户的凭证,绝对不要直接写在代码里或上传到 GitHub 等公共平台!
第三步:配置你的开发环境
最安全、最推荐的做法是使用环境变量来管理你的 API 密钥。
import os
import google.generativeai as genai
from google.colab import userdata # 如果在 Google Colab 中
# 优先从 Colab 的 Secrets 中读取,这是在 Colab 中的最佳实践
# 或者从系统环境变量中读取
# 你可以在终端中设置: export GOOGLE_API_KEY="YOUR_API_KEY"
api_key = userdata.get('GOOGLE_API_KEY', os.environ.get("GOOGLE_API_KEY"))
genai.configure(api_key=api_key)
当这三步完成后,你的“炼金实验室”就正式宣告竣工。现在,让我们开始施展真正的魔法吧!🔬
gemini-samples 项目通过 examples 和 guides 文件夹,为我们系统地揭示了 Gemini 的三大核心能力支柱。
这可能是 Gemini 最具革命性的功能之一。它彻底改变了 LLM 只能“说”不能“做”的局面。
核心理念剖析:想象一下,AI 是一个超级聪明的大脑,但它被关在一个玻璃盒子里,无法与外界互动。函数调用就是为这个大脑接上了可以控制外部世界的“手”和“脚”。当大脑(模型)判断需要执行某个现实世界的操作时(比如查天气、发邮件、查询数据库),它不会自己去执行,而是会生成一个标准化的“指令”(一个包含函数名和参数的 JSON 对象),请求外部的“手脚”(你的代码)来执行。你的代码执行完后,再把结果告诉大脑,大脑再用自然语言告诉你最终答案。
关键示例解读:
get_stock_price
函数,并对结果进行比较。代码片段深度赏析 (简化版):
# 1. 定义你的“工具箱”,里面是具体的函数
def get_stock_price(symbol: str) -> float:
"""获取指定股票的当前价格。"""
# 在真实应用中,这里会调用真实的股票API
print(f"---正在调用工具:查询股票 {symbol} 的价格---")
if "GOOG" in symbol.upper():
return 175.57
elif "NVDA" in symbol.upper():
return 120.88
else:
return 100.0
# 2. 创建模型实例,并“装备”上你的工具箱
model = genai.GenerativeModel(
model_name="gemini-1.5-pro-latest",
tools=[get_stock_price] # 将函数本身作为工具传递
)
chat = model.start_chat(enable_automatic_function_calling=True) # 开启自动函数调用
# 3. 像正常聊天一样提出你的需求
response = chat.send_message("谷歌现在的股价是多少?")
# 因为开启了 enable_automatic_function_calling=True
# SDK 会自动处理函数调用和结果返回的中间步骤
# 你可以直接得到最终的自然语言回答
# 6. 模型生成最终回答
print(response.text) # 输出: 谷歌的当前股价是 175.57 美元。
Gemini 从设计之初就是多模态的,这意味着它理解世界的方式和人类更接近——通过融合多种感官信息。
核心理念剖析:传统的 AI 模型往往是“偏科生”,有的擅长文本,有的擅长图像。而 Gemini 是一个“全科状元”,它能将文本、图片、音频、视频等不同模态的信息,在同一个“思维空间”里进行统一的理解和推理。你可以扔给它一张复杂的图表照片和一句“分析一下这张图的趋势”,它能像人类分析师一样看懂图表并给出结论。
关键示例解读:
代码片段深度赏析 (图片理解):
import PIL.Image
import requests
from io import BytesIO
# 加载一张网络图片
url = "https://storage.googleapis.com/generativeai-downloads/images/cats_and_dogs.jpg"
response = requests.get(url)
img = PIL.Image.open(BytesIO(response.content))
# 选择一个具备视觉理解能力的模型 (Gemini Pro Vision 或更高版本)
model = genai.GenerativeModel("gemini-1.5-pro-latest")
# 将图片和你的问题,像聊天内容一样打包发送给模型
prompt = [
"请你扮演一位专业的宠物摄影评论家。",
"详细描述一下这张图片里的场景、动物的情绪以及构图的优缺点。",
img # 直接将图片对象传入
]
response = model.generate_content(prompt)
print(response.text) # 输出示例:这是一张充满温馨感的宠物摄影作品...
如果说函数调用是给 AI 提供了“手脚”,那么多模态是给 AI 提供了“眼睛”和“耳朵”,而智能体模式,则是教会 AI 如何自主地使用这些感官和工具去完成一个复杂的目标。
核心理念剖析:一个“智能体” (Agent) 不再是一个被动等待指令的工具,而是一个主动的“工作者”。你给它一个宏观的目标(比如“帮我规划一次为期三天的北京旅游”),它会自己思考、规划、并执行一系列子任务:
search_weather(city='北京')
、search_attractions(city='北京')
等工具。这个“思考-行动-观察-再思考”的循环,就是智能体的核心工作模式,也常被称为 ReAct (Reason + Act) 框架。
关键示例解读:
掌握了核心能力后,gemini-samples 还为我们准备了一些能让应用“降本增效”的高阶技巧。
核心痛点:当你的应用需要反复查询一份非常长的文档(比如一本几百页的PDF、一个复杂的代码库)时,如果每次请求都把整个文档上传一遍,会产生高昂的费用和不必要的网络延迟。
解决方案:上下文缓存就像是为模型针对特定长文档创建了一个“专属短期记忆”。你先把整个文档发送一次进行“缓存”,并得到一个轻量的“记忆句柄”。之后的所有相关提问,你只需要发送这个句柄和你的新问题即可,模型会直接从它的“专属记忆”中查找答案,速度极快且成本极低。
相关示例:examples/gemini-context-caching.ipynb
核心痛点:很多时候,我们希望模型返回的是严格格式化的数据(如 JSON),以便程序直接使用。单纯依靠提示词“请返回 JSON 格式”并不可靠,模型偶尔还是会“自由发挥”,导致程序解析失败。
解决方案:Gemini API 允许你直接提供一个 JSON Schema 来定义你想要的输出结构。这就像是给模型一个“填空题模板”,模型会严格按照你定义的字段、类型和层级来生成结果,保证了输出的稳定性和可靠性。
相关示例:examples/gemini-structured-outputs.ipynb、examples/gemini-meta-prompt-structured-outputs.ipynb
核心痛点:语言模型本质上不擅长精确的数学计算和复杂的数据操作。你问它“1234 * 5678”,它可能会算错。
解决方案:代码执行器工具赋予了模型一个内置的、沙箱化的 Python 执行环境。当模型识别到需要计算或数据分析的任务时,它会自动编写一小段 Python 代码,在这个沙箱里执行,然后将代码的运行结果作为它回答的依据。这让 Gemini 在数据分析、金融计算等领域的应用能力产生了质的飞跃。
相关示例:examples/gemini-code-executor-data-analysis.ipynb
一个伟大的技术平台必然拥有一个繁荣的生态。gemini-samples 也为我们展示了如何将 Gemini 与其他流行的 AI 框架和工具进行无缝集成。
LangChain & LangGraph: 作为目前最火的 LLM 应用开发框架,LangChain 为构建复杂的AI应用提供了强大的抽象和组件。
CrewAI: 专注于多智能体协作的框架,让创建和编排一个“AI员工团队”变得轻而易举。
JavaScript & Node.js: javascript-examples/ 文件夹下的示例证明了 Gemini 的能力并不局限于 Python,你完全可以在你的 Node.js 后端服务中集成 Gemini。
实用脚本宝库: scripts/ 文件夹是座被低估的金矿。里面有 gemini-image-meta.py
(分析图片并提取 EXIF 元数据)、veo3-generate-viral-vlogs.py
(利用 Veo 模型生成病毒式视频博客脚本) 等可以直接改造用于生产的精彩脚本。
gemini-samples 项目如同一位博学而耐心的导师,通过其系统化、实践性的内容,为我们铺就了一条从入门到精通的康庄大道。知识的吸收终究需要通过实践来内化。这篇文章为你绘制了详细的地图,但真正的宝藏需要你亲自去发掘。现在,就打开 gemini-samples 的 GitHub 页面,选择一个你最感兴趣的 Notebook,亲手运行它、调试它、修改它,甚至将两三个示例组合起来,创造一个全新的应用!
比如,你可以尝试:
AI 的未来充满了无限可能,而这未来,正由像你一样的开发者们,一行行代码地构建出来。你的 AI 创世之旅,就从这里开始。