add gitea workflow
This commit is contained in:
6
.dockerignore
Normal file
6
.dockerignore
Normal file
@ -0,0 +1,6 @@
|
||||
.git
|
||||
.gitea
|
||||
.gitignore
|
||||
Readme.md
|
||||
Dockerfile
|
||||
docker-compose.yml
|
||||
30
.gitea/workflows/deploy-workflow.yml
Normal file
30
.gitea/workflows/deploy-workflow.yml
Normal file
@ -0,0 +1,30 @@
|
||||
name: Gitea Actions Demo
|
||||
run-name: ${{ gitea.actor }} is testing out Gitea Actions 🚀
|
||||
on: [push]
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: gitea/runner-images:ubuntu-latest
|
||||
steps:
|
||||
- name: clone project code
|
||||
run: git clone ${{ gitea.server_url }}/${{ gitea.repository }} .
|
||||
- name: List files
|
||||
run: ls -la
|
||||
- name: Stop running containers
|
||||
run: |
|
||||
docker compose down || true
|
||||
- name: Remove old image
|
||||
run: |
|
||||
IMAGE_NAME=$(basename "$PWD")
|
||||
echo "Removing old image: $IMAGE_NAME"
|
||||
docker images | grep "$IMAGE_NAME" && docker rmi -f $(docker images "$IMAGE_NAME" -q) || echo "No old image found."
|
||||
- name: Build new image
|
||||
run: |
|
||||
docker build -t $(basename "$PWD"):latest .
|
||||
- name: Start containers
|
||||
run: |
|
||||
docker compose up -d
|
||||
- name: Show container status
|
||||
run: docker ps
|
||||
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
__pycache__
|
||||
19
Dockerfile
Normal file
19
Dockerfile
Normal file
@ -0,0 +1,19 @@
|
||||
# 使用官方轻量级 Python 基础镜像
|
||||
FROM python:3.12-slim
|
||||
|
||||
# 设置工作目录(容器内路径)
|
||||
WORKDIR /app
|
||||
|
||||
# 将项目文件复制到容器中
|
||||
COPY . /app
|
||||
|
||||
# (可选)如果你有 requirements.txt,则先复制并安装依赖
|
||||
RUN if [ -f requirements.txt ]; then \
|
||||
pip install --no-cache-dir -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/; \
|
||||
fi
|
||||
|
||||
# 设置环境变量(防止 Python 缓存文件)
|
||||
ENV PYTHONUNBUFFERED=1
|
||||
|
||||
# 启动命令
|
||||
CMD ["python", "peter.py"]
|
||||
155
deepseek.py
Normal file
155
deepseek.py
Normal file
@ -0,0 +1,155 @@
|
||||
from abc import ABC, abstractmethod
|
||||
from DrissionPage import Chromium, ChromiumOptions
|
||||
from DrissionPage.common import Keys
|
||||
from log.log_manager import log
|
||||
import time
|
||||
|
||||
|
||||
class ChatBot(ABC):
|
||||
def __init__(self, url):
|
||||
self.prompt = None
|
||||
co = ChromiumOptions().set_local_port(9222)
|
||||
self.browser = Chromium(co)
|
||||
self.tab = self.browser.new_tab()
|
||||
self.tab.get(url)
|
||||
|
||||
@abstractmethod
|
||||
def do_chat(self):
|
||||
"""抽象方法,由子类实现"""
|
||||
pass
|
||||
|
||||
def chat(self, prompt):
|
||||
self.prompt = prompt
|
||||
response = self.do_chat()
|
||||
self.close_tab()
|
||||
return response
|
||||
|
||||
def close_tab(self):
|
||||
"""关闭当前标签页"""
|
||||
if self.tab:
|
||||
self.tab.close()
|
||||
|
||||
def finish(self):
|
||||
"""关闭浏览器"""
|
||||
self.close_tab()
|
||||
if self.browser:
|
||||
self.browser.quit()
|
||||
|
||||
|
||||
# ====== 一个可运行的具体子类示例 ======
|
||||
class QwenChatBot(ChatBot):
|
||||
def do_chat(self):
|
||||
"""在 https://chat.qwen.ai/ 页面输入 prompt,按回车,等待结果"""
|
||||
# 1. 定位输入框(示例:textarea 或 input)
|
||||
log('正在浏览器打开新tab...')
|
||||
time.sleep(2)
|
||||
input_box = self.tab.ele('tag:textarea') or self.tab.ele('tag:input')
|
||||
if not input_box:
|
||||
log('未找到输入框')
|
||||
return []
|
||||
|
||||
# 2. 输入 prompt 并发送回车键
|
||||
input_box.input(self.prompt)
|
||||
log(f'prompt: {self.prompt}')
|
||||
input_box.input(Keys.ENTER)
|
||||
log('正在等待结果...')
|
||||
|
||||
|
||||
# 3. 等待响应加载
|
||||
sleep_time = 100
|
||||
while sleep_time > 0:
|
||||
log(f'等待结果加载中... 剩余时间:{sleep_time}s')
|
||||
if self.tab.ele('#send-message-button'):
|
||||
break
|
||||
time.sleep(1)
|
||||
sleep_time -= 1
|
||||
|
||||
# 4. 获取聊天内容
|
||||
response_content = self.tab.ele('#response-content-container').ele('tag:div').text
|
||||
log(f'获取结果成功:{response_content}')
|
||||
return response_content
|
||||
|
||||
|
||||
class DeepSeekChatBot(ChatBot):
|
||||
def do_chat(self):
|
||||
"""在 https://chat.deepseek.com/ 页面输入 prompt,按回车,等待结果"""
|
||||
# 1. 定位输入框(示例:textarea 或 input)
|
||||
log('正在浏览器打开新tab...')
|
||||
time.sleep(2)
|
||||
input_box = self.tab.ele('tag:textarea') or self.tab.ele('tag:input')
|
||||
if not input_box:
|
||||
log('未找到输入框')
|
||||
return []
|
||||
|
||||
# 2. 输入 prompt 并发送回车键
|
||||
input_box.input(self.prompt)
|
||||
log(f'prompt: {self.prompt}')
|
||||
input_box.input(Keys.ENTER)
|
||||
log('正在等待结果...')
|
||||
|
||||
|
||||
# 3. 等待响应加载
|
||||
sleep_time = 100
|
||||
while sleep_time > 0:
|
||||
log(f'等待结果加载中... 剩余时间:{sleep_time}s')
|
||||
# if self.tab.ele('tag:path@d^="M8.3125"'):
|
||||
if self.tab.html.__contains__('M8.3125'):
|
||||
break
|
||||
time.sleep(1)
|
||||
sleep_time -= 1
|
||||
|
||||
# 4. 获取聊天内容
|
||||
response_content = self.tab.ele('tag:div@class=ds-markdown').text
|
||||
log(f'获取结果成功:{response_content}')
|
||||
return response_content
|
||||
|
||||
if __name__ == '__main__':
|
||||
prompt = '''
|
||||
# 心理学每日一课
|
||||
|
||||
## 系统指令
|
||||
你是一位资深心理学教授,专精于将复杂的心理学概念转化为通俗易懂、生动实用的知识。你的任务是按照**严格的JSON格式**输出每日心理学知识点。
|
||||
|
||||
## 核心要求
|
||||
1. 输出必须是**纯净的JSON对象**,不包含任何额外的解释、问候或Markdown标记
|
||||
2. 严格遵循指定的JSON结构,键名和层级必须完全一致
|
||||
3. 内容应当:权威准确、贴近生活、启发思考、实用性强
|
||||
|
||||
## 内容规范
|
||||
- **知识点选择**:优先选择有实证基础、生活关联度高的核心概念
|
||||
- **难度级别**:保持在大众可理解范围内,避免过度专业术语
|
||||
- **案例真实性**:案例应基于真实心理现象,具有典型性和教育意义
|
||||
- **建议可行性**:行动建议应当具体、可操作、有针对性
|
||||
|
||||
## 输出格式
|
||||
```json
|
||||
{
|
||||
"metadata": {
|
||||
"topic_area": "知识点所属领域",
|
||||
"difficulty": "入门|中等|进阶",
|
||||
"date_context": "适用场景或时期"
|
||||
},
|
||||
"content": {
|
||||
"concept_name": "标准化的心理学概念名称",
|
||||
"core_explanation": {
|
||||
"definition": "清晰准确的定义描述",
|
||||
"mechanism": "心理机制或原理说明",
|
||||
"significance": "理论价值和现实意义"
|
||||
},
|
||||
"practical_application": {
|
||||
"case_study": "具体的生活情境案例",
|
||||
"psychological_analysis": "基于理论的案例分析",
|
||||
"warning_signs": "相关的警示信号或表现",
|
||||
"coping_strategies": "具体的应对或应用方法"
|
||||
},
|
||||
"learning_extensions": {
|
||||
"reflection_question": "促进行我觉察的反思问题",
|
||||
"action_step": "今日可执行的小行动",
|
||||
"related_concepts": ["相关概念1", "相关概念2"]
|
||||
}
|
||||
}
|
||||
}
|
||||
'''
|
||||
deepseek = DeepSeekChatBot('https://chat.deepseek.com/')
|
||||
content = deepseek.chat(prompt)
|
||||
log(content)
|
||||
7
docker-compose.yml
Normal file
7
docker-compose.yml
Normal file
@ -0,0 +1,7 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
app:
|
||||
image: peter:latest
|
||||
container_name: peter
|
||||
restart: always
|
||||
Reference in New Issue
Block a user