Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file added xiaohuiqi/xiao.py
Empty file.
48 changes: 48 additions & 0 deletions xiaohuiqi/xiaohuiqi.py
Original file line number Diff line number Diff line change
@@ -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})

150 changes: 150 additions & 0 deletions xiaohuiqi/结课作业.py
Original file line number Diff line number Diff line change
@@ -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()