转发: Using Google Gemini Pro with PICO
项目介绍
最近,LLM 语言模型在各地涌现,我们使用 Google 最近发布的 Gemini Pro 创建了一个示例。 我使用了Wiznet Scarlet的OpenAI作为如何在pico中使用它的参考。 目前,Gemini Pro 的 API 调用是免费的。 利用这个机会构建您自己的简单应用程序。
参考
目前,Gemini Pro 每分钟最多可免费拨打 60 个电话。 API 定价如上。 考虑到性能与 GPT-3.5-turbo 类似,考虑到价格和目前免费的事实,使用 Gemini 不是更好吗?
1.下载Thonny缩微胶片环境。
Thonny, Python IDE for beginners
2.下载固件
MicroPython - Python for microcontrollers
3. Google Gemini API 密钥设置
https://makersuite.google.com/
登录您的 Google 帐户并转到上面的 Google AI Studio 站点,单击“开发人员获取 API 密钥”下的“新项目”以获取新的 API 密钥。
# Quickly test the API by running a cURL command
curl \
-H 'Content-Type: application/json' \
-d '{"contents":[{"parts":[{"text":"Write a story about a magic backpack"}]}]}' \
-X POST https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=YOUR_API_KEY
与 GPT 不同,端点地址包含 api_key,因此您需要相应地调整现有的 OpenAI 代码。
由于响应的形式与GPT不同,因此需要参考文档设置索引代码来单独获取文本。
连接 W5xx-EVB-Pico 的以太网端口和 micro5 针 USB(PC、笔记本电脑)。
将下载的固件上传到“启动模式”,然后断开并重新连接 USB。
工具 -> 解释器
连接后,将解释器设置为“Micro Python (Raspberry PI pico)”,端口设置为之前连接到设备管理器的端口。
https://github.com/jh941213/Gemini_rp2040
!git clone https://github.com/jh941213/Gemini_rp2040.git #download
运行send.py,代码就会运行。
import json
import urequests
gemini_api_key = "your_api_key"
gemini_url = f"https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key={gemini_api_key}"
def send_prompt_to_gemini(prompt):
headers = {"Content-Type": "application/json"}
data = {
"contents": [{
"parts": [{"text": prompt}]
}]
}
response = urequests.post(gemini_url, headers=headers, data=json.dumps(data))
if response.status_code == 200:
response_data = json.loads(response.text)
return response_data["candidates"][0]["content"]["parts"][0]["text"]
else:
raise Exception(f"API error ({response.status_code}): {response.text}")
from machine import Pin, SPI
import network
import utime
import gemini
#init Ethernet code
def init_ethernet(timeout=10):
spi = SPI(0, 2_000_000, mosi=Pin(19), miso=Pin(16), sck=Pin(18))
nic = network.WIZNET5K(spi, Pin(17), Pin(20)) # spi, cs, reset pin
# DHCP
nic.active(True)
start_time = utime.ticks_ms()
while not nic.isconnected():
utime.sleep(1)
if utime.ticks_ms() - start_time > timeout * 1000:
raise Exception("Ethernet connection timed out.")
print('Connecting ethernet...')
print(f'Ethernet connected. IP: {nic.ifconfig()}')
def main():
init_ethernet()
while True:
prompt = input("User: ")
if prompt.lower() == "exit":
print("Exiting...")
break
try:
response = gemini.send_prompt_to_gemini(prompt)
print("Gemini: ", response)
except Exception as e:
print("Error: ", e)
if __name__ == "__main__":
main()
您可以通过在控制台窗口中的提示符下键入 gemini 来完成此操作。
当退出提示出现时,循环退出。