File size: 8,563 Bytes
129cd69
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from langchain.memory import ConversationBufferMemory
from langchain import LLMChain, PromptTemplate
from langchain.chat_models import ChatOpenAI
from langchain.prompts.chat import (
    ChatPromptTemplate,
    SystemMessagePromptTemplate,
    HumanMessagePromptTemplate,
)
from config import (
    template_memory,template_memory_character, template,
    template_chat_term, template_chat_character,
    template_basic, template_basic_character,
    template_reco, template_reco_character, context_file
)

#### 1. 用户切换,记忆功能
# template_memory = config['Parameters']['template_memory']
human_template_memory="{human_input}"
system_message_prompt_memory = SystemMessagePromptTemplate.from_template(template_memory, input_variables=["context"])
human_message_prompt_memory = HumanMessagePromptTemplate.from_template(human_template_memory)
prompt_memory = ChatPromptTemplate.from_messages([system_message_prompt_memory, human_message_prompt_memory])

#### 1. 用户切换,带人设的记忆功能
# template_memory_character = config['Parameters']['template_memory_character']
human_template_memory="{human_input}"
system_message_prompt_memory = SystemMessagePromptTemplate.from_template(template_memory_character, input_variables=["context"])
human_message_prompt_memory = HumanMessagePromptTemplate.from_template(human_template_memory)
prompt_memory_character = ChatPromptTemplate.from_messages([system_message_prompt_memory, human_message_prompt_memory])


#### 2. 阳光保险文档问答,不带人设,不带memory
# context_file = config['context']['context_file']
with open(context_file, 'r') as file:
    content_term = file.read()
# template_chat_term = config['Parameters']['template_chat_term']
human_template_term="{human_input}"
system_message_prompt_term = SystemMessagePromptTemplate.from_template(template_chat_term, input_variables=["context"])
human_message_prompt_term = HumanMessagePromptTemplate.from_template(human_template_term)
prompt_chat_term = ChatPromptTemplate.from_messages([system_message_prompt_term, human_message_prompt_term])

#### 2. 闲聊,带人设,带memory
# template_chat_character = config['Parameters']['template_chat_character']
human_template=" {human_input}"
system_message_prompt = SystemMessagePromptTemplate.from_template(template_chat_character)
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
prompt_chat_character = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
memory_chat = ConversationBufferMemory(memory_key="chat_history", ai_prefix="")

#### 3. 搜集个人家庭信息,不带人设,有memory
# template_basic = config['Parameters']['template_basic']
human_template="{human_input}"
system_message_prompt = SystemMessagePromptTemplate.from_template(template_basic)
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
prompt_basic = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
memory_basic = ConversationBufferMemory(memory_key="chat_history", ai_prefix="")

#### 3. 搜集个人家庭信息,带人设,有memory
# template_basic_character = config['Parameters']['template_basic_character']
human_template="{human_input}"
system_message_prompt = SystemMessagePromptTemplate.from_template(template_basic_character)
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
prompt_basic_character = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
memory_basic_character = ConversationBufferMemory(memory_key="chat_history", ai_prefix="")


def extract_name(content):
    import re
    # strings = ["我的儿子", "我儿子", "我的妻子", "我妻子", "我的父母", "我的父亲", "我父亲", "父亲", "女儿", "妻子",'我爸']
    pattern = r'儿子|女儿|小孩|父母|父亲|爸爸|老爸|爸|母亲|妈妈|老妈|妈|妻子|老婆|配偶|老公|丈夫'
    family_titles = []
    # for s in strings:
    matches = re.findall(pattern, content)
    if matches:
        return matches[0]
    else:
        return ""
