文心一言接入流程

发布时间 2023-08-30 10:29:35作者: 雨飞

一、定义文心接口相关的入参、出参类

public class WenXinMsg {
    private String role = "user";
    private String content;

    public String getRole() {
        return role;
    }

    public void setRole(String role) {
        this.role = role;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}
import java.util.List;

public class WenXinMsgReq {
    private List<WenXinMsg> messages;

    public List<WenXinMsg> getMessages() {
        return messages;
    }

    public void setMessages(List<WenXinMsg> messages) {
        this.messages = messages;
    }
}
public class WenXinMsgRes {
    private String result;
    private Integer error_code;
    private String error_msg;

    public Integer getError_code() {
        return error_code;
    }

    public void setError_code(Integer error_code) {
        this.error_code = error_code;
    }

    public String getError_msg() {
        return error_msg;
    }

    public void setError_msg(String error_msg) {
        this.error_msg = error_msg;
    }

    public String getResult() {
        return result;
    }

    public void setResult(String result) {
        this.result = result;
    }
}
public class WenXinToken {
    private String access_token;

    public String getAccess_token() {
        return access_token;
    }

    public void setAccess_token(String access_token) {
        this.access_token = access_token;
    }
}

二、编写工具类

import java.util.*;

@Component
public class WenXinUtil {
    private String appID = "";
    private   String apiKey = "";
    private   String secretKey = "";
    @Autowired
    RestTemplateUtil restTemplateUtil;
    public   String aiChat(String input) {
        System.out.println(input);
        String tokenUrl = String.format("https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=%s&client_secret=%s&",apiKey,secretKey);
        Map<String,String> mapHeader = new HashMap<>();
        mapHeader.put("Content-Type","application/json");
        mapHeader.put("Accept","application/json");
        ResponseEntity<WenXinToken> tokenEntity = restTemplateUtil.post(tokenUrl,mapHeader, HttpEntity.EMPTY,WenXinToken.class);
        if (tokenEntity != null) {
            String accessToken = tokenEntity.getBody().getAccess_token();
            String getChatUrl = String.format("https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/eb-instant?access_token=%s",accessToken);
            WenXinMsg wenXinMsg = new WenXinMsg();
            wenXinMsg.setContent(input);
            WenXinMsgReq wenXinMsgReq = new WenXinMsgReq();
            List<WenXinMsg> messages = new ArrayList<>();
            messages.add(wenXinMsg);
            wenXinMsgReq.setMessages(messages);
            ResponseEntity<LinkedHashMap>  wenXinMsgResResponse = restTemplateUtil.post(getChatUrl,mapHeader,wenXinMsgReq, LinkedHashMap.class);
            if (wenXinMsgResResponse != null && wenXinMsgResResponse.getBody() != null) {
                if (wenXinMsgResResponse.getBody() != null) {
                    System.out.println(wenXinMsgResResponse.getBody());
                    if (wenXinMsgResResponse.getBody().containsKey("error_code")) {
                        return wenXinMsgResResponse.getBody().get("error_msg").toString();
                    }
                    return wenXinMsgResResponse.getBody().get("result").toString();
                }
                else {
                    return "error";
                }
                //return wenXinMsgResResponse.getBody().getResult();
            }
        }
        return "";
    }
}

三、编写对外接口

@RequestMapping("/wenxin")
@RestController
public class WenXinController {
    @Autowired
    WenXinUtil wenXinUtil;
    @PostMapping("/chat")
    public String introduce(@RequestBody String input) {
        String aiMsg = wenXinUtil.aiChat(input);
        return aiMsg;
    }
}