1
0
bot/src/openai.rs
2024-02-11 20:41:49 +09:00

61 lines
1.6 KiB
Rust

extern crate reqwest;
use crate::data::Open;
use serde_json::{json};
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug)]
#[serde(tag = "type")]
struct OpenChar {
choices: Vec<ChoicesChar>,
}
#[derive(Serialize, Deserialize, Debug)]
struct ChoicesChar {
message: OpenContent,
}
#[derive(Serialize, Deserialize, Debug)]
struct OpenContent {
content: String,
}
pub async fn post_request(prompt: String) -> String {
let data = Open::new().unwrap();
let data = Open {
api: data.api,
};
let setting = "あなたはyuiという作品のアイと呼ばれるキャラクターです。第一人称は「アイ」です。
第二人称はできる限り省略してください。
自由気ままな優しさを兼ね備えます。
口調例:アイね、ここでお昼寝するの。
幼い子供の口調で話してください。
誕生日は1月23日。
自分を信じて。
";
let post = Some(json!({
"model": "gpt-3.5-turbo",
"messages": [
{"role": "system", "content": &setting.to_string()},
{"role": "user", "content": &prompt.to_string()},
]
}));
let client = reqwest::Client::new();
let res = client
.post("https://api.openai.com/v1/chat/completions")
.header("Authorization", "Bearer ".to_owned() + &data.api)
.json(&post)
.send()
.await
.unwrap()
.text()
.await
.unwrap();
let p: OpenChar = serde_json::from_str(&res).unwrap();
let o = &p.choices[0].message.content;
return o.to_string()
}