对接chatGPT

简介: 对接chatGPT

人不能制情欲,则被情欲所制。——贺拉斯

今天使用forest对接chatGPT

https://forest.dtflyx.com/

chatGPT的api文档:https://platform.openai.com/docs/api-reference/making-requests

import com.dtflys.forest.Forest;
import com.dtflys.forest.http.ForestProxy;
import lombok.extern.slf4j.Slf4j;
import lombok.val;
import org.dromara.hutool.core.text.StrUtil;
import org.dromara.streamquery.stream.core.collection.Lists;
import org.dromara.streamquery.stream.core.collection.Maps;
import org.dromara.streamquery.stream.core.stream.Steam;
import java.util.Map;
import java.util.Objects;
/**
 * {@code
 * curl https://api.openai.com/v1/chat/completions \
 * -H "Content-Type: application/json" \
 * -H "Authorization: Bearer $APP_KEY" \
 * -d '{
 * "model": "gpt-3.5-turbo",
 * "messages": [{"role":"system","content":"translate english to chinese"},{"role": "user", "content": "Hello, my name is John. What is your name?"}],
 * "temperature": 0.7
 * }'
 * }
 */
@Slf4j
public class ChatGPTUtil {
    private static final ChatGPTProperties properties = SpringContextHolder.getBean(ChatGPTProperties.class);
    public static String translate(LanguageTypeEnum source, LanguageTypeEnum target, String content) {
        if (Objects.isNull(source) || Objects.isNull(target)) {
            return "";
        }
        if (StrUtil.isBlank(content)) {
            return "";
        }
        val prompt = StrUtil.format("translate {} to {}", source.getLocale().getLanguage(), target.getLocale().getLanguage());
        return request(prompt, content);
    }
    public static String request(String prompt, String completion) {
        if (StrUtil.isBlank(completion)) {
            return "";
        }
        val messages = Lists.<Map<String, Object>>of();
        if (StrUtil.isNotBlank(prompt)) {
            messages.add(Maps.of("role", "system", "content", prompt));
        }
        messages.add(Maps.of("role", "user", "content", completion));
        val request = Forest.post("https://api.openai.com/v1/chat/completions")
                .setConnectTimeout(properties.getTimeout()).setReadTimeout(properties.getTimeout())
                .addHeader("Authorization", "Bearer " + properties.getApiKey())
                .contentTypeJson()
                .addBody(Maps.of("model", properties.getModel(), "messages", messages));
        if (properties.getIsProxy()) {
            request.setProxy(new ForestProxy("127.0.0.1", 7890));
        }
        val chatCompletion = request.execute(ChatCompletion.class);
        log.info("{}", chatCompletion);
        return Steam.of(chatCompletion.getChoices())
                .map(ChatCompletion.Choice::getMessage).map(ChatCompletion.Message::getContent).join();
    }
}
相关文章
|
7月前
|
自然语言处理 Kubernetes 机器人
基于OpenIM 实现聊天机器人功能
基于OpenIM 实现聊天机器人功能
221 0
|
1天前
|
人工智能 算法 搜索推荐
《主动式智能导购AI助手构建》解决方案评测
《主动式智能导购AI助手构建》解决方案评测:该方案提供详尽的部署指南与文档支持,采用微服务架构设计,利用百炼大模型实现精准推荐。但在特定配置参数说明、数据流描述及非专业开发人员使用便捷性方面存在提升空间。总体而言,适合寻求高效个性化服务的企业采用,需关注生产环境下的异常处理指导。
44 24
|
1天前
|
存储 人工智能 Serverless
方案测评 | 10分钟上手主动式智能导购AI助手构建
本文介绍了一种基于Multi-Agent架构的智能导购系统方案,利用百炼的Assistant API快速构建,旨在10分钟内完成搭建并实现精准的商品推荐。通过详细的操作指南,展示了从获取API Key、创建函数计算应用、部署示例网站、验证导购效果到集成商品检索应用等全过程,最后提出了关于文档完善、功能优化等方面的体验反馈。
|
9天前
|
人工智能 Serverless 决策智能
评测:主动式智能导购AI助手构建解决方案
评测:主动式智能导购AI助手构建解决方案
22 1
|
4月前
|
存储 人工智能 自然语言处理
无缝融入,即刻智能[二]:Dify-LLM平台(聊天智能助手、AI工作流)快速使用指南,42K+星标见证专属智能方案
【8月更文挑战第8天】无缝融入,即刻智能[二]:Dify-LLM平台(聊天智能助手、AI工作流)快速使用指南,42K+星标见证专属智能方案
无缝融入,即刻智能[二]:Dify-LLM平台(聊天智能助手、AI工作流)快速使用指南,42K+星标见证专属智能方案
|
7月前
|
人工智能 搜索推荐 机器人
Rasa: 帮助企业更快搭建“AI对话助手”的低代码平台
【2月更文挑战第24天】Rasa: 帮助企业更快搭建“AI对话助手”的低代码平台
211 2
Rasa: 帮助企业更快搭建“AI对话助手”的低代码平台
|
4月前
|
前端开发 Linux API
无缝融入,即刻智能[一]:Dify-LLM大模型平台,零编码集成嵌入第三方系统,42K+星标见证专属智能方案
【8月更文挑战第3天】无缝融入,即刻智能[一]:Dify-LLM大模型平台,零编码集成嵌入第三方系统,42K+星标见证专属智能方案
无缝融入,即刻智能[一]:Dify-LLM大模型平台,零编码集成嵌入第三方系统,42K+星标见证专属智能方案
|
4月前
|
人工智能 自然语言处理 API
云栖发布:通义听悟AI能力再进化,开放API接口
云栖发布:通义听悟AI能力再进化,开放API接口
|
7月前
|
人工智能 监控 搜索推荐
智能管理日常花销 — AI Coze打造个人财务小助手的全新体验(初版)(一)
智能管理日常花销 — AI Coze打造个人财务小助手的全新体验(初版)
286 0