import pandas as pd from openai import OpenAI import requests import json import re from pic_read import pic_see from config import config_get,key_get import os # 全局变量在这里改写: max_length = 20 max_pic_see = 1 prompt_pic = config_get("prompt_pic") prompt_lora = config_get("prompt_lora") pro_good = "solo,cat ears,black_hair,black_eye," pro_bad = config_get("pro_bad") openrouter_key = key_get("openrouter") groq_key = key_get("groq") siliflow_key = key_get("siliflow") def AI_chat(group_id ,word ,prompt): """ 猫猫人格,输入群号获取聊天记录,输入问题获取对话对象,返回字符串 """ # 加载聊天记录 folder_path = '群聊记录' file_path = os.path.join(folder_path, str(group_id) + '.csv') df = pd.read_csv(file_path) recent = str("") recent_list = [] for i in range(len(df)): if i >= len(df ) -max_length: recent_list.append(str(df.loc[i ,'user_name'])) recent_list.append(str(df.loc[i, 'message'])) pic_num = 0 list_num = len(recent_list) for i in reversed(recent_list): list_num = list_num -1 if pic_num >= max_pic_see: break if str(i).startswith("图片内容:"): url = i[5:] recent_list[list_num] = "发送了一张图片," + str(pic_see(url)).replace("\n", "") pic_num +=1 for i in range(len(recent_list)): if i% 2 == 0: recent += recent_list[i] + ":" else: recent += recent_list[i] + "\n" print("-------------recent---------------") print(recent) messages = [{'role': 'system', 'content': prompt + recent}] messages.append({'role': 'user', 'content': word}) try: ans = groq_chat(messages) except Exception as e: ans = chat_deepseek_r1(messages) ans = ans.lstrip() ans = ans.lstrip("猫猫:") while True: if ans.endswith("\n") or ans.endswith(" "): ans = ans[:-1] else: break return ans def chat_deepseek_r1(messages): """ 备用对话通道,https://openrouter.ai/api/v1 """ client = OpenAI( base_url="https://openrouter.ai/api/v1", api_key=openrouter_key, ) model2 = "deepseek/deepseek-r1-distill-llama-70b:free" model = "deepseek/deepseek-r1:free" completion = client.chat.completions.create( extra_headers={ "HTTP-Referer": "", # Optional. Site URL for rankings on openrouter.ai. "X-Title": "", # Optional. Site title for rankings on openrouter.ai. }, model=model2, stream=False, messages=messages ) ans = completion.choices[0].message.content return ans def groq_chat(messages): """ 主对话通道,https://api.gxx12138.space/groq/v1 """ client = OpenAI( base_url="https://api.gxx12138.space/groq/v1", api_key=groq_key ) model = "deepseek-r1-distill-llama-70b" completion = client.chat.completions.create( model=model, stream=False, messages=messages ) ans = completion.choices[0].message.content return ans def siliflow_chat(messages): """ 备用对话通道,https://api.siliconflow.cn/v1' """ client = OpenAI( base_url='https://api.siliconflow.cn/v1', api_key=siliflow_key ) try: print("硅基模型正常运作") # 发送AI请求 # THUDM/glm-4-9b-chat google/gemma-2-9b-it response = client.chat.completions.create( model="THUDM/glm-4-9b-chat", messages=messages, stream=False, temperature=0.8, ) ans = response.choices[0].message.content except Exception as e: print("硅基模型爆了") ans = "" return ans # 根据群聊内近4条消息获取绘画提示词 def AI_get_picprompt(group_id): """ 群聊id自动获取群聊记录来获取绘画提示词 """ global pro_good # 加载聊天记录 folder_path = '群聊记录' file_path = os.path.join(folder_path, str(group_id) + '.csv') df = pd.read_csv(file_path) recent = "" for i in range(len(df) - 4, len(df)): recent += str(df.loc[i, 'user_name']) + ":" + str(df.loc[i, 'message']) + "\n" messages = [{'role': 'system', 'content': prompt_pic}] messages.append({'role': 'user', 'content': recent}) ans = groq_chat(messages) return pro_good + ans.strip().replace("\n", "") + "," def AI_lora_getpic_prompt(word): """ 群聊id自动获取群聊记录来获取绘画提示词 版本2 """ messages = [{'role': 'system', 'content': prompt_lora}] messages.append({'role': 'user', 'content': word}) ans = siliflow_chat(messages).replace(", ", ",") return ans.strip().replace("\n", "") + ","