diff --git a/xiaohuiqi/xiao.py b/xiaohuiqi/xiao.py new file mode 100644 index 0000000..e69de29 diff --git a/xiaohuiqi/xiaohuiqi.py b/xiaohuiqi/xiaohuiqi.py new file mode 100644 index 0000000..1726819 --- /dev/null +++ b/xiaohuiqi/xiaohuiqi.py @@ -0,0 +1,48 @@ +import os +from openai import OpenAI + +api_key = os.getenv("OPENAI_API_KEY") +base_url = os.getenv("OPENAI_BASE_URL") + +client = OpenAI(api_key=api_key, base_url=base_url) + +messages = [ + {"role": "system", "content": "你是一个有用的助手。"} +] + +while True: + + if len(str(messages)) > 2000: + summary_prompt = "请用简短的话总结上面的对话内容:" + + try: + response = client.chat.completions.create( + model="ernie-x1.1-preview", + messages=[ + {"role": "system", "content": "你是一个总结助手。"}, + {"role": "user", "content": summary_prompt } + ], + max_tokens=300 + ) + + summary = response.choices[0].message.content + + messages = [ + {"role": "system", "content": "你是一个有用的助手。"}, + {"role": "system", "content": f"之前的对话总结:{summary}"} + ] + + + + try: + response = client.chat.completions.create( + model="ernie-x1.1-preview", + messages=messages, + max_tokens=1000 + ) + + assistant_reply = response.choices[0].message.content + print(f"助手: {assistant_reply}") + + messages.append({"role": "assistant", "content": assistant_reply}) + \ No newline at end of file diff --git "a/xiaohuiqi/\347\273\223\350\257\276\344\275\234\344\270\232.py" "b/xiaohuiqi/\347\273\223\350\257\276\344\275\234\344\270\232.py" new file mode 100644 index 0000000..7b462c0 --- /dev/null +++ "b/xiaohuiqi/\347\273\223\350\257\276\344\275\234\344\270\232.py" @@ -0,0 +1,150 @@ +import os +import time +import sqlite3 +import requests +from datetime import datetime +from openai import OpenAI + +API_KEY = "你的openai_api_key" +BASE_URL = "你的openai_base_url" +WEATHER_KEY = "你的高德天气api_key" + +client = OpenAI(api_key=API_KEY, base_url=BASE_URL) + +def init_db(): + conn = sqlite3.connect("chat_memory.db") + cursor = conn.cursor() + cursor.execute(''' + CREATE TABLE IF NOT EXISTS chat_history ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + content TEXT, + role TEXT, + time TEXT + ) + ''') + conn.commit() + conn.close() + +def save_chat(role, content): + conn = sqlite3.connect("chat_memory.db") + cursor = conn.cursor() + now = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + cursor.execute("INSERT INTO chat_history (role, content, time) VALUES (?, ?, ?)", (role, content, now)) + conn.commit() + conn.close() + +def get_chat_history(limit=10): + conn = sqlite3.connect("chat_memory.db") + cursor = conn.cursor() + cursor.execute("SELECT role, content FROM chat_history ORDER BY id DESC LIMIT ?", (limit,)) + history = cursor.fetchall()[::-1] + conn.close() + return history + +def get_time_info(): + now = datetime.now() + time_str = f"现在时间:{now.year}年{now.month}月{now.day}日 {now.hour}:{now.minute}:{now.second},星期{now.weekday()+1}" + return time_str + +def get_weather(city="北京"): + try: + url = f"https://restapi.amap.com/v3/weather/weatherInfo?city={city}&key={WEATHER_KEY}" + res = requests.get(url) + data = res.json() + if data["status"] == "1": + live = data["lives"][0] + weather_str = f"{live['city']}的天气:{live['weather']},温度{live['temperature']}℃,湿度{live['humidity']}%" + return weather_str + else: + return "天气查不到,可能城市错了" + except: + return "天气接口出问题了,我也不知道为啥" + +def summarize_chat(): + history = get_chat_history() + if not history: + return "还没聊天,没法总结" + + chat_text = "" + for role, content in history: + chat_text += f"{role}:{content}\n" + + try: + response = client.chat.completions.create( + model="ernie-x1.1-preview", + messages=[ + {"role": "system", "content": "你是总结小助手,简单总结下面的聊天内容,几句话就行"}, + {"role": "user", "content": chat_text} + ], + max_tokens=200 + ) + return response.choices[0].message.content + except: + return "总结失败了,可能API有问题" + +def chat(): + init_db() + + messages = [{"role": "system", "content": "你是一个好用的聊天助手,会回答问题,还能查时间、天气"}] + + print("===== 新手写的聊天助手 =====") + print("输入/时间 查当前时间,/天气 查北京天气,/总结 总结聊天记录,/退出 结束聊天") + + while True: + user_input = input("\n你:").strip() + + if user_input == "/退出": + print("助手:再见啦!") + break + + if not user_input: + print("助手:你说了啥?") + continue + + if user_input == "/时间": + time_info = get_time_info() + print(f"助手:{time_info}") + save_chat("user", user_input) + save_chat("assistant", time_info) + continue + + if user_input == "/天气": + weather_info = get_weather() + print(f"助手:{weather_info}") + save_chat("user", user_input) + save_chat("assistant", weather_info) + continue + + if user_input == "/总结": + summary = summarize_chat() + print(f"助手:总结一下咱们的聊天:{summary}") + save_chat("user", user_input) + save_chat("assistant", summary) + continue + + messages.append({"role": "user", "content": user_input}) + save_chat("user", user_input) + + if len(str(messages)) > 2000: + print("助手:总结一下之前的内容") + summary = summarize_chat() + messages = [ + {"role": "system", "content": "你是一个好用的聊天助手"}, + {"role": "system", "content": f"之前的聊天总结:{summary}"} + ] + + try: + response = client.chat.completions.create( + model="ernie-x1.1-preview", + messages=messages, + max_tokens=1000 + ) + reply = response.choices[0].message.content + print(f"助手:{reply}") + messages.append({"role": "assistant", "content": reply}) + save_chat("assistant", reply) + except Exception as e: + print(f"助手:出错了!错误信息:{e}") + +if __name__ == "__main__": + chat() \ No newline at end of file