Giter Club home page Giter Club logo

huangpengl / chatgpt-java-funai Goto Github PK

View Code? Open in Web Editor NEW
759.0 9.0 220.0 9.89 MB

ChatGPT Java 基于SpringBoot的后端开源web学习项目,FunAi。支持OpenAI官方所有接口。无限轮聊天 + 带上下文逻辑 + 流式输出 / 普通输出。PDF解析 + Embedding API+ 递归分词文段抽取 + 文本向量化 + 向量语义匹配 + 召回知识库相似文本匹配。接入文生图模型MidJourney / Stable Diffusion Model。智能客服/企业级知识库。APIKey额度精准查询 + 失效检测。AI游戏 + 专属于AI的社交平台

Home Page: https://funai.vip/

License: Apache License 2.0

Java 100.00%
chatgpt java springboot chatgpt-java chatgpt-api

chatgpt-java-funai's Introduction

🚀 FunAi - Based on ChatGPT and SpringBoot

声明:FunAi项目只发布于 GitHub,基于 Apache-2.0 协议,免费且作为开源学习使用,未经本人同意不可用于商业项目。欢迎加微信群个人微信号交流讨论。若有长期定制合作或者内部高级版使用意向请微信联系funaiboy或邮件[email protected]

致谢:感谢「三岁药哥」 和 「广大昊神」 对本项目在API访问上的支持;感谢相关合作伙伴对本项目的其他基础支持;感谢团队的四位成员贡献想法和代码@塔哥 @俊哥 @东哥 @伟哥

📖 简介

  • 欢迎来到FunAi的后端仓库,我们正在使用Java对现有AGI进行二次开发。
  • 目前的FunAi已经接入ChatGPT、GPT-4、MJ-V4和SD实现一些有意思的应用,详细请见【项目亮点】 和 【功能展示】🎊
  • 作为一个新颖的Java学习项目,你可以从【快速开始】和【技术栈】部分得到有效的信息🎉
  • FunAi网站 完全免费使用,欢迎进入FunAi一起玩耍吧😆

🤗 持续更新

FunAi线上项目

  • [TODO] 魔鬼社区 & 超越chatPDF的高级File咨询
  • [TODO] 迭代血球
  • [TODO] 人心镜面
  • [2023-06-18] 新增AI助手功能,支持多语言,大量预设prompt的专一领域的AI帮你解决问题。点击体验
  • [2023-06-18] PDF阅读可以上传word、excel、ppt等格式的文件。 点击体验
  • [2023-06-07] 新增Stable Diffusion画图功能。点击体验
  • [2023-06-07] 新增AI客服,24/7全天候服务,多语言支持,拟人化交互;新增人工客服。 点击体验
  • [2023-05-16] 聊天界面可画图,聊天内容包含前缀[画]即可触发该功能。点击体验
  • [2023-05-16] 文字游戏可生成场景图,点击聊天条目中右侧的图片按钮即可触发该功能。点击体验
  • [2023-05-13] 新增[PDF阅读-多文件版本] & 新增可选择对照多源文件功能。点击体验
  • [2023-05-13] 新增[PDF阅读-单文件]可对照源文件功能
  • [2023-05-07] 优化文生图模型MJ-V4,支持中文大白话描述。点击体验
  • [2023-05-06] 新增文生图模型(不支持中文)

本开源仓库

  • [2023-05-10] 修复文件名低于3个字符出现的服务错误问题
  • [2023-05-05] 修改apiKey轮询bug
  • [2023-05-03] 新增对openai免费Key限制所做的优化的轮询调度算法

➰ FunAi线上项目亮点

✅ ChatGPT聊天

  • 集成OpenAi API (ChatGPT3.5 + GPT4 + embedding)

  • 支持markdown格式,代码高亮,代码复制,公式和图表展示

  • 无限轮聊天 + 带上下文逻辑 (Guava Cache 优化响应时间)

  • 流式输出 / 普通输出

  • 多会话 + 记录存储 + 记录管理(新增/清空/删除)

  • 数据导出

  • 语音聊天 + 语音播放

  • 接入文生图模型(MidJourney / Stable Diffusion Model)

  • 大量多语言支持的AI助手

