使用ABAP调用图灵api制作个简单的聊天机器人

本文介绍如何使用ABAP调用图灵聊天机器人API,通过SpringBoot搭建中转服务,实现聊天功能。作者因ABAP基础薄弱,采用Java作为接口转发器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用ABAP调用图灵api制作个简单的聊天机器人

闲来无事的时候想着做点什么,正好看到了图灵的聊天机器人API,于是就想着用abap试试连接一下,但是楼主abap基础太差,最终还是用java做了一个转发器,来实现聊天功能

先发一下效果

在这里插入图片描述

在这里插入图片描述

再来分享下实现代码,我这里是用的springboot快速创建了一个web服务,代码贴在下面

package com.cjq.demo.controller;

import java.nio.charset.Charset;
import java.util.Iterator;

import com.cjq.demo.model.InputText;
import com.cjq.demo.model.Perception;
import com.cjq.demo.model.RequestModel;
import com.cjq.demo.model.UserInfo;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.client.RestTemplate;

@RequestMapping("/test")
@Controller
public class DemoController {

    @RequestMapping(value = "/demo", method = RequestMethod.GET)
    @ResponseBody
    public String test(@RequestBody String string) {
        
        System.out.println(string);

        RequestModel requestModel = new RequestModel();
        InputText inputText = new InputText();
        UserInfo userInfo = new UserInfo();
        Perception perception = new Perception();
        String url = "http://openapi.tuling123.com/openapi/api/v2";

        inputText.setText(string);
        perception.setInputText(inputText);
        userInfo.setApiKey("你的apikey");
        userInfo.setUserId("你的userid");
        requestModel.setPerception(perception);
        requestModel.setReqType(0);
        requestModel.setUserInfo(userInfo);

        Gson gson = new Gson();
        String str = gson.toJson(requestModel);
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.getMessageConverters().add(0,
                (HttpMessageConverter<?>) new StringHttpMessageConverter(Charset.forName("UTF-8")));
        String s = restTemplate.postForObject(url, str, String.class);
        JsonObject js = new JsonParser().parse(s).getAsJsonObject();
        JsonArray ss = js.getAsJsonArray("results");
        
        Iterator it = ss.iterator();
        while(it.hasNext()){
           JsonElement e = (JsonElement)it.next();
           System.out.println(e.getAsJsonObject().getAsJsonObject("values").get("text").toString());
           return e.getAsJsonObject().getAsJsonObject("values").get("text").toString();
        }
        return "机器人调用失败了";
    }
}

命名比较随意,看看就好哈,实体类的就不贴了,随便起。

再贴下abap的

REPORT Z01_01_03.

PARAMETERS INPUT TYPE STRING.

DATA:BEGIN OF TY_REQ,
       STRING TYPE STRING,
     END OF TY_REQ.

TY_REQ-STRING = INPUT.

DATA: LT_FLIGHT TYPE STANDARD TABLE OF SFLIGHT,
      LRF_DESCR TYPE REF TO CL_ABAP_TYPEDESCR,
      LV_JSON   TYPE STRING.

LV_JSON = /UI2/CL_JSON=>SERIALIZE( DATA = TY_REQ COMPRESS = ABAP_TRUE PRETTY_NAME = /UI2/CL_JSON=>PRETTY_MODE-CAMEL_CASE ).

WRITE: / '你对虚拟小崔说: "', INPUT, '"'.

DATA: LO_HTTP_CLIENT   TYPE REF TO IF_HTTP_CLIENT,
      LV_SERVICE       TYPE STRING,
      LV_RESULT        TYPE STRING,
      LO_IXML          TYPE REF TO IF_IXML,
      LO_STREAMFACTORY TYPE REF TO IF_IXML_STREAM_FACTORY,
      LO_ISTREAM       TYPE REF TO IF_IXML_ISTREAM,
      LO_DOCUMENT      TYPE REF TO IF_IXML_DOCUMENT,
      LO_PARSER        TYPE REF TO IF_IXML_PARSER.

LV_SERVICE = 'http://你的ip地址:8080/test/demo?string='.

DATA CCC TYPE STRING.

CONCATENATE LV_SERVICE INPUT INTO CCC.

CL_HTTP_CLIENT=>CREATE_BY_URL(
  EXPORTING
    URL                = LV_SERVICE
  IMPORTING
    CLIENT             = LO_HTTP_CLIENT
  EXCEPTIONS
    ARGUMENT_NOT_FOUND = 1
    PLUGIN_NOT_ACTIVE  = 2
    INTERNAL_ERROR     = 3
    OTHERS             = 4 ).

LO_HTTP_CLIENT->PROPERTYTYPE_LOGON_POPUP = LO_HTTP_CLIENT->CO_DISABLED.
CALL METHOD LO_HTTP_CLIENT->AUTHENTICATE(
  EXPORTING
*   client   = ''
*   proxy_authentication = 'X'
    USERNAME = ''
    PASSWORD = ''
*   LANGUAGE = 'E'
               ).
CALL METHOD LO_HTTP_CLIENT->REQUEST->SET_HEADER_FIELD
  EXPORTING
    NAME  = 'Content-Type'
    VALUE = 'application/json; charset=utf-8'.
CALL METHOD LO_HTTP_CLIENT->REQUEST->SET_METHOD( 'GET' ).

DATA LA_JSON TYPE STRING.
DATA: LEN TYPE I .
LA_JSON = INPUT.
LEN = STRLEN( LA_JSON ) .

CALL METHOD LO_HTTP_CLIENT->REQUEST->SET_CDATA
  EXPORTING
    DATA   = INPUT
    OFFSET = 0
    LENGTH = LEN.

LO_HTTP_CLIENT->SEND(
  EXCEPTIONS
    HTTP_COMMUNICATION_FAILURE = 1
    HTTP_INVALID_STATE         = 2 ).

LO_HTTP_CLIENT->RECEIVE(
  EXCEPTIONS
    HTTP_COMMUNICATION_FAILURE = 1
    HTTP_INVALID_STATE         = 2
    HTTP_PROCESSING_FAILED     = 3 ).

CLEAR LV_RESULT .
LV_RESULT = LO_HTTP_CLIENT->RESPONSE->GET_CDATA( ).
LO_IXML = CL_IXML=>CREATE( ).

LO_STREAMFACTORY = LO_IXML->CREATE_STREAM_FACTORY( ).
LO_ISTREAM = LO_STREAMFACTORY->CREATE_ISTREAM_STRING(
                                 LV_RESULT ).
LO_DOCUMENT = LO_IXML->CREATE_DOCUMENT( ).
LO_PARSER = LO_IXML->CREATE_PARSER(
                       STREAM_FACTORY = LO_STREAMFACTORY
                       ISTREAM        = LO_ISTREAM
                       DOCUMENT       = LO_DOCUMENT ).
LO_PARSER->PARSE( ).

WRITE: / '虚拟小崔说: ',LV_RESULT.
CLEAR INPUT.

CALL METHOD LO_HTTP_CLIENT->CLOSE.

总体的逻辑就是本地启动一个服务,然后abap这边通过调用你提供的接口,将参数传过去,并接收返回值即可,命名方面就别吐槽啦,真的是乱起的,以上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值