File size: 4,841 Bytes
1dfa162
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b1226bf
1dfa162
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
import openai
from openai import OpenAI

import requests
import time
import os, io, json

import logging


# 配置日志记录器
logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s %(levelname)s:%(message)s",
    handlers=[
        logging.FileHandler("debug.log"),  # 将日志输出到文件
        logging.StreamHandler(),  # 同时在控制台输出
    ],
)

# Set your OpenAI API key here
api_key = os.environ.get('OPENAI_API_KEY')
api_base = os.environ.get('OPENAI_API_BASE')
client = OpenAI(api_key=api_key, base_url=api_base)

history = []

def predict(message, history, system_prompt):
    history_openai_format = []
    history_openai_format.append({"role": "system", "content": system_prompt})
    for human, assistant in history:
        history_openai_format.append({"role": "user", "content": human })
        history_openai_format.append({"role": "assistant", "content":assistant})
    history_openai_format.append({"role": "user", "content": message})

    response = client.chat.completions.create(
        model='gpt-4-1106-preview',
        messages= history_openai_format,
        response_format={ "type": "json_object" },
        stream=True
    )

    partial_message = ""
    for chunk in response:
        if chunk.choices[0].delta.content and len(chunk.choices[0].delta.content) != 0:
            partial_message = partial_message + chunk.choices[0].delta.content
            yield partial_message

system_prompt = """

  基于给出的梦境描述和梦的解析,按照以下评分系统,每个维度分配相应的分数,然后将这些分数加总以得出最终得分,总分10分:
  梦境描述评分(0-4分):
  1. 易读性(0-1分):
  - 0分: 描述晦涩难懂,读者难以理解梦境内容。
  - 0.5分: 描述基本清晰,但在某些地方可能需要进一步的阐释以便读者理解。
  - 1分: 描述通俗易懂,读者能轻松理解梦境内容。
  2. 完整性(0-1分):
  - 0分: 描述片段化,缺乏连贯性,留下许多未解之谜。
  - 0.5分: 描述大体完整,但可能缺少某些关键信息。
  - 1分: 描述完整,提供了一个连贯的梦境故事线。
  3. 故事性(0-1分):
  - 0分: 梦境缺乏明显的叙事结构,难以把握故事线。
  - 0.5分: 梦境有一定的叙事结构,但故事发展不够丰富或深入。
  - 1分: 梦境具有强烈的叙事结构,故事性强,有明显的起伏和高潮。
  4. 趣味性(0-1分):
  - 0分: 梦境内容平淡无奇,缺乏吸引力。
  - 0.5分: 梦境内容有一定趣味性,但未能充分吸引读者的注意。
  - 1分: 梦境内容引人入胜,具有较高的趣味性和吸引力。
  解析的启发性和洞察力(0-4分)
  1. 提供新视角(0-1分):
    - 0分: 解析提供了常见或广泛接受的解释,没有提供新的观点。
    - 0.5分: 解析提出了稍微不同于常规的观点,但不足以让人眼前一亮。
    - 1分: 解析提供了一个独特的解释,这个解释不仅与众不同,而且为梦境提供了全新的理解角度。
  2. 挑战日常认知(0-1分):
    - 0分: 解析遵循了传统的思维模式,没有挑战读者的认知。
    - 0.5分: 解析在一定程度上提出了对传统认知的质疑,但挑战不够强烈或深刻。
    - 1分: 解析显著地颠覆了常规理解,提出了深刻的、可能改变读者看待梦境的方式的观点。
  3. 深层次个人洞察(0-1分):
    - 0分: 解析没有或几乎没有探讨梦者的个人心理状态。
    - 0.5分: 解析提到了梦者可能的心理状态,但没有深入挖掘其背后的意义或影响。
    - 1分: 解析深入探讨了梦者的个人心理状态,提供了对梦者个人经历或情感的深刻见解。
  4. 指导性启发(0-1分):
    - 0分: 解析没有提供引导性的洞察或启发性的建议。
    - 0.5分: 解析提供了一些启发,但没有很强的引导性,未能明显触发“啊哈”时刻。
    - 1分: 解析不仅提供了深刻的洞察,而且具有强烈的指导性,能够清晰地引导梦者产生深刻的认识和反思。
  解析与个人的相关性(0-2分)
  个人情感关联(1分): 如果解析触及了梦者可能的情感状态。
  生活状况关联(1分): 如果解析指出梦境可能与梦者最近的生活变化有关。

  请最终用json结果输出, 格式如下:
  {"score": 8.5, "": "score_criteria": "xxxxx"}

  field"score": 评分的数值
  field"score_criteria": 评分的判断标
"""
iface = gr.ChatInterface(predict,
                         additional_inputs=[
                            gr.Textbox(system_prompt, label="System Prompt")
                        ]
                        )

# 启动Gradio应用程序
iface.launch()