✅ PDF智能阅读(论文 / 简历 / 知识文档等)

  • 接入OpenAI的Embedding API,使用Pinecone/Milvus向量库存储向量。

  • PDF解析 + 递归分词文段抽取 + 文本向量化 + 向量语义匹配 + 召回知识库相似文本匹配

  • 大文件上传(目前线上项目暂时最多支持80页,实际可支持上千页)

  • 多会话 + 文件保存 + 记录存储 + 记录管理

  • 对照源文件阅读 + ChatGPT互动

  • 多源PDF上传,集成庞大知识库

  • 支持各种文件类型(Word、Excel、PPT、PDF等)

✅ AI客服

  • 多语言支持
  • 24/7全天候服务:无论是白天还是夜晚,AI客服都可以提供不间断的服务,满足用户随时随地的需求。
  • 拟人化交互,擅长用表情符号或动画来表达情感
  • 转接人工客服 TODO

✅ 智能画图

  • 接入MJ-V4和Stable Diffusion

  • 普通模式:用户输入端支持中文大白话描述,ChatGPT优化描述

  • 专业模式:插件式提供海量更适合模型的英文prompt

✅ 文字冒险游戏

  • 多主题设置

  • 游戏记录存储 + 按键互动

  • AI生成场景描述图片

  • TODO: 背景音乐 + 多游戏选择

✅ 语言专家

  • 多语翻译

  • 语法修改

✅ 账号管理

  • 游客登录(IP / 浏览器指纹)

  • 登录注册(手机号 / 账号密码 / 微信TODO)

  • 用户API-Key管理(用户可上传自己的API-Key,不受限制。否则使用系统的API-Key,会根据用户等级不同设置当日聊天限制)

  • 用户等级管理(普通用户、vip用户、管理员、游客)

✅ 提示库

  • 实时修改提示,动态影响系统相关内置功能

  • 全局多条件分页搜索

  • 提示库管理(权限管理 + 提示增删查改)

✅ 其它

  • 系统API-Key池管理(优化多账号轮询调度算法,突破免费账号5次/分钟限制)

  • API-Key额度查询 + 定时失效检测

  • 异步优化请求响应时间

  • 定时任务刷新缓存

  • OpenAI多模型选择 + 参数自定义

✅ 智能简历 TODO

  • ChatGPT智能分析简历

✅ 口语练习 TODO

  • 多种真人语音对话

✅ 魔鬼社区 TODO

  • 跟AI魔鬼无限互动吧

🔰 快速开始

🎈第零步:科学上网(全局模式) 或 海外服务器

🎈第一步:MySQL导入funai.sql文件

🎈第二步:必配项目 (在项目中全局搜 TODO关键字找到必配条目)

  • 配置application.properties

    • MySQL
    • Redis
    • 梦网云短信服务(无需手机注册功能可不填)
  • 配置向量库(二选一,推荐选Pinecone; 注意:openai embedding api的向量维度为1536)

    • Pinecone向量库(第三方)

      1. 去Pinecone申请apikey

        1.1 Pinecone官网 进入官网注册你的账号

        1.2 创建Index, 其中Pod Type可以自己选择

        1.3 在API Keys中可以找到你的API 密钥,还可以从仪表板检索您的环境和索引名称。(用户构建PINECONE_API_URL)

        1.4 Pinecone Http请求学习文档

      2. PineconeApi.java中完善以下信息

        private static final String PINECONE_API_URL = "https://xxxxxx.pinecone.io";
      3. 在MySQL数据库表admin_apikey中插入一条记录,type为4,name为Pinecone的apikey

        INSERT INTO `funai`.`admin_apikey` (`type`, `name`) VALUES (4, 'your pinecone apikey');
    • Milvus向量库(本地搭建)

      1. 搭建Milvus

      2. MilvusClientUtil.java中完善以下信息

        private static final MilvusServiceClient milvusClient = new MilvusServiceClient(
                    ConnectParam.newBuilder()
                            .withHost("xx.xx.xx.xx")
                            .withPort(19530)
                            .build());

🎈第三步:配置OpenAI的apikey

  1. 创建OpenAI账号,申请apikey
  2. 在MySQL数据库admin_apikey中插入一条记录,type为0,name为OpenAI的apikey;若该key为免费账号则is_free字段需要填写为1
INSERT INTO `funai`.`admin_apikey` (`type`, `name`, `is_free`) VALUES ('0', 'your openai apikey', '1');

🎈第四步:启动 FunAiApplication 或 在测试类TestChatService中测试chatOneShot方法

⚡ 技术栈

前端

FunAi前端仓库 暂时未开放,敬请期待~

