当前位置: 首页 > news >正文

【GPT】基于GPT_API_free做一个自己的gpt

最终效果

在这里插入图片描述

项目背景

秉持能免费就绝不花钱的原则,基于github项目GPT_API_free获取的gpt apikey。下面是简单的代码

import json
import os
import requestsopenai_url = os.getenv("openaiproxy")
openai_apikey = os.getenv("openaikey")
# 初始化上下文
conversations_his = []# 添加上下文对话添加
def add_conversations_his(role,content):conversations_his.append({"role": role, "content": content})def generate_code(user_input:str):add_conversations_his("user", user_input)header = {"Content-Type": "application/json","Authorization": "Bearer " + openai_apikey}body = {"model": "gpt-4o-mini","messages": conversations_his}# ai返回的信息resp = requests.post(url=openai_url,headers=header,data=json.dumps(body))# 提取ai恢复中的msg并将其添加到历史对话中ai_msg = resp.json()["choices"][0]["message"]["content"]add_conversations_his("assistant",ai_msg)if resp.status_code == 200:# print(f"历史对话: {conversations_his}")return ai_msgelse:print(f"请求失败: {resp.status_code}")def conversations():# with open("prompt\\system_prompt","r",encoding="utf-8") as f:#     content =f.read()#     add_conversations_his("system",content)while True:user_msg = input("You: ")if user_msg.lower() in ["退出","exit","quit","q"]:breakai_respmsg = generate_code(user_msg)print(f"GPT: {ai_respmsg}")if __name__ == "__main__":conversations()

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 服务器死机/无故宕机排查思路/服务器起不来
  • 一篇搞懂classpath,resources
  • 【STM32H743】将全局变量定义到指定内存MDK
  • 设计模式--装饰器模式
  • python脚本开头怎么写
  • 【零知识证明】MiMC哈希函数电路
  • 罗素悖论 是集合论中的一个经典悖论
  • 【C语言】十六进制、二进制、字节、位
  • 【论文阅读】Single-Stage Visual Query Localization in Egocentric Videos
  • 一键编译QT5源码脚本(交叉编译arm64、mips64版本)
  • 春秋云镜(ZZCMS 2023)·CVE-2023-50104
  • 深入探究Nginx中的URL哈希负载均衡策略
  • 引用和类型强转
  • Java算法之快速排序(Quick Sort)
  • AMD Zen 5 微架构及其市场策略
  • 【347天】每日项目总结系列085(2018.01.18)
  • 【mysql】环境安装、服务启动、密码设置
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • CSS相对定位
  • Java基本数据类型之Number
  • Js基础——数据类型之Null和Undefined
  • js正则,这点儿就够用了
  • Linux下的乱码问题
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • 闭包--闭包之tab栏切换(四)
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 基于webpack 的 vue 多页架构
  • 精彩代码 vue.js
  • 使用 @font-face
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 听说你叫Java(二)–Servlet请求
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (1)Hilt的基本概念和使用
  • (4)事件处理——(7)简单事件(Simple events)
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (javaweb)Http协议
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (二)WCF的Binding模型
  • (附源码)计算机毕业设计大学生兼职系统
  • (黑马C++)L06 重载与继承
  • (每日一问)设计模式:设计模式的原则与分类——如何提升代码质量?
  • (详细文档!)javaswing图书管理系统+mysql数据库
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .mp4格式的视频为何不能通过video标签在chrome浏览器中播放?
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET Framework 4.6.2改进了WPF和安全性
  • .NET 设计模式初探
  • .NET 设计一套高性能的弱事件机制
  • .net 无限分类
  • ?php echo ?,?php echo Hello world!;?
  • @kafkalistener消费不到消息_消息队列对战之RabbitMq 大战 kafka