1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

GPTが書いたコードをKernel#evalで動かす

Last updated at Posted at 2023-11-20

はじめに

最近Rubyを入門しています。
Rubyの特徴として挙げられる"メタプログラミング"を活かしたアプリを作成しました。

Kernel#evalとは

Rubyのevalメソッドは、文字列として与えられたRubyコードを実行するために使用されます。これは、PythonのexecやJavaScriptのevalなど、他の言語における同様の機能に類似しています。

基本的な使い方

code = "1 + 2"
result = eval(code)
puts result # 出力: 3

上記の例では、code変数に格納された文字列がRubyの式として評価され、その結果がresult変数に代入されます。

つくったもの

Github

無題の動画 ‐ Clipchampで作成

コード(一部抜粋)

instructions = <<~HEREDOC
命令:
以下を満たすjsonデータを返してください
JSON:
[eval_code:evalで実行できるコードで最後に標準出力で会話形式の回答を出力すること
]
参考:
HEREDOC
  
question = input
prompt = question + instructions + api # api にapiの使い方を文字列で代入しておく
client = OpenAI::Client.new(access_token: ENV['OPENAI_KEY'])
response = client.chat(
    parameters: {
      model: "gpt-4-1106-preview",
      messages: [
        {"role": "system", "content": "あなたはITエンジニアです。"},
        {"role": "user", "content": prompt }
      ],
      response_format:{"type":"json_object"},
      max_tokens: 300,
    },
)
# response内容のうち、メッセージ部分を格納
response_content = response['choices'][0]['message']['content'

# メッセージ部分のうち、evalで実行させる部分をJSONで受け取る
response_content = JSON.parse(response_content)

# evalでコードを実行
eval(response_content["eval_code"])

今後の展望

アップデートごとにGPTの扱えるトークン数が増えています。候補のAPIを数多く渡すことで、より多様なリクエストに対応できるようになります。
例えばLineAPIを渡してみたり、slackのAPIを渡してみたり。。。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?