谷歌 Gemini 和 OpenAI chatGPT 聊天应用程序的 Java 实现
为了满足我的好奇心,并深入研究生成式人工智能,我着手开发了一个网页应用,让chatGPT和Google Gemini能够进行对话。在这个项目中,我广泛测试了它们的文本生成能力,最终合作创作出了一个引人入胜的儿童故事。下面的视频展示了该应用的演示,邀请您探索围绕着好奇狐狸Finley和他的朋友们展开的整个故事,共同冒险寻找“金橡果”:» https://youtu.be/_89g3ewq-SE.
通过使用相同的应用程序,并无缝转换为“童话故事创作者”到“谜语游戏”,两个AI之间进行一个引人入胜的谜语挑战,轮流提问。此外,在这个应用程序中,我们可以轻松地修改聊天的上下文,使得两个AI能够在无数其他主题上交谈。下面的视频展示了两个AI之间的“谜语游戏”的演示:https://youtu.be/x0YHRyR47rc。
在下一部分中,我将简要介绍用于实现此AI聊天应用的技术解决方案。所有的代码资源都可以在我的GitHub账户上找到:https://github.com/YahiaDev/AIChat。 为了开发这个应用程序,我使用了我最喜欢的编程语言Java,以及我最喜欢的后端框架Spring,和前端的Vue.js与Quasar。前端和后端通过STOMP over WebSocket进行通信。为了保持简洁并避免在本文中重复冗余,我不会详细介绍如何调用这两个AI服务的API的详细过程。然而,我会向您推荐两个优秀的教程,详细解释如何使用Java和Spring Boot与Google Gemini或OpenAI互动。
Google Gemini Calls:要与Google Gemini建立通信,我使用了Java Google Cloud库'google-cloud-vertexai',利用'gemini-pro-vision'模型。为了清晰地说明如何使用此库与Google Gemini进行交互并生成文本或描述图像,考虑以下有用的示例。»:https://glaforge.dev/posts/2023/12/13/get-started-with-gemini-in-java/。在聊天AI应用中,我定义了一个名为“GoogleGeminiService”的服务,它实现了所有的Google Gemini调用逻辑。我使用了一个简单的缓存“caffeineCache”(https://github.com/ben-manes/caffeine),通过chatSessionId来保存对话历史(由对象“ResponseHandler”管理)。我受制于对Gemini API的调用次数(每个项目每分钟限制为5次)。因此,我添加了Thread.sleep(4000)来减慢Gemini api的调用速度,避免超过接受的调用限制。
OpenAI ChatGPT调用:与OpenAI的ChatGPT交互,我使用Spring RestTemplate在https://api.openai.com/v1/chat/completions的OpenAI API上发起HTTP调用,使用“gpt-3.5-turbo-1106"。以下是一个有用的示例,说明如何使用Spring Boot实现对OpenAI API的调用:https://www.baeldung.com/spring-boot-chatgpt-api-openai在聊天AI应用中,我定义了OpenAIService来实现与OpenAI的交互逻辑,并像GoogleGeminiService一样,我实现了一个缓存来存储对话历史(由chatSessionId管理)的对象“OpenAIChatRequest”。
与前端和后端之间的交互:前端生成聊天会话ID(一个随机数),并将带有生成的聊天会话ID的通知发送给后端。后端启动一个新的聊天会话,依次调用两个人工智能,并将生成的消息推送到由人工智能源(openAI或googleGemini)和聊天会话ID定义的相应websocket网址。已订阅该套接字(AISource,chatsessionId)的前端将接收生成的消息并显示。在聊天提示参数中最初定义为“向Yahia Ammar问候”的双方人工智能之间的对话将继续,直到两者都说出这个词。
在调用两个人工智能时,一个关键的变量是“prompt”,它塑造了人工智能回应的背景,并指定了交互背景。精确地构建这个变量对于确保人工智能与我们的要求无缝对接是至关重要的。在聊天 AI 应用程序中,我在 OpenAIConfig 和 GoogleGeminiConfig 类中定义了两个提示(prompt)。所以您只需要更新这些变量就可以改变聊天的主题。
最后但并非最不重要的是,对我来说,开发这个应用是一次愉快的经历。它的主要目标是探索OpenAI和Google Gemini提供的文本生成能力。在整个项目中,我发现观察两个人工智能之间的互动非常有趣。第一个实例涉及到它们合作创作一部儿童故事,而第二个实例则让它们面对一个具有挑战性的游戏。
保持HTML结构,将以下英文文本翻译成简体中文: 在实施方面,由于使用了Java SDK库,与谷歌Gemini的交互比和OpenAI更容易而且更灵活。事实上,有时候对于OpenAI的响应序列化我遇到了问题。此外,由于对谷歌Gemini API的调用次数有限制,我被迫通过添加Thread.sleep(x)来减慢Gemini API的调用速度。通过这个应用,我们能够促进两个AI在无限的主题上进行对话,目睹它们的实时互动。