def process_Info(content):
    """['人物1*称谓: 我的儿子  *年龄: 10岁  *职业: 小学生  *健康状况: 不大好,总是感冒  *生活习惯: 未知']"""
    result = []
    for item in content:
        if len(item.strip()) != 0:
            data = {}
            tmp = item.split('*')
            if len(tmp) >= 1:
                for it in tmp[1:]:  # tmp = ['人物1', '称谓: 先生  ', '年龄: 42  ', '职业: 技术高管  ', '健康状况: 三高,腰椎不太好 ', '生活习惯: 每周会去健身房锻炼一到两次,但饮食不太规律,经常加班,每天的睡觉时间也很少  ', '风险提示: 加强身体管理,科学饮食及减少加班,增加睡眠时间。']
                    if len(it.split(':')) == 2:
                        if it.split(':')[0].strip() == "称谓":
                            data.update({"name"  : extract_name(it.split(':')[1].strip()) })
                        elif it.split(':')[0].strip() == "年龄":
                            data.update({"age"  : it.split(':')[1].strip()})
                        elif it.split(':')[0].strip() == "职业":
                            data.update({"career"  : it.split(':')[1].strip()})
                        elif it.split(':')[0].strip() == "健康状况":
                            data.update({"health"  : it.split(':')[1].strip()})
                        elif it.split(':')[0].strip() == "生活习惯":
                            data.update({"live"  : it.split(':')[1].strip()})
            result.append(data)
    return result

def get_detailInfo(text):
    # template = config['Parameters']['template']
    prompt = PromptTemplate(
        input_variables=["context"], 
        template=template
    )
    llm = ChatOpenAI(request_timeout = 8*60, model_name="gpt-4")
    llm_chain = LLMChain(llm=llm, prompt=prompt, verbose=True)
    res = llm_chain.predict(context=text)
    return res



#### 4. 保险推荐,不带人设,有memory
# template_reco = config['Parameters']['template_reco']
prompt_reco = PromptTemplate(
    input_variables=["chat_history", "human_input", "context", "product"], 
    template=template_reco
)
memory_reco = ConversationBufferMemory(memory_key="chat_history", input_key = "human_input")

#### 4. 保险推荐,带人设,有memory
# template_reco_character = config['Parameters']['template_reco_character']
prompt_reco_character = PromptTemplate(
    input_variables=["chat_history", "human_input", "context", "product"], 
    template = template_reco_character
)
memory_reco_character = ConversationBufferMemory(memory_key="chat_history", input_key = "human_input")

product = { \
    "医疗保险和定期寿险":
    [
        {"k1": "产品一名称", "k2": "神农父母防癌医疗险", "k3": "亮点", "k4": "对于恶性肿瘤(含原位癌)的保障比较全面,保额较高", "k5": "适合人群", "k6": "出生满30日-70周岁", "k7": "保障额度", "k8": "最高保额300万元"},
        {"k1": "产品一名称", "k2": "擎天柱6号定期寿险", "k3": "亮点", "k4": "0等待期,提供额外赔付的猝死保障以及可选的交通意外身故保障,性价比高", "k5": "适合人群", "k6": "18-60岁", "k7": "保障额度", "k8": "最高保额350万元"}
    ],
    "医疗保险和重疾险":
    [
        {"k1": "产品一名称", "k2": "神农父母防癌医疗险", "k3": "亮点", "k4": "对于恶性肿瘤(含原位癌)的保障比较全面,保额较高", "k5": "适合人群", "k6": "出生满30日-70周岁", "k7": "保障额度", "k8": "最高保额300万元"},
        {"k1": "产品一名称", "k2": "达尔文易核版重疾险2021", "k3": "亮点", "k4": "缴费期限宽松,对7种常见疾病患者更为宽松", "k5": "适合人群", "k6": "出生满30日-50周岁", "k7": "保障额度", "k8": "最高保额50万元"}
    ],
    "重疾险和定期寿险":
    [
        {"k1": "产品一名称", "k2": "达尔文易核版重疾险2021", "k3": "亮点", "k4": "缴费期限宽松,对7种常见疾病患者更为宽松", "k5": "适合人群", "k6": "出生满30日-50周岁", "k7": "保障额度", "k8": "最高保额50万元"},
        {"k1": "产品一名称", "k2": "擎天柱6号定期寿险", "k3": "亮点", "k4": "0等待期,提供额外赔付的猝死保障以及可选的交通意外身故保障,性价比高", "k5": "适合人群", "k6": "18-60岁", "k7": "保障额度", "k8": "最高保额350万元"}
    ]
}