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()