ChatGPTからハードウェア制御
システムロール
システムロールに、ChatGPTの振る舞いを記述できます。
role.txt
あなたと私の間では、Pythonで下記に定義したメソッドを利用してハードウェアの制御が可能です。
利用できるAPIは以下の通りです。
fabo.ledOn() LEDを点灯する
fabo.ledOff() LEDを消灯する
例)
私: LEDを点灯してください。
あなた:
fabo.ledOn()
例: LEDを消灯してください。
あなた:
fabo.ledOff()
例: LEDを点灯して、そのあと消灯してください。
あなた:
import time
fabo.ledOff()
time.sleep(1)
fabo.ledOn()
あなたの返答は、Markdown形式のPythonのソースコードで返答を返してください。
それでは始めましょう。
ラッパークラス
fabo.py
# coding: utf-8
import Jetson.GPIO as GPIO
import time
import sys
LEDPIN = 4
class FaBoWrapper:
def __init__(self):
GPIO.setwarnings(False)
GPIO.setmode( GPIO.BCM )
GPIO.setup( LEDPIN, GPIO.OUT )
def ledOn(self):
GPIO.output( LEDPIN, True )
def ledOff(self):
GPIO.output( LEDPIN, False )
# -*- coding: utf-8 -*-
import readline
import requests
import json
import re
from fabo import *
# OpenAI APIキーを設定(ご自身のキーに置き換えること)
api_key = "###################################################################"
# 使用するモデルの設定
model_engine = "gpt-3.5-turbo"
fabo= FaBoWrapper() # FaBoラッパーのインスタンスを生成
code_block_regex = re.compile(r"```(.*?)```", re.DOTALL) # コードブロックを抽出する正規表現
# Pythonコードを抽出する関数
def extract_python_code(content):
code_blocks = code_block_regex.findall(content)
if code_blocks:
full_code = "\n".join(code_blocks)
if full_code.startswith("python"):
full_code = full_code[7:]
return full_code
else:
return None
# GPT-3から応答を生成する関数
def generate_response(prompt, system_roll, model_engine):
url = "https://api.openai.com/v1/chat/completions" # OpenAIのURL
headers = {'Authorization': 'Bearer {}'.format(api_key)}
data = {
"model": model_engine,
"messages":[
{"role": "system", "content": system_roll},
{"role": "user", "content": prompt}
],
}
response = requests.post(url, headers=headers, json=data)
try:
# 応答からメッセージを取り出す
message = response.json()["choices"][0]["message"]["content"]
return message
except Exception as e:
print("Error: " + str(response) + " Exception: " + str(e))
return None
# メインループ
def main():
# システムロールをrole.txt から読み込む
path = 'role.txt'
with open(path) as f:
system_role = f.read()
while True:
prompt = ""
# ユーザーからの入力を受け取る
user_input = input("> ")
# ユーザーの入力をGPT-3 APIに送信して応答を生成
prompt += user_input + "\n"
response = generate_response(prompt,system_role,model_engine)
# ChatGPTの応答を表示
print(response)
code = extract_python_code(response) # 応答からPythonコードを抽出
if code is not None:
print("Please wait while I run the code in Jetson Nano...")
code = code.replace('import fabo', '') # faboのインポート行を削除
code = code.replace('python', '') # pythonの文字列を削除
code = code.replace('Python', '') # Pythonの文字列を削除
exec(code) # コードを実行
print("Done!\n")
# プログラムのエントリーポイント
if __name__ == "__main__":
main()