Files
peter/deepseek.py
2025-11-12 20:53:23 +08:00

156 lines
5.1 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)