给GPT装上翅膀——通过MagicGPT,你可以让GPT随时随地按需访问本地方法、Restful API接口、常见搜索引擎、指定URL地址的网页、关系型数据库、向量数据库等。
2023年3月随着OpenAI发布了基于GPT-3.5的ChatGPT,大语言模型(LLM)点燃了AI时代的导火索。本人非常期待AI时代的成熟期到来,届时生产力将前所未有的发达,大家可以有很多的时间做自己喜欢的事情,探索人生的意义。在这之前,各类编程语言的GPT开放式框架应当被提供出来供工程师们使用,以便各行各业的软件开发者可以逐步使用AI来优化特定的场景。
本框架是为Java编程者提供的,也欢迎其他语言的开发者们可以共同探讨其他语言的MagicGPT解决方案,如果您有兴趣,可以通过QQ群联系我们。
功能点 | 是否支持 | 支持版本 |
---|---|---|
本地方法 | YES | >=1.0.0 |
Restful接口 | YES | >=1.0.0 |
网页访问 | YES | >=1.0.0 |
百度搜索引擎 | YES | >=1.0.0 |
关系型数据库访问 | 待实现 | - |
向量数据库访问 | 待实现 | - |
为了帮助大家更好地理解MagicGPT的设计思路,我们采用了通俗易懂的魔法世界机制,如下图所示:
大家可以从代码中找到对应的一些类名,一看便知其意。正如所有的魔法世界中描绘的一样:
- 每一本魔法书都记载了不同的魔法咒语。
- 每个魔法师都会有一本自己的魔法书。
- 魔法师念出咒语,咒语被执行的过程由这个魔法世界机制的魔法管理器来实现,当然,这个点在故事里并不会被提及。
以上可以帮助大家快速理解各个类的关系和作用。在使用时需要注意:
- “对话魔法师(ChatWizard)”就是指学习了咒语的GPT AI虚拟机器人。
- 一个魔法师本质上绑定了一系列的咒语,不同的魔法师所绑定的咒语也是不一样的。
- 每个魔法师都可以为一个上下文补足新的一个AI回答。
- 当你要求魔法师基于一个对话上下文进行回答生成时,需要指定一个输出流。
目前MagicGPT仅提供了流式返回,原因是同步返回实在太太太慢了。
下面示例代码演示了一个基本的使用流程。 如果需要可运行的代码,查看TestTimeReporter.java
准备工作: 确保程序已经启动了本地配置管理框架anole-loader,具体用法参考anole-loader; 这是一个傻瓜式本地配置管理框架,几乎可以访问任何位置的kv配置,而无需关心定义文件在哪里。
如果您没有配置JitPack仓库,需要在项目的pom.xml中加上:
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
也可以在.m2/settings.xml中配置
然后引入MagicGPT包:
<dependency>
<groupId>com.github.tbwork</groupId>
<artifactId>MagicGPT</artifactId>
<version>${version}</version>
</dependency>
Gradle,SBT,Leiningen等其他包管理方式参考: https://jitpack.io/#tbwork/MagicGPT
将OPENAI_API_KEY配置到系统环境中。以下是不同操作系统设置环境变量的方法:
Windows
打开“控制面板”,选择“系统和安全”>“系统”>“高级系统设置”。
在“系统属性”对话框中,选择“高级”选项卡,然后在“环境变量”下点击“环境变量”按钮。
在“环境变量”对话框中,可以添加、编辑和删除用户变量和系统变量。
若要添加一个新的系统变量,选择“新建”按钮,输入变量名和变量值,然后点击“确定”。
MacOS
在 macOS 中,打开“终端”应用程序。
输入以下命令:nano ~/.bash_profile,然后按 Enter 键。
在文本编辑器中,可以添加、编辑和删除环境变量。
添加完毕后,按 Control + O 键保存,然后按 Control + X 键退出。
Linux
在 Linux 中,打开终端应用程序。
输入以下命令:nano ~/.bashrc,然后按 Enter 键。
在文本编辑器中,可以添加、编辑和删除环境变量。
添加完毕后,按 Control + O 键保存,然后按 Control + X 键退出。
当然也可以在任意.anole文件、.properties文件中定义(这种方法不推荐,会带来数据安全问题)。
// 创建MagicGPT:指定包名搜索本地Call类型咒语
MagicGPT magicGPT = new MagicGPT("<package name>", "时间播报员", AIWizardType.GPT4);
// 加载自定义提示词
String customSystemPrompt = "你是一个时间播报员,随时按照用户的需求播报时间。";
// 创建聊天
Chat magicChat = magicGPT.startChat("你好,我是时间播报员!", customSystemPrompt, Language.CHINESE);
输出到控制台:
// 用户输入一句话,推进一个聊天,指定控制台输出流
magicGPT.proceedChatWithUserMessage(input, magicChat, new SystemOutputStream());
输出到HttpResponse:
OutputStream outputStream = response.getEntity().getContent();
// 用户输入一句话,推进一个聊天,指定HttpResponse输出流
magicGPT.proceedChatWithUserMessage(input, magicChat, outputStream);
完整的可运行代码在src/test/java的cn.lanehub.ai.examples下。
运行效果图:
- 确定自己已经完全理解了MagicGPT的魔法世界机制。
- 欢迎任何形式的贡献:ISSUE建议、Pull Request、加群建议等。
- 如果想要在本仓库改动代码,请先创建相关ISSUE,然后再提交Pull Request。
- 不要将任何隐私数据暴露到代码中,我们对数据泄露无法担负任何责任。
本项目遵循 MIT 开源许可。