|
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(), |
|
], |
|
) |
|
|
|
|
|
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") |
|
] |
|
) |
|
|
|
|
|
iface.launch() |
|
|