24年年底,因为deepseekV3的爆火,我开始注意到这样一个来说性价比极高的大模型,于是第一时间将其接入了此前编写的QQ机器人插件中。最近几周,随着R1版本的发布,我又有了尝试本地部署蒸馏版本的想法(不过估计最多到14B Xp)。此外我也有一些让其对话风格更加近似于人类的想法,将在近期进行尝试。
from openai import OpenAI
from nonebot import on_command,on_message
from nonebot.rule import to_me
from nonebot.adapters import Message
from nonebot.params import CommandArg
import json,os
from dotenv import load_dotenv
# 加载.env文件中的环境变量
load_dotenv()
api_key = os.getenv("OPENAI_API_KEY", "default_key_if_not_set")
json_list = []
#echo = on_command('ds', priority=5)
echo = on_message(rule=to_me(), priority=5)
# for backward compatibility, you can still use `https://api.deepseek.com/v1` as `base_url`.
client = OpenAI(api_key=api_key, base_url="https://api.deepseek.com")
@echo.handle()
async def handle_first_receive(args: Message = CommandArg()):
with open('demo_bot/plugins/DeepSeek/deepseek_result.json', 'r', encoding= 'utf-8') as file:
json_list = json.load(file)
if len(json_list) == 11:
del json_list[1]
del json_list[1]
if len(json_list) == 0:
json_list = [{"role": "user","content":f"{args}"}]
else:
json_list.append({"role": "user","content":f"{args}"})
response = client.chat.completions.create(
model="deepseek-chat",
messages=json_list,
max_tokens=1024,
temperature=0.7,
stream=False
)
json_list.append({"role": "assistant","content": f"{response.choices[0].message.content}"})
with open('demo_bot/plugins/DeepSeek/deepseek_result.json', 'w', encoding= 'utf-8') as f:
f.write(f"{json.dumps(json_list,ensure_ascii=False)}")
await echo.finish(response.choices[0].message.content)
clean = on_command('cl', priority=5)
@clean.handle()
async def handle_first_receive():
with open('demo_bot/plugins/DeepSeek/deepseek_result.json', 'r', encoding= 'utf-8') as file:
json_list = json.load(file)
json_list = json_list[0]
with open('demo_bot/plugins/DeepSeek/deepseek_result.json', 'w', encoding= 'utf-8') as f:
f.write(f"[{json.dumps(json_list,ensure_ascii=False)}]")
await clean.finish("记忆已清除。")
role = on_command('role', priority=5)
@role.handle()
async def handle_first_receive(args: Message = CommandArg()):
with open('demo_bot/plugins/DeepSeek/deepseek_result.json', 'r', encoding= 'utf-8') as file:
json_list = json.load(file)
json_list[0] = {"role": "system", "content":f"{args}"}
with open('demo_bot/plugins/DeepSeek/deepseek_result.json', 'w', encoding= 'utf-8') as f:
f.write(f"{json.dumps(json_list,ensure_ascii=False)}")
await role.finish("已重设角色。")
此外,出于对diy一个自动对焦镜头的执念(当初一时冲动花了50r买了个球机镜头回来,现在还在吃灰),我又研究了自动对焦算法(然而由于极度缺乏专业知识,大部分都是看不懂的……),学习了如何调用人脸检测模型(在deep seek的帮助下),本着Ctrl+C/V的编程精神(),勉强拼凑出了一个理论验证版本,然而效果并不尽如人意。(详见下一条学习日志)