Spaces:
Runtime error
Runtime error
import openai | |
import streamlit as st | |
openai.api_key = st.secrets["OPENAI_API_KEY"] | |
example_input = ''' | |
老师:这节课,我们就来一起认识一下Python最基础的3种数据类型。 | |
没有很多,就3种,而且你基本都和他们打过照面了: | |
- 整数(int) | |
- 浮点数(float) | |
- 字符串(str) | |
<img src="https://siyuan-harry.oss-cn-beijing.aliyuncs.com/oss://siyuan-harry/20230916111933.png"/> | |
### 整数int | |
<img src="https://siyuan-harry.oss-cn-beijing.aliyuncs.com/oss://siyuan-harry/20230916221934.png"/> | |
整数(integer) 其实非常简单,就等同于我们小学数学里学到的“整数”概念。 | |
我们上次让你print(42),这个 42 就是整数类型的。 | |
你可以对整数进行各种数学运算,就像我们试过的print(1+2) 一样。 | |
Python中的运算符号如下 | |
<img src="https://siyuan-harry.oss-cn-beijing.aliyuncs.com/oss://siyuan-harry/20230915181353.png"/> | |
我们可以搞个稍微复杂点的式子让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() |