はじめに
最近Rubyを入門しています。
Rubyの特徴として挙げられる"メタプログラミング"を活かしたアプリを作成しました。
Kernel#eval
とは
Rubyのeval
メソッドは、文字列として与えられたRubyコードを実行するために使用されます。これは、Pythonのexec
やJavaScriptのeval
など、他の言語における同様の機能に類似しています。
基本的な使い方
code = "1 + 2"
result = eval(code)
puts result # 出力: 3
上記の例では、code
変数に格納された文字列がRubyの式として評価され、その結果がresult
変数に代入されます。
つくったもの
コード(一部抜粋)
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を渡してみたり。。。