File size: 2,082 Bytes
2506321
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fa38503
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import openai
import os
import gradio as gr

openai.api_key = os.getenv("OPENAI_API_KEY")

class Conversation:
    def __init__(self, prompt):
        self.prompt = prompt
        self.messages = []
        self.messages.append({"role": "system", "content": self.prompt})

    def ask(self, question):
        try:
            self.messages.append({"role": "user", "content": question})
            response = openai.ChatCompletion.create(
                model="gpt-3.5-turbo",
                messages=self.messages,
                temperature=0.5,
                max_tokens=2048,
                top_p=1,
            )
        except Exception as e:
            print(e)
            return e

        message = response["choices"][0]["message"]["content"]
        self.messages.append({"role": "assistant", "content": message})

        return message


prompt = """你是一个英语老师,请批改英语作文。用中文回答,回答限制在100个字以内,你的回答按照以下格式:
1. 文章主要内容:
2. 语法错误:
3. 拼写错误:
4. 百分制评分:
5. 给出评语:
如果输入不是英文作文,则提醒输入英文作文"""

conv = Conversation(prompt)

def moderation(text):
    response = openai.Moderation.create(
        input=text
    )
    output = response["results"][0]['flagged']
    return output

def answer(question):
    #调用moderation函数,对输入的作文进行审核,如果有不良内容,返回提示信息
    moderation_flag = moderation(question)
    if moderation_flag == True:
        response = "输入文字有不良用语,请重新输入"
    else:
        response = conv.ask(question)
    return response



# 使用gradio画出修改英语作文的界面,左边是输入框和提交按钮,右边是输出评语框,并调用gpt进行作文修改
with gr.Interface(
    answer, 
    gr.inputs.Textbox(lines=5,placeholder="输入英语作文",label="作文"), 
    gr.outputs.Textbox(label="评语"), 
    title="批改英语作文",
    allow_flagging='never'
) as demo:
    demo.launch()