用 Gemini API 做 JSON 文本摘要,把长文变成结构化数据:3 步跑通
【免费下载链接】cookbookExamples and guides for using the Gemini API项目地址: https://gitcode.com/GitHub_Trending/coo/cookbook
拿到一大段文字,你只想把里面的角色、地点和主线剧情抓出来。这篇教程用 Gemini API 的 JSON 文本摘要能力,让模型直接把要点按结构化 JSON 吐出来,完整代码在 cookbook 项目的 examples 目录里。
你大概试过"偷懒版":直接让模型"输出 JSON"。结果有时包着 markdown 代码块,有时结尾多一句话,脚本一解析就报错。这里的做法不一样:先给模型一份结构定义,再让它照着结构填值,输出稳定、解析省心。
cookbook 一句话定位:Gemini API 的官方示例与教程库,从入门到进阶都有覆盖。这篇文章只挑其中最实用的"文本摘要"一个例子,陪你完整跑一遍,边看边能动手。
装好依赖、配好密钥,五分钟搞定准备
依赖只有一个,一条命令装完:
pip install -U -q "google-genai>=2.9.0"然后去 Gemini 平台申请一个 API 密钥,放进环境变量 GEMINI_API_KEY(在 Colab 里存成 Secret)。密钥怎么创建,仓库里的 quickstarts/Authentication.ipynb 有完整演示,这里不展开。
本地跑的话,拿到密钥后先初始化客户端:client = genai.Client(api_key=GEMINI_API_KEY)。Colab 里换成userdata.get('GEMINI_API_KEY')读取即可,后面示例都默认 client 已就绪。
🛠️ 三步发起调用:先定格式,再让它填值
下面的代码都来自仓库 json_capabilities 目录下的 Text_Summarization.ipynb 笔记本。我只贴关键几行,其余样板你可以对着原文件补全。
第一步:先说清楚要回什么格式
模型默认放飞自由文本,要拿到稳定格式就得先写结构。我们用 TypedDict 定义(就是告诉 Python"这个字典有哪些键、每个键是什么类型"):
from typing_extensions import TypedDict class Character(TypedDict): name: str description: str alignment: str class Location(TypedDict): name: str description: str外层再包一个 TextSummary,共四个字段:synopsis(一段话剧情摘要)、genres(类型列表)、locations(地点列表)、characters(角色列表)。角色和地点就分别用上面两个小结构装。
第二步:发起调用,用两行配置锁住输出
response = client.models.generate_content( model="gemini-3.7-flash", contents=prompt, # 完整故事文本 config={ "response_mime_type": "application/json", "response_schema": TextSummary, } )config 里就两行是关键:response_mime_type 声明用 JSON 返回;response_schema 把你刚定义的 TextSummary 交给模型,它会照着字段名逐项填值,不多给、不少给。
第三步:拿到手就是现成的字典
不用再写解析逻辑。response.parsed直接就是 Python 字典,笔记本里用pprint(response.parsed)把它打出来看一眼。
👀 看效果:故事变成了字典
实际输出截一段(英文原文已译成中文,仅展示关键部分):
{ "synopsis": "Elara 循着古图前往失落的 Eldoria 城,途中遭遇石影守护者,最终选择让它继续沉睡……(节选)", "genres": ["Fantasy", "Adventure"], "characters": [{"name": "Elara", "alignment": "Good", "description": "寻找失落之城 Eldoria 的制图师兼冒险者。"}], "locations": [{"name": "Dragon's Tooth Mountains", "description": "高峰嶙峋、藏有隐秘通道的险峻山脉。"}] }好在哪?字段名是稳定的:角色就是 characters,地点就是 locations。你直接写代码入库、喂给下游任务就行,不用再猜文字落在哪个位置。
换个场景:套路完全一样
故事只是入门。同一套"定结构 → 传 response_schema"的玩法,换成新闻可以抽事件要素(谁、何时、何地、影响),换研究报告可以抽结论、关键数据与置信度,换商品描述可以抽规格、卖点和适用人群——把 TypedDict 里的字段换掉,调用一行不用动。
仓库的 examples/json_capabilities/ 目录里还有现成的同类示例可以照着改:实体抽取、情感分析、文本分类,每个都是同一个思路的变体。
🚪 入口在这
- 完整代码:examples/json_capabilities/Text_Summarization.ipynb
- 更多 JSON 任务示例:examples/json_capabilities/
想本地跑起来,把仓库整个克隆下来:
git clone https://gitcode.com/GitHub_Trending/coo/cookbook
【免费下载链接】cookbookExamples and guides for using the Gemini API项目地址: https://gitcode.com/GitHub_Trending/coo/cookbook
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考