Google Gemini接口调用(node版)

一、打开Google AI Studio

https://makersuite.google.com/app/apikey

二、在国外服务器上部署一个接口用于真正的请求

const sdAxiosOnAzure = async (req, res) => {
  let {
    config = {
      url: 'https://sinkin.ai/api/inference',
      method: 'post',
      data: {},
      timeout: 30 * 60 * 1000,
    },
    apiKey = '',
  } = req.body

  if (apiKey === 'XXX') {
    if (
      config.headers &&
      config.headers['Content-Type'] &&
      config.headers['Content-Type'].includes('multipart/form-data')
    ) {
      const data = new FormData()
      let tempData = config.data
      for (let key in tempData) {
        data.append(key, tempData[key])
      }
      config.data = data
      config.headers['Content-Type'] =
        'multipart/form-data; boundary=' + data.getBoundary()
    }
    axios({
      ...config,
    })
      .then((response) => {
        res.send({
          code: 200,
          data: {
            response: response.data,
          },
          message: '成功',
        })
      })
      .catch((err) => {
        res.send({
          code: 400,
          data: {
            err,
          },
          message: '失败',
        })
      })
  } else {
    res.send({
      code: 400,
      message: '失败:参数apiKey',
    })
  }
}

三、在postman上发起请求

 

请求:

{
    "config": {
        "url": "https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=xxx",
        "data": {
            "contents": [
                {
                    "role": "user",
                    "parts": [
                        {
                            "text": "北京有多少人?"
                        }
                    ]
                }
            ]
        },
        "method": "post"
    },
    "apiKey": "XXX"
}

响应:

{
    "code": 200,
    "data": {
        "response": {
            "candidates": [
                {
                    "content": {
                        "parts": [
                            {
                                "text": "截至 2023 年 3 月,北京的人口总数约为 2,154 万。然而,这一数字可能因人口流动和其他因素而变化。因此,您最好查阅更接近实时的数据源,例如北京市政府或国家统计局网站,以获取最准确的北京人口信息。"
                            }
                        ],
                        "role": "model"
                    },
                    "finishReason": "STOP",
                    "index": 0,
                    "safetyRatings": [
                        {
                            "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
                            "probability": "NEGLIGIBLE"
                        },
                        {
                            "category": "HARM_CATEGORY_HATE_SPEECH",
                            "probability": "NEGLIGIBLE"
                        },
                        {
                            "category": "HARM_CATEGORY_HARASSMENT",
                            "probability": "NEGLIGIBLE"
                        },
                        {
                            "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
                            "probability": "NEGLIGIBLE"
                        }
                    ]
                }
            ],
            "promptFeedback": {
                "safetyRatings": [
                    {
                        "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
                        "probability": "NEGLIGIBLE"
                    },
                    {
                        "category": "HARM_CATEGORY_HATE_SPEECH",
                        "probability": "NEGLIGIBLE"
                    },
                    {
                        "category": "HARM_CATEGORY_HARASSMENT",
                        "probability": "NEGLIGIBLE"
                    },
                    {
                        "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
                        "probability": "NEGLIGIBLE"
                    }
                ]
            }
        }
    },
    "message": "成功"
}

四、在node里发起请求

const { GoogleGenerativeAI } = require('@google/generative-ai')

const genAI = new GoogleGenerativeAI('你的key')

const chatVertexaiOnAzure = async (req, res) => {
  let { prompt = 'Write a story about a magic backpack.', apiKey = 'sk-xxx' } =
    req.body

  if (apiKey === apiKeyOnServer) {

    const model = genAI.getGenerativeModel({ model: 'gemini-pro' })

    const result = await model.generateContent(prompt)
    const response = await result.response
    const text = response.text()

    res.send({
      code: 200,
      data: {
        text,
      },
      message: '成功',
    })
  } else {
    res.send({
      code: 400,
      message: '失败:参数apiKey',
    })
  }
}

参考链接:

https://chat.xutongbao.top/

posted @ 2024-01-03 17:23  徐同保  阅读(18)  评论(0编辑  收藏  举报  来源