后端

  • 主语言:Java(JDK 1.8)
  • 开发框架:SpringBoot
  • 核心技术:
    • 本地缓存Caffeine LoadingCache
    • SSE服务器发送事件
    • 算法(双端队列 + 滑动窗口 + 轮询负载均衡等)
    • Stream流
    • JUC
    • WebSocket
    • 锁机制
    • 定时任务
    • 拦截器(登录拦截/管理员权限/限流/功能限制)
    • 过滤器(跨域/全局日志)
    • 全局异常处理器
    • JWT用户鉴权
  • 数据库:MySQL 5.7、Pinecone、Milvus 2.2.5
  • 中间件:Redis 7.0.11, MyBatis-Plus
  • 对象存储: 阿里云OSS
  • 第三方API:Openai-ChatGPT、Openai-Embedding、梦网云短信服务、百度语音识别

部署

  • web 服务:Nginx
  • 海外服务器\本地全局科学上网

🤖 功能展示

✅ ChatGPT聊天

✅ 文生图

✅ PDF智能阅读(论文 / 简历 / 知识文档等)

✅ 文字冒险游戏

✅ AI客服

✅ 智能语言学家(更像人类的翻译官)

✅ 提示库

✅ 账号管理

✅ 智能简历 (TODO)

✅ 口语练习 (TODO)

🖋 参与贡献

🍺 赞助 & 合作

如果你认为我的项目对你很有帮助,而且情况允许的话,那么请考虑支持我的项目。我将非常感激任何的支持,哪怕只是一点点的资助,也能激励我持续开发和改进这个项目。

您可以通过以下几种方式支持我的项目:

  • 赞助我:您可以通过贡献资金来支持我的项目,这将帮助我支付服务器、工具和其他开发成本。您可以在下方找到资助方式。

  • 分享项目:如果您不能贡献资金,但是您认为我的项目非常有价值,那么请考虑分享项目链接给您的朋友和同事。这将有助于我的项目得到更多的关注和支持。如果可以请给一个小小的star!

  • 提供反馈:您可以通过提交Issues或者Pull Requests来帮助改进我的项目。如果您发现了任何错误或者您认为我的项目可以改进的地方,欢迎随时向我提供反馈。

  • 与我合作:如果您对该项目感兴趣,想加入我们或有定制化需,欢迎随时与我们联系。

总之,非常感谢您对我的项目的支持,我将努力不懈地改进和提高这个项目的质量,让它更好地为您和其他用户服务。

WeChat Pay:

Contact WeChat:

⏰ Star History

Star History Chart

📄 License

FunAi is licensed under the Apache-2.0 License. See the LICENSE file for more information.

免责声明 Disclaimers

The code is for demo and testing only. 代码仅用于演示和测试。用于商业用途,请联系授权并注明来源。

⚠⚠⚠请勿将本系统代码用于商业用途!

chatgpt-java-funai's People

Contributors

huangpengl avatar hudee666 avatar maomao12345678 avatar nagin-kim avatar xing-wei-zeng avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

chatgpt-java-funai's Issues

插入Pinecone向量库失败

你好,我在尝试使用Pinecone时调用接口出现Remote host terminated the handshake错误
在网上查阅之后加上System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2")也不太行;
请问怎么解决呢
image

响应速度太快了

大佬,我去访问了你们做的网站,聊天是秒回,我在openai官网聊天都没这么快,请问是怎么做到的

请问大佬在做文件的问答时,如何实现对批量上传的文件进行隔离

场景是我上传了 5 个文件,要对这五个文件进行问答,这五个文件是产品手册类型的,即产品手册 A, 产品手册 B,产品手册 C,产品手册 D,产品手册 E。然后我提问某个产品的某个属性值,例如“产品 A的电子特性”,我之前自己做的类似文档问答系统就会召回好几个产品的电子特性相关的切片,然后给LLM 去总结答案。但是对于 LLM 来说这些切片都是描述电子特性的,不能确定具体哪个是产品 A,所以一般会总结出混淆之后的错误答案。

我试了一下大佬的这个系统,发现总结的答案是做到了文件隔离的,也就是我问产品 A,返回的结果就只是产品 A 的内容,并没有受到其他同批上传的文件的影响,并且在回答中准确地给出来了文件来源。因为只是粗读了一下大佬的代码,并没有找到针对这个问题的处理。

请问能解答一下这个问题吗?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.