Skip to content

Commit

Permalink
update some models
Browse files Browse the repository at this point in the history
  • Loading branch information
afanzaimoyu committed Mar 17, 2023
1 parent 73a2d94 commit 6a7a043
Show file tree
Hide file tree
Showing 9 changed files with 518 additions and 44 deletions.
25 changes: 21 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,25 @@ pip install -U pip
# 安装必要的依赖
pip install -r requirements.txt
```
3.`proxies` 中填入你自己的代理,如果需要的话
4.`api_key` 中填入你的key
3. 配置json文件
- `enable`配置群组id
- `key`配置你的key
- `proxies`配置你的代理,如果需要的话
- `initial_prompt`配置你的初始化描述


## 更新
- **2023.3.18**
- 更新`gpt.py` 将一些参数丢到了json文件中,方便修改
- 新建了`job_all.py` 创建了定时类型的任务
- 新建了`config.json` 配置了日志信息,群组权限,gpt参数
- 新建了`main.py` 程序主入口,定时消息模块,gpt模块
- 新建了`my_config.py` 读取配置信息
- 新建了`robot.py` wx机器人模块,待写
- 新建了`wcfree.md` 阅读大佬wcfree的源码



- **2023.3.17** 配置了chatgpt
1. 本来是打算用itcaht的,封麻了,只能再找轮子了
2. chatgpt支持上下文统计 ,还没弄,再了解一下
Expand All @@ -26,6 +40,9 @@ pip install -r requirements.txt


## 参考
- https://github.com/openai/openai-cookbook
- https://github.com/PlexPt/awesome-chatgpt-prompts-zh
- [openai使用指南](https://github.com/openai/openai-cookbook)
- [ChatGPT 中文调教指南](https://github.com/PlexPt/awesome-chatgpt-prompts-zh)
- [造轮子的大佬-wcfree](https://github.com/lich0821/WeChatFerry)
- [ChatGPT api + python+赛博女友](https://zhuanlan.zhihu.com/p/610731099)
- [群大佬的wxbot-基于itchat](https://github.com/c0rnP1ex/wxbot_w_gpt)
- 待更新
150 changes: 150 additions & 0 deletions config.json.template
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
{
"logging": {
"version": 1,
"disable_existing_loggers": false,

"formatters": {
"simple": {
"format": "时间: %(asctime)s 信息: %(message)s",
"datefmt": "%Y-%m-%d %H:%M:%S"
},

"error": {
"format": "时间: %(asctime)s 名称: %(name)s 日志级别: %(levelname)s 文件名: %(filename)s:-->:函数名称: %(funcName)s 行号: [%(lineno)d] : 信息: %(message)s"
}
},

"handlers": {
"console": {
"class": "logging.StreamHandler",
"level": "INFO",
"formatter": "simple",
"stream": "ext://sys.stdout"
},

"info_file_handler": {
"class": "logging.handlers.RotatingFileHandler",
"level": "INFO",
"formatter": "simple",
"filename": "wx_info.log",
"maxBytes": 10485760,
"backupCount": 20,
"encoding": "utf8"
},

"error_file_handler": {
"class": "logging.handlers.RotatingFileHandler",
"level": "ERROR",
"formatter": "error",
"filename": "wx_error.log",
"maxBytes": 10485760,
"backupCount": 20,
"encoding": "utf8"
}
},

"root": {
"level": "INFO",
"handlers": [
"console",
"info_file_handler",
"error_file_handler"
]
}
},

"groups": {
"enable": [
"24983317471@chatroom",
"22517807435@chatroom",
"43465388547@chatroom",
"25177746233@chatroom"
]
},

"chatgpt": {
"key": "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",
"proxies" : {
"http": "http://127.0.0.1:proxy",
"https": "http://127.0.0.1:proxy"
},
"timeout": "5",
"max_token_length": "1024",
"initial_prompt": "初始化你的描述"
}


}{
"logging": {
"version": 1,
"disable_existing_loggers": false,

"formatters": {
"simple": {
"format": "时间: %(asctime)s 信息: %(message)s",
"datefmt": "%Y-%m-%d %H:%M:%S"
},

"error": {
"format": "时间: %(asctime)s 名称: %(name)s 日志级别: %(levelname)s 文件名: %(filename)s:-->:函数名称: %(funcName)s 行号: [%(lineno)d] : 信息: %(message)s"
}
},

"handlers": {
"console": {
"class": "logging.StreamHandler",
"level": "INFO",
"formatter": "simple",
"stream": "ext://sys.stdout"
},

"info_file_handler": {
"class": "logging.handlers.RotatingFileHandler",
"level": "INFO",
"formatter": "simple",
"filename": "wx_info.log",
"maxBytes": 10485760,
"backupCount": 20,
"encoding": "utf8"
},

"error_file_handler": {
"class": "logging.handlers.RotatingFileHandler",
"level": "ERROR",
"formatter": "error",
"filename": "wx_error.log",
"maxBytes": 10485760,
"backupCount": 20,
"encoding": "utf8"
}
},

"root": {
"level": "INFO",
"handlers": [
"console",
"info_file_handler",
"error_file_handler"
]
}
},

"groups": {
"enable": [
"xxxxx@chatroom",
]
},

"chatgpt": {
"key": "填你自己的key",
"proxies" : {
"http": "http://127.0.0.1:proxy",
"https": "http://127.0.0.1:proxy"
},
"timeout": "5",
"max_token_length": "1024",
"initial_prompt": "初始化你的描述"
}


}
49 changes: 23 additions & 26 deletions gpt_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,32 +9,28 @@

import openai

proxies = {
'http': 'http://127.0.0.1:proxy',
'https': 'http://127.0.0.1:proxy'

}
openai.proxy = proxies

api_key = 'your_api_key'
openai.api_key = api_key

MAX_TOKEN_LENGTH = 1024
TIME_OUT = 3

MANAGE_ROLE = 'system' # 设定助手的行为
BOT_ROLE = 'assistant' # 当chatGPT忘记了上下文,就可以用来存储先前的响应,给chatGPT提供所需的行为实例
USER_ROLE = 'user' # 用户输入

initial_prompt = 'your initial prompt'

# 'system' 设定助手的行为
# 'assistant' 当chatGPT忘记了上下文,就可以用来存储先前的响应,给chatGPT提供所需的行为实例
# 'user' 用户输入

class GptThread:
"""
chatgpt
"""

def __init__(self):
def __init__(self, api_key: str, proxies: dict, time_out: int, max_token_length: int, initial_prompt: str):
"""
初始化
:param api_key:
:param proxies:
:param time_out:
:param max_token_length:
:param initial_prompt:
"""
self.initial_prompt = initial_prompt
self.time_out = time_out
self.max_token_length = max_token_length
openai.proxy = proxies
openai.api_key = api_key
self.msg = []
self.reset_msg()

Expand All @@ -48,8 +44,8 @@ def a_message_was_received_from_the_api(self):
model='gpt-3.5-turbo',
messages=self.msg,
temperature=1.0, # 0-2 越高回答越随机
max_tokens=MAX_TOKEN_LENGTH,
timeout=TIME_OUT,
max_tokens=self.max_token_length,
timeout=self.time_out,
)
resp = response['choices'][0]['message']['content']
return resp
Expand All @@ -61,6 +57,7 @@ def get_resp(self, prompt):
:return: resp: ChatGPT's reply(after processing)
"""
try:
print('开始调用gpt-3.5-turbo模型')
self.add_user_contet(prompt)
resp = self.a_message_was_received_from_the_api()
resp = resp[2:] if resp.startswith("\n\n") else resp
Expand All @@ -76,21 +73,21 @@ def reset_msg(self):
reset chatgpt msg
"""

self.msg = [{'role': MANAGE_ROLE, 'content': initial_prompt}]
self.msg = [{'role': 'system', 'content': self.initial_prompt}]

def add_bot_content(self, content):
"""
Add bot content to the chatgpt msg
:param content: the last round of conversation
"""
self.msg.append({'role': BOT_ROLE, 'content': content})
self.msg.append({'role': 'assistant', 'content': content})

def add_user_contet(self, content):
"""
Add user content to the chatgpt msg
:param content: user input
"""
self.msg.append({'role': USER_ROLE, 'content': content})
self.msg.append({'role': 'user', 'content': content})

def reset_system_content(self, content):
"""
Expand Down
98 changes: 98 additions & 0 deletions job_all.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
# -*- coding: utf-8 -*-
# @File : job_all.py
# @Time : 2023/3/17 23:42
# Author : 摸鱼呀阿凡
# Version : 1.0
# Contact : [email protected]
# License : MIT LICENSE

import time
import schedule
from typing import Any, Callable


class Job:

def __init__(self) -> None:
pass

def on_every_seconds(self, seconds: int, tasks: Callable[..., Any], *args, **kwargs) -> None:
"""
executed every x seconds
:param seconds: 时间间隔, 单位秒
:param tasks: 任务
:return: None
"""
schedule.every(seconds).seconds.do(tasks, *args, **kwargs)

def on_every_minutes(self, minutes: int, tasks: Callable[..., Any], *args, **kwargs) -> None:
"""
executed every x minutes
:param minutes: 时间间隔, 单位分钟
:param tasks: 任务
:return: None
"""
schedule.every(minutes).minutes.do(tasks, *args, **kwargs)

def on_every_hours(self, hours: int, tasks: Callable[..., Any], *args, **kwargs) -> None:
"""
Performed every x hours
:param hours: 时间间隔, 单位小时
:param tasks: 任务
:return: None
"""
schedule.every(hours).hours.do(tasks, *args, **kwargs)

def on_every_days(self, days: int, tasks: Callable[..., Any], *args, **kwargs) -> None:
"""
performed every x days
:param days: 时间间隔, 单位天
:param tasks: 任务
:return: None
"""
schedule.every(days).days.do(tasks, *args, **kwargs)

def on_every_time(self, times: str, tasks: Callable[..., Any], *args, **kwargs) -> None:
"""
executed once a day at x points
例子: times=["10:30", "10:45", "11:00"]
:param times: 时间间隔, 格式:
- For daily jobs -> HH:MM:SS or HH:MM
- For hourly jobs -> MM:SS or :MM
- For minute jobs -> :SS
:param tasks: 任务
:return: None
"""
if not isinstance(times, list):
times = [times]

for i in times:
"""
schedule库:
every(1) 表示设置任务的重复周期为1,即每隔1天执行一次任务。
.days 表示选择每隔1天执行任务的单位为天(如果设置为hours,则任务每隔1小时执行一次)。
.at(i) 表示任务的执行时间是在指定的t时间,例如:"09:00"。
.do(tasks, *args, **kwargs) 表示任务执行的名称和参数。
tasks是任务的名称,*args和**kwargs是任务的参数。
"""
schedule.every(1).day.at(i).do(tasks, *args, **kwargs)

def run_pending_jobs(self) -> None:
schedule.run_pending()


if __name__ == '__main__':
def print_str(s):
print(s)


job = Job()
job.on_every_seconds(1, print_str, "1秒")
job.on_every_minutes(59, print_str, " 59分钟")
job.on_every_hours(23, print_str, " 23小时")
job.on_every_days(1, print_str, " 1天")
job.on_every_time("10:00", print_str, "每天十点")

while True:
job.run_pending_jobs()
time.sleep(1)
Loading

0 comments on commit 6a7a043

Please sign in to comment.