From 6024b249f2b1c96c37430a75c4dac8b9ca57845d Mon Sep 17 00:00:00 2001 From: HuangHai <10402852@qq.com> Date: Tue, 4 Mar 2025 14:38:52 +0800 Subject: [PATCH] 'commit' --- AI/A1_Flask.py | 6 +- AI/A1_GenerateMarkdown.py | 2 +- AI/AiService/TestStream.py | 65 ++++++++ AI/Ylt/Config.py | 2 +- AI/Ylt/PaiCheng.py | 3 - AI/Ylt/__pycache__/Config.cpython-310.pyc | Bin 296 -> 296 bytes AI/Ylt/__pycache__/PaiCheng.cpython-310.pyc | Bin 0 -> 3138 bytes AI/Ylt/__pycache__/Upload.cpython-310.pyc | Bin 0 -> 6564 bytes .../9e982564-6cfd-47ab-8c65-ecc433280162.md | 140 ++++++++++++++++++ 9 files changed, 212 insertions(+), 6 deletions(-) create mode 100644 AI/AiService/TestStream.py create mode 100644 AI/Ylt/__pycache__/PaiCheng.cpython-310.pyc create mode 100644 AI/Ylt/__pycache__/Upload.cpython-310.pyc create mode 100644 AI/md-file/readme/9e982564-6cfd-47ab-8c65-ecc433280162.md diff --git a/AI/A1_Flask.py b/AI/A1_Flask.py index 5333ae00..82644efe 100644 --- a/AI/A1_Flask.py +++ b/AI/A1_Flask.py @@ -121,4 +121,8 @@ def check_task(guid): if __name__ == '__main__': - app.run(host='0.0.0.0', port=6000, threaded=True) \ No newline at end of file + app.run(host='0.0.0.0', port=6000, threaded=True) + +''' +curl -X POST http://10.10.21.20:6000/submit -H "Content-Type: application/json" -d '{"course_name": "小学数学三角形内角和"}' +''' diff --git a/AI/A1_GenerateMarkdown.py b/AI/A1_GenerateMarkdown.py index 8d472652..de853e80 100644 --- a/AI/A1_GenerateMarkdown.py +++ b/AI/A1_GenerateMarkdown.py @@ -61,7 +61,7 @@ class MarkdownGenerator: {"role": "user", "content": f"请生成《{self.course_name}》教学大纲"} ], stream=True, - timeout=30 # 设置超时时间 + timeout=100 # 设置超时时间 ) def run(self) -> bool: diff --git a/AI/AiService/TestStream.py b/AI/AiService/TestStream.py new file mode 100644 index 00000000..6567ad17 --- /dev/null +++ b/AI/AiService/TestStream.py @@ -0,0 +1,65 @@ +from fastapi import FastAPI +from fastapi.responses import StreamingResponse, PlainTextResponse +import time +import socket + +app = FastAPI() + +# 获取本机所有 IPv4 地址 +def get_local_ips(): + ips = [] + hostname = socket.gethostname() + try: + # 获取所有 IP 地址 + addrs = socket.getaddrinfo(hostname, None, family=socket.AF_INET) # 只获取 IPv4 地址 + for addr in addrs: + ip = addr[4][0] + if ip not in ips: + ips.append(ip) + except Exception as e: + print(f"获取 IP 地址失败: {e}") + return ips + +# 模拟逐字生成数据的函数(SSE 格式) +def generate_data(text): + for char in text: + time.sleep(0.1) # 模拟延迟 + yield f" {char}".encode("utf-8") # 按照 SSE 格式返回数据 + +# 根路由,返回提示信息 +@app.get("/") +def root(): + return PlainTextResponse("Hello ApiStream") + +# 流式返回数据(SSE) +@app.get("/stream") +def stream_data(): + text = "你好,这是一个流式返回数据的示例。这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例这是一个流式返回数据的示例" + return StreamingResponse( + generate_data(text), + media_type="text/event-stream", # 使用 text/event-stream + headers={ + "Cache-Control": "no-cache", # 禁用缓存 + "Connection": "keep-alive", # 保持连接 + "Access-Control-Allow-Origin": "*", # 允许跨域 + "X-Accel-Buffering": "no" # 禁用 Nginx 缓冲(如果有代理) + } + ) + +# 运行应用 +if __name__ == "__main__": + import uvicorn + + # 获取本机所有 IPv4 地址 + ips = get_local_ips() + if not ips: + print("无法获取本机 IP 地址,使用默认地址 127.0.0.1") + ips = ["127.0.0.1"] + + # 打印所有 IP 地址 + print("服务将在以下 IP 地址上运行:") + for ip in ips: + print(f"http://{ip}:8000") + + # 启动 FastAPI 应用,绑定到所有 IP 地址 + uvicorn.run(app, host="0.0.0.0", port=8000) \ No newline at end of file diff --git a/AI/Ylt/Config.py b/AI/Ylt/Config.py index 85bef09c..ab7cd14d 100644 --- a/AI/Ylt/Config.py +++ b/AI/Ylt/Config.py @@ -1,5 +1,5 @@ # 隐藏浏览器 -# HEADLESS = True +#HEADLESS = True HEADLESS = False # 素材的固定文件夹名称 MATERIAL_FOLDER_NAME = '播报充电情况' diff --git a/AI/Ylt/PaiCheng.py b/AI/Ylt/PaiCheng.py index b745aa88..73e2df5a 100644 --- a/AI/Ylt/PaiCheng.py +++ b/AI/Ylt/PaiCheng.py @@ -145,9 +145,6 @@ def run(playwright: Playwright) -> None: # 登录 login(page) - # 切换到节目 - changeJieMu(page) - # 排程 paiCheng(page, PREFIX_NAME, '12', '00', '00', '13', '00', '00') diff --git a/AI/Ylt/__pycache__/Config.cpython-310.pyc b/AI/Ylt/__pycache__/Config.cpython-310.pyc index a5181a53dfaecf922d91e5c827a9805c335b5ce4..e4ba8b6b62bfdb09b7586e4c49e05966b4152d25 100644 GIT binary patch delta 22 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 literal 0 HcmV?d00001 diff --git a/AI/md-file/readme/9e982564-6cfd-47ab-8c65-ecc433280162.md b/AI/md-file/readme/9e982564-6cfd-47ab-8c65-ecc433280162.md new file mode 100644 index 00000000..4e7ecb9d --- /dev/null +++ b/AI/md-file/readme/9e982564-6cfd-47ab-8c65-ecc433280162.md @@ -0,0 +1,140 @@ +--- +Title: 《哈哈哈》教学大纲 +Author: 东师理想 + +Date: 2025.02.14 +--- + +# 课程介绍 + +## 课程目标 + +> 本课程旨在帮助学生掌握《哈哈哈》的核心概念和实际应用 + +- 理解《哈哈哈》的基本原理 +- 掌握《哈哈哈》的实际应用技巧 +- 能够在实际项目中应用《哈哈哈》 + +## 课程内容 + +> 本课程将涵盖《哈哈哈》的多个方面,从基础到高级应用 + +- 《哈哈哈》的基础知识 +- 《哈哈哈》的核心概念 +- 《哈哈哈》的实际应用案例 +- 《哈哈哈》的未来发展趋势 + +# 课程安排 + +## 第一周:基础知识 + +> 第一周将介绍《哈哈哈》的基础知识 + +- 什么是《哈哈哈》 +- 《哈哈哈》的历史发展 +- 《哈哈哈》的基本原理 + +## 第二周:核心概念 + +> 第二周将深入探讨《哈哈哈》的核心概念 + +- 《哈哈哈》的核心理论 +- 《哈哈哈》的关键技术 +- 《哈哈哈》的实践方法 + +## 第三周:实际应用 + +> 第三周将通过案例学习《哈哈哈》的实际应用 + +- 《哈哈哈》在项目中的应用 +- 《哈哈哈》的案例分析 +- 《哈哈哈》的优化策略 + +## 第四周:未来趋势 + +> 第四周将展望《哈哈哈》的未来发展趋势 + +- 《哈哈哈》的未来发展方向 +- 《哈哈哈》的技术创新 +- 《哈哈哈》的应用前景 + +# 课程资源 + +## 参考书籍 + +> 以下是本课程的参考书籍 + +- 《哈哈哈基础教程》 +- 《哈哈哈高级应用》 +- 《哈哈哈案例分析》 + +## 在线资源 + +> 以下是本课程的在线资源 + +- 《哈哈哈》官方文档 +- 《哈哈哈》在线课程 +- 《哈哈哈》社区论坛 + +# 考核方式 + +## 作业 + +> 每节课后都会有相应的作业 + +- 每周完成一次作业 +- 作业内容包括理论题和实践题 + +## 项目 + +> 课程结束时需要完成一个项目 + +- 项目主题自选 +- 项目需应用《哈哈哈》的知识 +- 项目需提交报告和演示文稿 + +## 考试 + +> 课程结束时会有一次期末考试 + +- 考试内容包括理论和实践 +- 考试形式为笔试和上机操作 + +# 联系方式 + +## 教师信息 + +> 以下是本课程的教师信息 + +- 教师姓名:张三 +- 邮箱:zhangsan@example.com +- 办公室:东师理想大楼201 + +## 助教信息 + +> 以下是本课程的助教信息 + +- 助教姓名:李四 +- 邮箱:lisi@example.com +- 办公室:东师理想大楼202 + +# 课程反馈 + +## 反馈渠道 + +> 学生可以通过以下渠道提供课程反馈 + +- 课程论坛 +- 教师邮箱 +- 课程问卷调查 + +## 反馈时间 + +> 课程反馈将在每节课后进行收集 + +- 每节课后提供反馈 +- 课程结束时进行总结反馈 + +--- + +以上是《哈哈哈》教学大纲的详细内容,学生可以根据大纲安排学习计划,并积极参与课程的各项活动。 \ No newline at end of file