优化自译解功能

This commit is contained in:
Your Name 2023-03-31 22:36:46 +08:00
parent ac681d3201
commit 65b1d78516
4 changed files with 164 additions and 78 deletions

View File

@ -1,7 +1,6 @@
# [step 1]>> 例如: API_KEY = "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" 此key无效
API_KEY = "sk-此处填API密钥"
# [step 2]>> 改为True应用代理如果直接在海外服务器部署此处不修改
USE_PROXY = False
if USE_PROXY:
@ -12,7 +11,11 @@ if USE_PROXY:
# [端口] 在代理软件的设置里找。虽然不同的代理软件界面不一样,但端口号都应该在最显眼的位置上
# 代理网络的地址,打开你的科学上网软件查看代理的协议(socks5/http)、地址(localhost)和端口(11284)
proxies = { "http": "socks5h://localhost:11284", "https": "socks5h://localhost:11284", }
proxies = {
# [协议]:// [地址] :[端口]
"http": "socks5h://localhost:11284",
"https": "socks5h://localhost:11284",
}
print('网络代理状态:运行。')
else:
proxies = None

View File

@ -50,7 +50,8 @@ def 解析源代码(file_manifest, project_folder, top_p, temperature, chatbot,
def 解析项目本身(txt, top_p, temperature, chatbot, history, systemPromptTxt, WEB_PORT):
history = [] # 清空历史,以免输入溢出
import time, glob, os
file_manifest = [f for f in glob.glob('*.py')]
file_manifest = [f for f in glob.glob('./*.py') if ('test_project' not in f) and ('gpt_log' not in f)] + \
[f for f in glob.glob('./crazy_functions/*.py') if ('test_project' not in f) and ('gpt_log' not in f)]
for index, fp in enumerate(file_manifest):
# if 'test_project' in fp: continue
with open(fp, 'r', encoding='utf-8') as f:
@ -65,7 +66,7 @@ def 解析项目本身(txt, top_p, temperature, chatbot, history, systemPromptTx
if not fast_debug:
# ** gpt request **
# gpt_say = predict_no_ui(inputs=i_say, top_p=top_p, temperature=temperature)
gpt_say = yield from predict_no_ui_but_counting_down(i_say, i_say_show_user, chatbot, top_p, temperature, history=[]) # 带超时倒计时
gpt_say = yield from predict_no_ui_but_counting_down(i_say, i_say_show_user, chatbot, top_p, temperature, history=[], long_connection=True) # 带超时倒计时
chatbot[-1] = (i_say_show_user, gpt_say)
history.append(i_say_show_user); history.append(gpt_say)
@ -79,7 +80,7 @@ def 解析项目本身(txt, top_p, temperature, chatbot, history, systemPromptTx
if not fast_debug:
# ** gpt request **
# gpt_say = predict_no_ui(inputs=i_say, top_p=top_p, temperature=temperature, history=history)
gpt_say = yield from predict_no_ui_but_counting_down(i_say, i_say, chatbot, top_p, temperature, history=history) # 带超时倒计时
gpt_say = yield from predict_no_ui_but_counting_down(i_say, i_say, chatbot, top_p, temperature, history=history, long_connection=True) # 带超时倒计时
chatbot[-1] = (i_say, gpt_say)
history.append(i_say); history.append(gpt_say)

View File

@ -1,88 +1,85 @@
# chatgpt-academic项目自译解报告
Author补充以下分析均由本项目调用ChatGPT一键生成如果有不准确的地方全怪GPT😄
## [0/10] 程序摘要: check_proxy.py
## [0/18] 程序摘要: functional_crazy.py
个程序是一个用来检查代理服务器是否有效的 Python 程序代码。程序文件名为 check_proxy.py。其中定义了一个函数 check_proxy该函数接收一个代理配置信息 proxies使用 requests 库向一个代理服务器发送请求,获取该代理的所在地信息并返回。如果请求超时或者异常,该函数将返回一个代理无效的结果
是一个功能扩展的程序,文件名为 `functional_crazy.py`。代码的主要功能是通过提供一系列函数插件,增强程序的功能,让用户可以通过界面中的按钮,快速调用对应的函数插件实现相应的操作。代码中使用了 `HotReload` 函数插件,可以在不重启程序的情况下更新函数插件的代码,让其生效。同时,通过 `UserVisibleLevel` 变量的设置可以控制哪些插件会在UI界面显示出来。函数插件列表包括了以下功能解析项目本身、解析一个Python项目、解析一个C++项目头文件、解析一个C++项目、读取文章并生成摘要、批量生成函数注释、全项目切换成英文、批量总结PDF文档、批量总结PDF文档pdfminer、批量总结Word文档、高阶功能模板函数、以及其他未经充分测试的函数插件
程序代码分为两个部分,首先是 check_proxy 函数的定义部分,其次是程序文件的入口部分,在该部分代码中,程序从 config_private.py 文件或者 config.py 文件中加载代理配置信息,然后调用 check_proxy 函数来检测代理服务器是否有效。如果配置文件 config_private.py 存在,则会加载其中的代理配置信息,否则会从 config.py 文件中读取。
## [1/18] 程序摘要: main.py
## [1/10] 程序摘要: config.py
该程序是一个基于Gradio构建的对话生成模型的Web界面示例包含了以下主要功能
本程序文件名为config.py主要功能是存储应用所需的常量和配置信息。
1.加载模型并对用户输入进行响应;
2.通过调用外部函数库来获取用户的输入,并在模型生成的过程中进行处理;
3.支持用户上传本地文件,供外部函数库调用;
4.支持停止当前的生成过程;
5.保存用户的历史记录,并将其记录在本地日志文件中,以供后续分析和使用。
其中包含了应用所需的OpenAI API密钥、API接口地址、网络代理设置、超时设置、网络端口和OpenAI模型选择等信息在运行应用前需要进行相应的配置。在未配置网络代理时程序给出了相应的警告提示。
该程序需要依赖于一些外部库和软件包如Gradio、torch等。用户需要确保这些依赖项已经安装并且在运行该程序前对config_private.py配置文件进行相应的修改
此外还包含了一个检查函数用于检查是否忘记修改API密钥。
## [2/18] 程序摘要: functional.py
总之config.py文件是应用中的一个重要配置文件用来存储应用所需的常量和配置信息需要在应用运行前进行相应的配置
该文件定义了一个名为“functional”的函数函数的作用是返回一个包含多个字典键值对的字典每个键值对表示一种功能。该字典的键值由功能名称和对应的数据组成。其中的每个字典都包含4个键值对分别为“Prefix”、“Suffix”、“Color”和“PreProcess”分别表示前缀、后缀、按钮颜色和预处理函数。如果某些键值对没有给出那么程序中默认相应的值如按钮颜色默认为“secondary”等。每个功能描述了不同的学术润色/翻译/其他服务如“英语学术润色”、“中文学术润色”、“查找语法错误”等。函数还引用了一个名为“clear_line_break”的函数用于预处理修改前的文本
## [2/10] 程序摘要: config_private.py
## [3/18] 程序摘要: show_math.py
文件是一个配置文件命名为config_private.py。它是一个Python脚本用于配置OpenAI的API密钥、模型和其它相关设置。该配置文件还可以设置是否使用代理。如果使用代理需要设置代理协议、地址和端口。在设置代理之后该文件还包括一些用于测试代理是否正常工作的代码。该文件还包括超时时间、随机端口、重试次数等设置。在文件末尾还有一个检查代码如果没有更改API密钥则抛出异常
程序文件名为show_math.py主要用途是将Markdown和LaTeX混合格式转换成带有MathML的HTML格式。该程序通过递归地处理LaTeX和Markdown混合段落逐一转换成HTML/MathML标记出来并在LaTeX公式创建中进行错误处理。在程序文件中定义了3个变量分别是incompleteconvError和convert其中convert函数是用来执行转换的主要函数。程序使用正则表达式进行LaTeX格式和Markdown段落的分割从而实现转换。如果在Latex转换过程中发生错误程序将输出相应的错误信息
## [3/10] 程序摘要: functional.py
## [4/18] 程序摘要: predict.py
该程序文件名为 functional.py其中包含一个名为 get_functionals 的函数,该函数返回一个字典,该字典包含了各种翻译、校对等功能的名称、前缀、后缀以及默认按钮颜色等信息。具体功能包括:英语学术润色、中文学术润色、查找语法错误、中英互译、中译英、学术中译英、英译中、解释代码等。该程序的作用为提供各种翻译、校对等功能的模板,以便后续程序可以直接调用。
本程序文件的文件名为"./predict.py",主要包含三个函数:
Author补充这个文件汇总了模块化的Prompt调用如果发现了新的好用Prompt别藏着哦^_^速速PR
1. predict正常对话时使用具备完备的交互功能不可多线程
2. predict_no_ui高级实验性功能模块调用不会实时显示在界面上参数简单可以多线程并行方便实现复杂的功能逻辑
3. predict_no_ui_long_connection在实验过程中发现调用predict_no_ui处理长文档时和openai的连接容易断掉这个函数用stream的方式解决这个问题同样支持多线程。
其中predict函数用于基础的对话功能发送至chatGPT流式获取输出根据点击的哪个按钮进行对话预处理等额外操作predict_no_ui函数用于payload比较大的情况或者用于实现多线、带嵌套的复杂功能predict_no_ui_long_connection实现调用predict_no_ui处理长文档时避免连接断掉的情况支持多线程。
## [4/10] 程序摘要: functional_crazy.py
## [5/18] 程序摘要: check_proxy.py
这个程序文件 functional_crazy.py 导入了一些 python 模块,并提供了一个函数 get_crazy_functionals(),该函数返回不同实验功能的描述和函数。其中,使用的的模块包括
该程序文件名为check_proxy.py主要功能是检查代理服务器的可用性并返回代理服务器的地理位置信息或错误提示。具体实现方式如下
- crazy_functions.读文章写摘要 中的 读文章写摘要
- crazy_functions.生成函数注释 中的 批量生成函数注释
- crazy_functions.解析项目源代码 中的 解析项目本身、解析一个Python项目、解析一个C项目的头文件、解析一个C项目
- crazy_functions.高级功能函数模板 中的 高阶功能模板函数
首先使用requests模块向指定网站https://ipapi.co/json/发送GET请求请求结果以JSON格式返回。如果代理服务器参数(proxies)是有效的且没有指明'https'代理,则用默认字典值'无'替代。
返回的实验功能函数包括:
然后程序会解析返回的JSON数据并根据数据中是否包含国家名字字段来判断代理服务器的地理位置。如果有国家名字字段则将其打印出来并返回代理服务器的相关信息。如果没有国家名字字段但有错误信息字段则返回其他错误提示信息。
- "[实验] 请解析并解构此项目本身",包含函数:解析项目本身
- "[实验] 解析整个py项目配合input输入框"包含函数解析一个Python项目
- "[实验] 解析整个C++项目头文件配合input输入框"包含函数解析一个C项目的头文件
- "[实验] 解析整个C++项目配合input输入框"包含函数解析一个C项目
- "[实验] 读tex论文写摘要配合input输入框",包含函数:读文章写摘要
- "[实验] 批量生成函数注释配合input输入框",包含函数:批量生成函数注释
- "[实验] 实验功能函数模板",包含函数:高阶功能模板函数
在程序执行前程序会先设置环境变量no_proxy并使用toolbox模块中的get_conf函数从配置文件中读取代理参数。
这些函数用于系统开发和测试,方便开发者进行特定程序语言后台功能开发的测试和实验,增加系统可靠稳定性和用户友好性
最后,检测程序会输出检查结果并返回对应的结果字符串。
Author补充这个文件汇总了模块化的函数如此设计以方便任何新功能的加入
## [6/18] 程序摘要: config_private.py
## [5/10] 程序摘要: main.py
本程序文件名为`config_private.py`,其功能为配置私有信息以便在主程序中使用。主要功能包括:
该程序是一个基于Gradio框架的聊天机器人应用程序。用户可以通过输入问题来获取答案并与聊天机器人进行对话。该应用程序还集成了一些实验性功能模块用户可以通过上传本地文件或点击相关按钮来使用这些模块。程序还可以生成对话日志并且具有一些外观上的调整。在运行时它会自动打开一个网页并在本地启动服务器。
- 配置OpenAI API的密钥和API URL
- 配置是否使用代理,如果使用代理配置代理地址和端口
- 配置发送请求的超时时间和失败重试次数的限制
- 配置并行使用线程数和用户名密码
- 提供检查功能以确保API密钥已经正确设置
其中需要特别注意的是最后一个检查功能要求在运行之前必须将API密钥正确设置否则程序会直接退出。
## [6/10] 程序摘要: predict.py
## [7/18] 程序摘要: config.py
该程序文件名为predict.py主要是针对一个基于ChatGPT的聊天机器人进行交互和预测。
该程序文件是一个配置文件用于配置OpenAI的API参数和优化体验的相关参数具体包括以下几个步骤
第一部分是导入所需的库和配置文件
1.设置OpenAI的API密钥
第二部分是一个用于获取Openai返回的完整错误信息的函数。
2.选择是否使用代理,如果使用则需要设置代理地址和端口等参数。
第三部分是用于一次性完成向ChatGPT发送请求和等待回复的函数
3.设置请求OpenAI后的超时时间、网页的端口、重试次数、选择的OpenAI模型、API的网址等
第四部分是用于基础的对话功能的函数通过stream参数可以选择是否显示中间的过程
4.设置并行使用的线程数和用户名密码
第五部分是用于整合所需信息和选择LLM模型生成的HTTP请求
该程序文件的作用为在使用OpenAI API时进行相关参数的配置以保证请求的正确性和速度并且优化使用体验
Author补充主要是predict_no_ui和predict两个函数。前者不用stream方便、高效、易用。后者用stream展现效果好。
## [8/18] 程序摘要: theme.py
## [7/10] 程序摘要: show_math.py
该程序是一个自定义Gradio主题的Python模块。主题文件名为"./theme.py"。程序引入了Gradio模块并定义了一个名为"adjust_theme()"的函数。该函数根据输入值调整Gradio的默认主题返回一个包含所需自定义属性的主题对象。主题属性包括颜色、字体、过渡、阴影、按钮边框和渐变等。主题颜色列表包括石板色、灰色、锌色、中性色、石头色、红色、橙色、琥珀色、黄色、酸橙色、绿色、祖母绿、青蓝色、青色、天蓝色、蓝色、靛蓝色、紫罗兰色、紫色、洋红色、粉红色和玫瑰色。如果Gradio版本较旧则不能自定义字体和颜色。
这是一个名为show_math.py的Python程序文件主要用于将Markdown-LaTeX混合文本转换为HTML格式并包括MathML数学公式。程序使用latex2mathml.converter库将LaTeX公式转换为MathML格式并使用正则表达式递归地翻译输入的Markdown-LaTeX混合文本。程序包括转换成双美元符号($$)形式、转换成单美元符号($)形式、转换成\[\]形式以及转换成\(\)形式的LaTeX数学公式。如果转换中出现错误程序将返回相应的错误消息。
## [9/18] 程序摘要: toolbox.py
## [8/10] 程序摘要: theme.py
这是一个名为theme.py的程序文件用于设置Gradio界面的颜色和字体主题。该文件中定义了一个名为adjust_theme()的函数其作用是返回一个Gradio theme对象设置了Gradio界面的颜色和字体主题。在该函数里面使用了Graido可用的颜色列表主要参数包括primary_hue、neutral_hue、font和font_mono等用于设置Gradio界面的主题色调、字体等。另外该函数还实现了一些参数的自定义如input_background_fill_dark、button_transition、button_shadow_hover等用于设置Gradio界面的渐变、阴影等特效。如果Gradio版本过于陈旧该函数会抛出异常并返回None。
## [9/10] 程序摘要: toolbox.py
该文件为Python程序文件文件名为toolbox.py。主要功能包括
该程序文件包含了一系列函数用于实现聊天程序所需的各种功能如预测对话、将对话记录写入文件、将普通文本转换为Markdown格式文本、装饰器函数CatchException和HotReload等。其中一些函数用到了第三方库如Python-Markdown、mdtex2html、zipfile、tarfile、rarfile和py7zr。除此之外还有一些辅助函数如get_conf、clear_line_break和extract_archive等。主要功能包括
1. 导入markdown、mdtex2html、threading、functools等模块。
2. 定义函数predict_no_ui_but_counting_down用于生成对话。
@ -99,24 +96,80 @@
13. 定义函数on_file_uploaded用于处理上传文件的操作。
14. 定义函数on_report_generated用于处理生成报告文件的操作。
## 程序的整体功能和构架做出概括。然后用一张markdown表格整理每个文件的功能。
这是一个基于Gradio框架的聊天机器人应用支持通过文本聊天来获取答案并可以使用一系列实验性功能模块例如生成函数注释、解析项目源代码、读取Latex论文写摘要等。 程序架构分为前端和后端两个部分。前端使用Gradio实现包括用户输入区域、应答区域、按钮、调用方式等。后端使用Python实现包括聊天机器人模型、实验性功能模块、模板模块、管理模块、主程序模块等。
## [10/18] 程序摘要: crazy_functions/生成函数注释.py
每个程序文件的功能如下:
该程序文件是一个Python脚本文件名为“生成函数注释.py”位于“./crazy_functions/”目录下。该程序实现了一个批量生成函数注释的功能可以对指定文件夹下的所有Python和C++源代码文件中的所有函数进行注释使用Markdown表格输出注释结果。
| 文件名 | 功能描述 |
|:----:|:----:|
| check_proxy.py | 检查代理服务器是否有效 |
| config.py | 存储应用所需的常量和配置信息 |
| config_private.py | 存储Openai的API密钥、模型和其他相关设置 |
| functional.py | 提供各种翻译、校对等实用模板 |
| functional_crazy.py | 提供一些实验性质的高级功能 |
| main.py | 基于Gradio框架的聊天机器人应用程序的主程序 |
| predict.py | 用于chatbot预测方案创建向ChatGPT发送请求和获取回复 |
| show_math.py | 将Markdown-LaTeX混合文本转换为HTML格式并包括MathML数学公式 |
| theme.py | 设置Gradio界面的颜色和字体主题 |
| toolbox.py | 定义一系列工具函数,用于对输入输出进行格式转换、文件操作、异常捕捉和处理等 |
该程序引用了predict.py和toolbox.py两个模块其中predict.py实现了一个基于GPT模型的文本生成功能用于生成函数注释而toolbox.py实现了一些工具函数包括异常处理函数、文本写入函数等。另外该程序还定义了两个函数一个是“生成函数注释”函数用于处理单个文件的注释生成另一个是“批量生成函数注释”函数用于批量处理多个文件的注释生成。
这些程序文件共同组成了一个聊天机器人应用程序的前端和后端实现,使用户可以方便地进行聊天,并可以使用相应的实验功能模块。
## [11/18] 程序摘要: crazy_functions/读文章写摘要.py
这个程序文件是一个名为“读文章写摘要”的函数。该函数的输入包括文章的文本内容、top_p生成文本时选择最可能的词语的概率阈值、temperature控制生成文本的随机性的因子、对话历史等参数以及一个聊天机器人和一个系统提示的文本。该函数的主要工作是解析一组.tex文件然后生成一段学术性语言的中文和英文摘要。在解析过程中该函数使用一个名为“toolbox”的模块中的辅助函数和一个名为“predict”的模块中的函数来执行GPT-2模型的推理工作然后将结果返回给聊天机器人。另外该程序还包括一个名为“fast_debug”的bool型变量用于调试和测试。
## [12/18] 程序摘要: crazy_functions/代码重写为全英文_多线程.py
该程序文件实现了一个多线程操作,用于将指定目录下的所有 Python 文件中的中文转化为英文,并将转化后的文件存入另一个目录中。具体实现过程如下:
1. 集合目标文件路径并清空历史记录。
2. 循环目标文件,对每个文件启动一个线程进行任务操作。
3. 各个线程同时开始执行任务函数,并在任务完成后将转化后的文件写入指定目录,最终生成一份任务执行报告。
## [13/18] 程序摘要: crazy_functions/高级功能函数模板.py
该程序文件名为高级功能函数模板.py它包含了一个名为“高阶功能模板函数”的函数这个函数可以作为开发新功能函数的模板。该函数引用了predict.py和toolbox.py文件中的函数。在该函数内部它首先清空了历史记录然后对于今天和今天以后的四天它问用户历史中哪些事件发生在这些日期并列举两条事件并发送相关的图片。在向用户询问问题时使用了GPT进行响应。由于请求GPT需要一定的时间所以函数会在重新显示状态之前等待一段时间。在每次与用户的互动中使用yield关键字生成器函数来输出聊天机器人的当前状态包括聊天消息、历史记录和状态'正常'。最后程序调用write_results_to_file函数将聊天的结果写入文件以供后续的评估和分析。
## [14/18] 程序摘要: crazy_functions/总结word文档.py
该程序文件名为总结word文档.py主要功能是批量总结Word文档。具体实现过程是解析docx格式和doc格式文件生成文件内容然后使用自然语言处理工具对文章内容做中英文概述最后给出建议。该程序需要依赖python-docx和pywin32如果没有安装会给出安装建议。
## [15/18] 程序摘要: crazy_functions/批量总结PDF文档pdfminer.py
该程序文件名为pdfminer.py位于./crazy_functions/目录下。程序实现了批量读取PDF文件并使用pdfminer解析PDF文件内容。此外程序还根据解析得到的文本内容调用机器学习模型生成对每篇文章的概述最终生成全文摘要。程序中还对模块依赖进行了导入检查若缺少依赖则会提供安装建议。
## [16/18] 程序摘要: crazy_functions/解析项目源代码.py
这个程序文件中包含了几个函数,分别是:
1. `解析源代码(file_manifest, project_folder, top_p, temperature, chatbot, history, systemPromptTxt)`通过输入文件路径列表对程序文件进行逐文件分析根据分析结果做出整体功能和构架的概括并生成包括每个文件功能的markdown表格。
2. `解析项目本身(txt, top_p, temperature, chatbot, history, systemPromptTxt, WEB_PORT)`对当前文件夹下的所有Python文件及其子文件夹进行逐文件分析并生成markdown表格。
3. `解析一个Python项目(txt, top_p, temperature, chatbot, history, systemPromptTxt, WEB_PORT)`对指定路径下的所有Python文件及其子文件夹进行逐文件分析并生成markdown表格。
4. `解析一个C项目的头文件(txt, top_p, temperature, chatbot, history, systemPromptTxt, WEB_PORT)`对指定路径下的所有头文件进行逐文件分析并生成markdown表格。
5. `解析一个C项目(txt, top_p, temperature, chatbot, history, systemPromptTxt, WEB_PORT)`:对指定路径下的所有.h、.cpp、.c文件及其子文件夹进行逐文件分析并生成markdown表格。
程序中还包含了一些辅助函数和变量如CatchException装饰器函数report_execption函数、write_results_to_file函数等。在执行过程中还会调用其他模块中的函数如toolbox模块的函数和predict模块的函数。
## [17/18] 程序摘要: crazy_functions/批量总结PDF文档.py
这个程序文件是一个名为“批量总结PDF文档”的函数插件。它导入了predict和toolbox模块并定义了一些函数包括is_paragraph_breaknormalize_text和clean_text。这些函数是对输入文本进行预处理和清洗的功能函数。主要的功能函数是解析PDF它打开每个PDF文件并将其内容存储在file_content变量中然后传递给聊天机器人以产生一句话的概括。在解析PDF文件之后该函数连接了所有文件的摘要以产生一段学术语言和英文摘要。最后函数批量处理目标文件夹中的所有PDF文件并输出结果。
## 根据以上你自己的分析对程序的整体功能和构架做出概括。然后用一张markdown表格整理每个文件的功能。
该程序是一个聊天机器人使用了OpenAI的GPT语言模型以及一些特殊的辅助功能去处理各种学术写作和科研润色任务。整个程序由一些函数组成每个函数都代表了不同的学术润色/翻译/其他服务。
下面是程序中每个文件的功能列表:
| 文件名 | 功能 |
|--------|--------|
| functional_crazy.py | 实现高级功能函数模板和其他一些辅助功能函数 |
| main.py | 程序的主要入口负责程序的启动和UI的展示 |
| functional.py | 定义各种功能按钮的颜色和响应函数 |
| show_math.py | 解析LaTeX文本将其转换为Markdown格式 |
| predict.py | 基础的对话功能用于与chatGPT进行交互 |
| check_proxy.py | 检查代理设置的正确性 |
| config_private.py | 配置程序的API密钥和其他私有信息 |
| config.py | 配置OpenAI的API参数和程序的其他属性 |
| theme.py | 设置程序主题样式 |
| toolbox.py | 存放一些辅助函数供程序使用 |
| crazy_functions/生成函数注释.py | 生成Python文件中所有函数的注释 |
| crazy_functions/读文章写摘要.py | 解析文章文本,生成中英文摘要 |
| crazy_functions/代码重写为全英文_多线程.py | 将中文代码内容转化为英文 |
| crazy_functions/高级功能函数模板.py | 实现高级功能函数模板 |
| crazy_functions/总结word文档.py | 解析Word文件生成文章内容的概要 |
| crazy_functions/批量总结PDF文档pdfminer.py | 解析PDF文件生成文章内容的概要使用pdfminer库 |
| crazy_functions/批量总结PDF文档.py | 解析PDF文件生成文章内容的概要使用PyMuPDF库 |
| crazy_functions/解析项目源代码.py | 解析C/C++源代码生成markdown表格 |
| crazy_functions/批量总结PDF文档.py | 对PDF文件进行批量摘要生成 |
总的来说,该程序提供了一系列的学术润色和翻译的工具,支持对各种类型的文件进行分析和处理。同时也提供了对话式用户界面,便于用户使用和交互。

View File

@ -1,14 +1,34 @@
import markdown, mdtex2html, threading, importlib, traceback, importlib, inspect
import markdown, mdtex2html, threading, importlib, traceback, importlib, inspect, re
from show_math import convert as convert_math
from functools import wraps
import re
def predict_no_ui_but_counting_down(i_say, i_say_show_user, chatbot, top_p, temperature, history=[], sys_prompt=''):
def get_reduce_token_percent(e):
try:
# text = "maximum context length is 4097 tokens. However, your messages resulted in 4870 tokens"
pattern = r"(\d+)\s+tokens\b"
match = re.findall(pattern, text)
eps = 50 # 稍微留一点余地, 确保下次别再超过token
max_limit = float(match[0]) - eps
current_tokens = float(match[1])
ratio = max_limit/current_tokens
assert ratio > 0 and ratio < 1
return ratio
except:
return 0.5
def predict_no_ui_but_counting_down(i_say, i_say_show_user, chatbot, top_p, temperature, history=[], sys_prompt='', long_connection=False):
"""
调用简单的predict_no_ui接口但是依然保留了些许界面心跳功能当对话太长时会自动采用二分法截断
i_say: 当前输入
i_say_show_user: 显示到对话界面上的当前输入例如输入整个文件时你绝对不想把文件的内容都糊到对话界面上
chatbot: 对话界面句柄
top_p, temperature: gpt参数
history: gpt参数 对话历史
sys_prompt: gpt参数 sys_prompt
long_connection: 是否采用更稳定的连接方式推荐
"""
import time
from predict import predict_no_ui
from predict import predict_no_ui, predict_no_ui_long_connection
from toolbox import get_conf
TIMEOUT_SECONDS, MAX_RETRY = get_conf('TIMEOUT_SECONDS', 'MAX_RETRY')
# 多线程的时候需要一个mutable结构在不同线程之间传递信息
@ -18,18 +38,26 @@ def predict_no_ui_but_counting_down(i_say, i_say_show_user, chatbot, top_p, temp
def mt(i_say, history):
while True:
try:
mutable[0] = predict_no_ui(inputs=i_say, top_p=top_p, temperature=temperature, history=history, sys_prompt=sys_prompt)
if long_connection:
mutable[0] = predict_no_ui_long_connection(inputs=i_say, top_p=top_p, temperature=temperature, history=history, sys_prompt=sys_prompt)
else:
mutable[0] = predict_no_ui(inputs=i_say, top_p=top_p, temperature=temperature, history=history, sys_prompt=sys_prompt)
break
except ConnectionAbortedError as e:
except ConnectionAbortedError as token_exceeded_error:
# 尝试计算比例,尽可能多地保留文本
p_ratio = get_reduce_token_percent(str(token_exceeded_error))
if len(history) > 0:
history = [his[len(his)//2:] for his in history if his is not None]
history = [his[ int(len(his) *p_ratio): ] for his in history if his is not None]
mutable[1] = 'Warning! History conversation is too long, cut into half. '
else:
i_say = i_say[:len(i_say)//2]
i_say = i_say[: int(len(i_say) *p_ratio) ]
mutable[1] = 'Warning! Input file is too long, cut into half. '
except TimeoutError as e:
mutable[0] = '[Local Message] Failed with timeout.'
raise TimeoutError
except Exception as e:
mutable[0] = f'[Local Message] Failed with {str(e)}.'
raise RuntimeError(f'[Local Message] Failed with {str(e)}.')
# 创建新线程发出http请求
thread_name = threading.Thread(target=mt, args=(i_say, history)); thread_name.start()
# 原来的线程则负责持续更新UI实现一个超时倒计时并等待新线程的任务完成
@ -56,6 +84,7 @@ def write_results_to_file(history, file_name=None):
with open(f'./gpt_log/{file_name}', 'w', encoding = 'utf8') as f:
f.write('# chatGPT 分析报告\n')
for i, content in enumerate(history):
if type(content) != str: content = str(content)
if i%2==0: f.write('## ')
f.write(content)
f.write('\n\n')
@ -269,7 +298,7 @@ def get_conf(*args):
# 正确的 API_KEY 是 "sk-" + 48 位大小写字母数字的组合
API_MATCH = re.match(r"sk-[a-zA-Z0-9]{48}$", r)
if API_MATCH:
print("您的 API_KEY 是: ", r, "\nAPI_KEY 导入成功")
print(f"您的 API_KEY 是: {r[:15]}*** \nAPI_KEY 导入成功")
else:
assert False, "正确的 API_KEY 是 'sk-' + '48 位大小写字母数字' 的组合请在config文件中修改API密钥, 添加海外代理之后再运行。" + \
"如果您刚更新过代码请确保旧版config_private文件中没有遗留任何新增键值"