File size: 1,950 Bytes
9e0f524
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# coding=utf-8
"""
@Author: Freshield
@Contact: yangyufresh@163.com
@File: OpenaiBot.py
@Time: 2023-03-03 17:47
@Last_update: 2023-03-03 17:47
@Desc: None
@==============================================@
@      _____             _   _     _   _       @
@     |   __|___ ___ ___| |_|_|___| |_| |      @
@     |   __|  _| -_|_ -|   | | -_| | . |      @
@     |__|  |_| |___|___|_|_|_|___|_|___|      @
@                                    Freshield @
@==============================================@
"""
import os
import openai


class OpenaiBot(object):
    """调用openai的机器人"""
    def __init__(self, temperature=0.5):
        openai.api_key = os.environ.get('OPENAI_API_KEY')
        self.model_engine = "gpt-3.5-turbo"
        self.temperature = temperature

    def set_api_key(self, api_key):
        """设定api key"""
        openai.api_key = api_key

    def construct_message(self, role, new_msg, history_list, keep_history=3):
        """
        构造message,这里history_list是一个list,每个元素是一个tuple
        """
        msg_list = [{"role": "system", "content": role}]
        history_list = history_list[-keep_history:]
        for user, assistant in history_list:
            msg_list.append({"role": "user", "content": user})
            msg_list.append({"role": "assistant", "content": assistant})
        msg_list.append({"role": "user", "content": new_msg})

        return msg_list

    def get_response(self, role, new_msg, history_list, keep_history=3):
        """
        通过openai获取回复
        """
        msg_list = self.construct_message(role, new_msg, history_list, keep_history)
        response = openai.ChatCompletion.create(
            model=self.model_engine, messages=msg_list,
            temperature=self.temperature
        )
        content = response['choices'][0]['message']['content']

        return content


if __name__ == '__main__':
    openai_bot = OpenaiBot()