import openai import streamlit as st openai.api_key = st.secrets["OPENAI_API_KEY"] example_input = ''' 老师:这节课,我们就来一起认识一下Python最基础的3种数据类型。 没有很多,就3种,而且你基本都和他们打过照面了: - 整数(int) - 浮点数(float) - 字符串(str) ### 整数int 整数(integer) 其实非常简单,就等同于我们小学数学里学到的“整数”概念。 我们上次让你print(42),这个 42 就是整数类型的。 你可以对整数进行各种数学运算,就像我们试过的print(1+2) 一样。 Python中的运算符号如下 我们可以搞个稍微复杂点的式子让python算一下: ```python print((4+2)*3-8) ``` 你可以尝试运行一下,应该是秒出结果,结果是10 学生:没错。果然是数学学霸~ 老师:哈哈哈,没错。我们继续。 ''' example_output = '''· ```cleword - 发言: 谁: 思远 说: - 这节课,我们就来一起认识一下Python最基础的3种数据类型。 - 没有很多,就3种,而且你基本都和他们打过照面了: - 图片: 地址: https://siyuan-harry.oss-cn-beijing.aliyuncs.com/oss://siyuan-harry/20230916111933.png - 大纲: 标题: 整数int 等级: 2 - 图片: 地址: https://siyuan-harry.oss-cn-beijing.aliyuncs.com/oss://siyuan-harry/20230916221934.png - 发言: 谁: 思远 说: - 整数(integer) 其实非常简单,就等同于我们小学数学里学到的“整数”概念。 - 我们上次让你print(42),这个 42 就是整数类型的。 - 你可以对整数进行各种数学运算,就像我们试过的print(1+2) 一样。 - Python中的运算符号如下 - 图片: 地址: https://siyuan-harry.oss-cn-beijing.aliyuncs.com/oss://siyuan-harry/20230915181353.png - 发言: 谁: 思远 说: - 我们可以搞个稍微复杂点的式子让python算一下: - | ```python print((4+2)*3-8) ``` - 你可以尝试运行一下,应该是秒出结果,结果是10 - 发言: 谁: 学生 说: - 没错。果然是数学学霸~ - 发言: 谁: 思远 说: - 哈哈哈,没错。我们继续。 ``` ''' def get_completion_from_messages(messages, model="gpt-4-1106-preview", temperature=0): response = openai.ChatCompletion.create( model=model, messages=messages, temperature=temperature, # this is the degree of randomness of the model's output ) # print(str(response.choices[0].message)) return response.choices[0].message["content"] def generate_cleword(content): system_message = "你是一名优秀的课程文稿录入员,擅长把markdown格式的课程文稿,转化为一种叫做cleword的领域特定语言。" user_message = f""" 你是一名优秀的课程文稿录入员。我将给你markdown格式的课程文稿,请你帮助我把这种文稿转化为一种叫做cleword的领域特定语言。下面是一些转化的基本规则: cleword是一种基于yaml的,缩进敏感的领域特定语言。它被专门用来创作课程。 以下是某节课部分内容的cleword语法示例,这门课的内容演示了一个名叫思远的老师,教给名叫大乾的学生关于Python的变量的知识的场景。请注意其中出现的对于不同元素的语法规则和缩进,以及我给出的 “#” 号后面的语法注释: ```cleword - 发言: 谁: 思远 说: - ok,那现在请你在自己的电脑中打开python,我们开始接下来的学习✊✊ #cleword语法注释:在一个”发言“下面,每一个短杠 “ - ” 就代表一条对话消息 - 前面,我们学习了Python的print()函数和3种基本数据类型。这能够让Python把一些东西“说”给我们听。 - 图片: #cleword语法注释:请注意图片的语法。 地址: https://siyuan-harry.oss-cn-beijing.aliyuncs.com/oss://siyuan-harry/20231026105853.png - 问卷: #cleword语法注释:遇到选择题时,可以用这种语法。 类型: 单选 #cleword语法注释:类型可以是单选也可以是多选。 标题: 请对以下作出选择1 选项: - 第一项A - 第二项B - 第三项C 答案: #cleword语法注释:如果需要设置正确答案,则下面正确的答案要与上面的选项保持一致 - 第一项A 解析: | #cleword语法注释:答案的具体解析 正确答案是第一项哦 - 发言: 谁: 思远 说: - 但是目前,我们所有的程序都只是运行一步,把一个值打印出来。 - | #cleword语法注释:在“ - | ”的下面,可以在同一个对话消息内写符合markdown语法的内容 这对于更复杂的程序而言,肯定是不够用的。 - 数据如何在程序中被传递? - 如何实现多个步骤的程序? - 这些都是问题。 - 发言: 谁: 大乾 说: - 复杂的程序? - 发言: 谁: 思远 说: - 举个具体点例子来说, - 比如我们想用Python写一个进制转换的小程序,它能够自动把你输入进去的十进制进制的数字,转化为二进制数字。 - 这个程序的构架会大概长下面这样: - 图片: 地址: https://siyuan-harry.oss-cn-beijing.aliyuncs.com/oss://siyuan-harry/20231013113342.png - 发言: 谁: 思远 说: - 这里,我们需要 变量 来帮助这个程序做得更好。 - 大纲: #cleword语法注释:markdown文稿中的一二三级标题,都应当转换为cleword里的对应等级大纲 标题: 1 什么是变量 等级: 1 - 发言: 谁: 思远 说: - | 虽然变量是个非常重要的东西,但其实它一点都不难,很容易理解。 > 只要你用心去做! - | #cleword语法注释:在“ - | ”的下面,可以在同一个消息内写符合markdown语法的内容。比如这条消息中文字+Python代码块 多说无益,先来尝试运行一下下面这个代码: ```python weather = '今天的天气是多云转晴' print(weather) ``` - 还有下面这个: - | ```python number = -4 if number > 0: print("这是一个正数") print('123') ``` - 旁白: 请自己在本地的编辑器里手打出来,不要复制粘贴哦 #cleword语法注释:“旁白”的语法就是这样的 ``` 接下来,我将给你一个markdown版本的原始课程文稿。请你把它转化为cleword格式输出。 原始文稿:「{content}」 请你注意原始文稿里的markdown语法格式(如人物标记、图片、旁白标记、代码块等),并将原始文稿逐句地转化为符合cleword语法的格式。 """ messages = [ {'role':'system', 'content': system_message}, {'role':'user', 'content': user_message}, ] response = get_completion_from_messages(messages) return response def app(): st.title('''Markdown-to-Cleword v0.0.1 🎉''') col1, col2 = st.columns(2) with col1: script = st.text_area('请输入你想要转为cleword的markdown文稿:') btn = st.button('提交') with st.expander('输入示例'): st.text_area('', value = example_input, height=500) with st.expander('输出示例'): st.markdown(example_output) with col2: st.markdown('转化结果如下👇') if btn: cleword = generate_cleword(script) st.markdown(cleword) if __name__ == '__main__': app()