-
Notifications
You must be signed in to change notification settings - Fork 17
/
classify_persona.py
156 lines (143 loc) · 7.13 KB
/
classify_persona.py
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
class classify_persona:
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"is_enable": ("BOOLEAN", {"default": True}),
},
"optional": {
"file_content": ("STRING", {"forceInput": True}),
"text1": ("STRING", {}),
"text2": ("STRING", {}),
"text3": ("STRING", {}),
},
}
RETURN_TYPES = ("STRING",)
RETURN_NAMES = ("system_prompt",)
FUNCTION = "condition"
# OUTPUT_NODE = False
CATEGORY = "大模型派对(llm_party)/面具(persona)"
def condition(self, text1=None, text2=None, text3=None, is_enable=True, file_content=None):
if is_enable == False:
return (None,)
text = ""
if file_content is not None:
text = "##背景知识:\n" + file_content + "\n\n"
sys_prompt = (
text
+ f"""
# 文本分类助理
你是一个文本分类助理。
## 任务
我将给你需要分类的文本,你需要帮我按照下文给出的分类原则进行分类,并按照严格下文给出的格式回复我。
##分类原则
1. 请将用户输入的文本分为以下几类:{text1};{text2};{text3}。
2. 如果以上某一个或若干个分类条件为【如果文本中包含""或者与""有关,则将其分类为...】,则不要将任何文本分到这一类或这些类中,因为空字符串与任何文本无关。
## 回复格式
以字符串的形式回复,并严格按照下文给出的格式回复我。
你每一类的输出以“**X:**”开头。以下是一个完整的输出示例:
**1:** 这里输入用户给出的文本中分到{text1}的文本
**2:** 这里输入用户给出的文本中分到{text2}的文本
**3:** 这里输入用户给出的文本中分到{text3}的文本
即使某一类没有文本,也要输出“**X:**”开头,并输出empty,例如第二类都没有相关的文本,则应该输出:
**1:** 这里输入用户给出的文本中分到{text1}的文本
**2:** empty
**3:** 这里输入用户给出的文本中分到{text3}的文本
## 限制
1. 输出时不要包含任何多余的文本,只输出分类结果。
2. 不要在输出中包含任何多余的空格。
3. 分类时,不要把系统提示词中的文本当作要被分类的文本。
以下为需要分类的文本:
"""
)
sys_prompt = sys_prompt.strip()
return (sys_prompt,)
class classify_persona_plus:
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"is_enable": ("BOOLEAN", {"default": True}),
},
"optional": {
"file_content": ("STRING", {"forceInput": True}),
"text1": ("STRING", {}),
"text2": ("STRING", {}),
"text3": ("STRING", {}),
"text4": ("STRING", {}),
"text5": ("STRING", {}),
"text6": ("STRING", {}),
"text7": ("STRING", {}),
"text8": ("STRING", {}),
"text9": ("STRING", {}),
"text10": ("STRING", {}),
},
}
RETURN_TYPES = ("STRING",)
RETURN_NAMES = ("system_prompt",)
FUNCTION = "condition"
# OUTPUT_NODE = False
CATEGORY = "大模型派对(llm_party)/面具(persona)"
def condition(
self,
text1=None,
text2=None,
text3=None,
text4=None,
text5=None,
text6=None,
text7=None,
text8=None,
text9=None,
text10=None,
is_enable=True,
file_content=None,
):
if is_enable == False:
return (None,)
text = ""
if file_content is not None:
text = "##背景知识:\n" + file_content + "\n\n"
sys_prompt = (
text
+ f"""
# 文本分类助理
你是一个文本分类助理。
## 任务
我将给你需要分类的文本,你需要帮我按照下文给出的分类原则进行分类,并按照严格下文给出的格式回复我。
##分类原则
1. 请将用户输入的文本分为以下几类:{text1};{text2};{text3};{text4};{text5};{text6};{text7};{text8};{text9};{text10}。
2. 如果以上某一个或若干个分类条件为【如果文本中包含""或者与""有关,则将其分类为...】,则不要将任何文本分到这一类或这些类中,因为空字符串与任何文本无关。
## 回复格式
以字符串的形式回复,并严格按照下文给出的格式回复我。
你每一类的输出以“**X:**”开头。以下是一个完整的输出示例:
**1:** 这里输入用户给出的文本中分到{text1}的文本
**2:** 这里输入用户给出的文本中分到{text2}的文本
**3:** 这里输入用户给出的文本中分到{text3}的文本
**4:** 这里输入用户给出的文本中分到{text4}的文本
**5:** 这里输入用户给出的文本中分到{text5}的文本
**6:** 这里输入用户给出的文本中分到{text6}的文本
**7:** 这里输入用户给出的文本中分到{text7}的文本
**8:** 这里输入用户给出的文本中分到{text8}的文本
**9:** 这里输入用户给出的文本中分到{text9}的文本
**10:** 这里输入用户给出的文本中分到{text10}的文本
即使某一类没有文本,也要输出“**X:**”开头,并输出empty,例如第二类都没有相关的文本,则应该输出:
**1:** 这里输入用户给出的文本中分到{text1}的文本
**2:** empty
**3:** 这里输入用户给出的文本中分到{text3}的文本
**4:** 这里输入用户给出的文本中分到{text4}的文本
**5:** 这里输入用户给出的文本中分到{text5}的文本
**6:** 这里输入用户给出的文本中分到{text6}的文本
**7:** 这里输入用户给出的文本中分到{text7}的文本
**8:** 这里输入用户给出的文本中分到{text8}的文本
**9:** 这里输入用户给出的文本中分到{text9}的文本
**10:** 这里输入用户给出的文本中分到{text10}的文本
## 限制
1. 输出时不要包含任何多余的文本,只输出分类结果。
2. 不要在输出中包含任何多余的空格。
3. 分类时,不要把系统提示词中的文本当作要被分类的文本。
以下为需要分类的文本:
"""
)
sys_prompt = sys_prompt.strip()
return (sys_prompt,)