Skip to content
The Second Culture
Go back
调用本地 Gemma 4 提取结构化数据

2026.05.09 更新:

本地调用太吃资源了,改为使用 Google AIStudio 提供的免费结构,通过轮询的方式来薅羊毛。

library(httr2)

# 替换为你的实际 API Key
api_key <- Sys.getenv("GEMINI_API_KEY1") 

# 获取模型列表
models_req <- request("https://generativelanguage.googleapis.com/v1beta/models") |>
    req_headers("x-goog-api-key" = api_key) |>
    req_perform()

models_list <- models_req |> resp_body_json()

# 打印出所有包含 "gemma" 的模型名称
gemma_models <- sapply(models_list$models, function(x) x$name)
print(gemma_models[grepl("gemm|gemini", gemma_models, ignore.case = TRUE)])
#  [1] "models/gemini-2.5-flash"                             
#  [2] "models/gemini-2.5-pro"                               
#  [3] "models/gemini-2.0-flash"                             
#  [4] "models/gemini-2.0-flash-001"                         
#  [5] "models/gemini-2.0-flash-lite-001"                    
#  [6] "models/gemini-2.0-flash-lite"                        
#  [7] "models/gemini-2.5-flash-preview-tts"                 
#  [8] "models/gemini-2.5-pro-preview-tts"                   
#  [9] "models/gemma-4-26b-a4b-it"                           
# [10] "models/gemma-4-31b-it"                               
# [11] "models/gemini-flash-latest"                          
# [12] "models/gemini-flash-lite-latest"                     
# [13] "models/gemini-pro-latest"                            
# [14] "models/gemini-2.5-flash-lite"                        
# [15] "models/gemini-2.5-flash-image"                       
# [16] "models/gemini-3-pro-preview"                         
# [17] "models/gemini-3-flash-preview"                       
# [18] "models/gemini-3.1-pro-preview"                       
# [19] "models/gemini-3.1-pro-preview-customtools"           
# [20] "models/gemini-3.1-flash-lite-preview"                
# [21] "models/gemini-3.1-flash-lite"                        
# [22] "models/gemini-3-pro-image-preview"                   
# [23] "models/gemini-3.1-flash-image-preview"               
# [24] "models/gemini-3.1-flash-tts-preview"                 
# [25] "models/gemini-robotics-er-1.5-preview"               
# [26] "models/gemini-robotics-er-1.6-preview"               
# [27] "models/gemini-2.5-computer-use-preview-10-2025"      
# [28] "models/gemini-embedding-001"                         
# [29] "models/gemini-embedding-2-preview"                   
# [30] "models/gemini-embedding-2"                           
# [31] "models/gemini-2.5-flash-native-audio-latest"         
# [32] "models/gemini-2.5-flash-native-audio-preview-09-2025"
# [33] "models/gemini-2.5-flash-native-audio-preview-12-2025"
# [34] "models/gemini-3.1-flash-live-preview"   

昨天 Google 发布了开源大预言模型 Gemma 4 的系列模型。这次开源协议有所变更,对企业应用更加友好,Google 显然也有其在开源生态上的目的。 但对普通开发者来说,最直观的利好是本地部署的门槛进一步降低了。

以我手头的 Mac M4 16G 版本为例,本地直接跑 e4b(40 亿参数)尺寸的小模型毫无压力,日常用它来执行一些简单的 NLP 任务刚好够用。

在终端通过 Ollama 启动服务之后,我们可以直接在 R 中进行调用。 不需要安装复杂的深度学习环境,只用原生的 httr2 包就能完成请求,并让模型输出规范的 JSON 数据。

library(httr2)
ask_gemma_json <- function(prompt) {
  req <- request("http://localhost:11434/api/generate") |>
    req_body_json(list(
      model = "gemma4:e4b", 
      prompt = prompt,
      stream = FALSE,
      format = "json", # 强迫症福音:只允许输出合法的 JSON 格式
      options = list(temperature = 0.0)
    ))
  
  resp <- req_perform(req)
  
  # 因为返回的是标准 JSON 字符串,我们可以直接用 jsonlite 把它变成 R 的 List
  json_str <- resp_body_json(resp)$response
  jsonlite::fromJSON(json_str)
}

# 测试结构化提取
prompt_json <- "提取这句话中的公司名和情感得分(1-10分),并严格以JSON格式输出,键名为 company 和 score。句子:苹果公司本季度营收大涨,超出华尔街预期。"

structured_data <- ask_gemma_json(prompt_json)
# > structured_data
# $company
# [1] "苹果公司"
#
# $score
# [1] 8

在上面的 API 调用中,能够实现快速响应,主要归功于以下两点参数控制:


Share this post on:

Previous Post
写在 AI 浪潮降温的前夜
Next Post
拒绝流水线,做驱动商业价值的“AI 统计学家”