mirror of
				https://github.com/yangjian102621/geekai.git
				synced 2025-11-04 16:23:42 +08:00 
			
		
		
		
	feat: 定期保存 API KEY 的最后一次调用时间
This commit is contained in:
		
							
								
								
									
										31
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										31
									
								
								README.md
									
									
									
									
									
								
							@@ -1,20 +1,29 @@
 | 
			
		||||
# Wechat-GPT
 | 
			
		||||
# Chat-Plus 智能助手
 | 
			
		||||
 | 
			
		||||
基于 ChatGPT 的聊天应用
 | 
			
		||||
基于 OpenAI API 实现的 ChatGPT Web 应用,一共分为两个版本:
 | 
			
		||||
 | 
			
		||||
* 通用版:交互体验跟 ChatGPT 官方一致,聊天记录保存在客户端(浏览器)
 | 
			
		||||
* 角色版:内置了各种预训练好的角色,比如小红书写手,英语翻译大师,苏格拉底,孔子,乔布斯,周报助手等。轻松满足你的各种聊天和应用需求。
 | 
			
		||||
聊天记录保存在云端(可以配置是否保存聊天记录)
 | 
			
		||||
每个版本都有 PC 版和移动版,PC 版本的体验要略优于移动版。
 | 
			
		||||
 | 
			
		||||
**本项目基于 MIT 协议,免费开放全部源代码,可以作为个人学习使用或者商用。如需商用建议联系作者登记,仅做统计使用,优秀项目我们将在项目首页为您展示。**
 | 
			
		||||
 | 
			
		||||
## 项目功能介绍
 | 
			
		||||
 | 
			
		||||
## TODOLIST
 | 
			
		||||
 | 
			
		||||
* [x] 使用 level DB 保存用户聊天记录
 | 
			
		||||
* [x] 用户聊天鉴权,设置口令模式
 | 
			
		||||
* [x] 使用 level DB 保存用户,角色和聊天记录数据
 | 
			
		||||
* [x] 引入用户角色,添加用户聊天鉴权,设置口令模式
 | 
			
		||||
* [x] 定期清理不在线的会话 sessionID 和聊天上下文记录
 | 
			
		||||
* [x] 给 Token 设置调用次数
 | 
			
		||||
* [x] OpenAI API 负载均衡,限制每个 API Key 每分钟之内调用次数不超过 15次,防止被封
 | 
			
		||||
* [x] 角色设定,预设一些角色,比如程序员,客服,作家,老师,艺术家...
 | 
			
		||||
* [x] markdown 语法解析和代码高亮
 | 
			
		||||
* [x] 实现 markdown 语法解析和代码高亮,支持复制回复内容功能
 | 
			
		||||
* [ ] 用户配置界面,配置用户的使用习惯,可以让用户配置自己的 API KEY,调用自己的 API Key,将不记 Token 的使用次数
 | 
			
		||||
* [ ] **新增管理后台功能,实现用户,角色的动态管理**
 | 
			
		||||
* [ ] 嵌入 AI 绘画功能,支持根据描述词生成图片
 | 
			
		||||
* [x] 点卡用完之后,提示加入知识星球
 | 
			
		||||
* [ ] 增加 Buffer 层,将相同的问题答案缓存起来,相同问题直接返回答案。
 | 
			
		||||
* [ ] 界面改版,支持创建会话功能,支持发语音
 | 
			
		||||
* [x] 允许修改角色训练数据 
 | 
			
		||||
* [ ] 接入自己训练的开源大语言模型
 | 
			
		||||
* [ ] 接入 Google 语音 API,支持语音聊天
 | 
			
		||||
 | 
			
		||||
## 参与贡献
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -332,7 +332,12 @@ func (s *Server) getApiKey(failedKey string) string {
 | 
			
		||||
	rand.NewSource(time.Now().UnixNano())
 | 
			
		||||
	if len(keys) > 0 {
 | 
			
		||||
		key := keys[rand.Intn(len(keys))]
 | 
			
		||||
		key.LastUsed = time.Now().Unix()
 | 
			
		||||
		// 更新选中 Key 的最后使用时间
 | 
			
		||||
		for i, item := range s.Config.Chat.ApiKeys {
 | 
			
		||||
			if item.Value == key.Value {
 | 
			
		||||
				s.Config.Chat.ApiKeys[i].LastUsed = time.Now().Unix()
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return key.Value
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
 
 | 
			
		||||
@@ -143,6 +143,8 @@ func (s *Server) Run(webRoot embed.FS, path string, debug bool) {
 | 
			
		||||
					delete(s.ChatContexts, key)
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			// 保存配置文档
 | 
			
		||||
			_ = utils.SaveConfig(s.Config, s.ConfigPath)
 | 
			
		||||
			time.Sleep(time.Second * 5) // 每隔 5 秒钟清理一次
 | 
			
		||||
		}
 | 
			
		||||
	}()
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user