SAP ABAP 也来凑凑AI大模型的热闹,deepseek因为申请晚了,没有赶上可付费的,那就kimi吧
SAP ABAP 也来凑凑AI大模型的热闹,deepseek因为申请晚了,没有赶上可付费的,那就kimi吧。剩下的就是以上这个json解析出cotent 并把content放到回复区域的事情了。CV_RESPONSE_BODY的获取内容结构。先用APIFOX测试一下KIMI的接口。写于20250221 浙江台州。
·
SAP ABAP 也来凑凑AI大模型的热闹,deepseek因为申请晚了,没有赶上可付费的,那就kimi吧
先用APIFOX测试一下KIMI的接口
*&---------------------------------------------------------------------*
*& Report ZDG_AI_KIMI
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZDG_AI_KIMI.
"文本编辑器:
DATA GV_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA GV_SPLITTER TYPE REF TO CL_GUI_EASY_SPLITTER_CONTAINER.
DATA GV_TEXT_EDITOR TYPE REF TO CL_GUI_TEXTEDIT.
DATA GV_CUSTOM_CONTAINER2 TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA GV_SPLITTER2 TYPE REF TO CL_GUI_EASY_SPLITTER_CONTAINER.
DATA GV_TEXT_EDITOR2 TYPE REF TO CL_GUI_TEXTEDIT.
DATA GV_HEADER TYPE THEAD.
DATA GT_LINES TYPE STANDARD TABLE OF TLINE.
DATA GT_TABLE TYPE C OCCURS 0.
DATA GV_STR TYPE STRING. "文本编辑器里显示的内容拼接的字符串
DATA OK_1001 TYPE SY-UCOMM.
DATA OK_1002 TYPE SY-UCOMM.
DATA GV_OK TYPE SY-UCOMM.
CREATE OBJECT GV_CUSTOM_CONTAINER
EXPORTING
CONTAINER_NAME = 'TEXTCONTAINER'.
CREATE OBJECT GV_SPLITTER
EXPORTING
PARENT = GV_CUSTOM_CONTAINER
ORIENTATION = 0
SASH_POSITION = 100.
"文本编辑器:
CREATE OBJECT GV_TEXT_EDITOR
EXPORTING
PARENT = GV_SPLITTER->TOP_LEFT_CONTAINER
WORDWRAP_MODE = CL_GUI_TEXTEDIT=>WORDWRAP_AT_WINDOWBORDER
WORDWRAP_TO_LINEBREAK_MODE = CL_GUI_TEXTEDIT=>FALSE
EXCEPTIONS
ERROR_CNTL_CREATE = 1
ERROR_CNTL_INIT = 2
ERROR_CNTL_LINK = 3
ERROR_DP_CREATE = 4
GUI_TYPE_NOT_SUPPORTED = 5.
CREATE OBJECT GV_CUSTOM_CONTAINER2
EXPORTING
CONTAINER_NAME = 'TEXTCONTAINER2'.
CREATE OBJECT GV_SPLITTER2
EXPORTING
PARENT = GV_CUSTOM_CONTAINER2
ORIENTATION = 0
SASH_POSITION = 100.
"文本编辑器:
CREATE OBJECT GV_TEXT_EDITOR2
EXPORTING
PARENT = GV_SPLITTER->TOP_LEFT_CONTAINER
WORDWRAP_MODE = CL_GUI_TEXTEDIT=>WORDWRAP_AT_WINDOWBORDER
WORDWRAP_TO_LINEBREAK_MODE = CL_GUI_TEXTEDIT=>FALSE
EXCEPTIONS
ERROR_CNTL_CREATE = 1
ERROR_CNTL_INIT = 2
ERROR_CNTL_LINK = 3
ERROR_DP_CREATE = 4
GUI_TYPE_NOT_SUPPORTED = 5.
"按钮不可见:
CALL METHOD GV_TEXT_EDITOR->SET_STATUSBAR_MODE
EXPORTING
STATUSBAR_MODE = GV_TEXT_EDITOR->FALSE
EXCEPTIONS
ERROR_CNTL_CALL_METHOD = 1
INVALID_PARAMETER = 2
OTHERS = 3.
CALL METHOD GV_TEXT_EDITOR->SET_TOOLBAR_MODE
EXPORTING
TOOLBAR_MODE = GV_TEXT_EDITOR->FALSE.
"只读:
CALL METHOD GV_TEXT_EDITOR2->SET_READONLY_MODE
EXPORTING
READONLY_MODE = GV_TEXT_EDITOR->TRUE.
CALL SCREEN 1001.
*&---------------------------------------------------------------------*
*& Module STATUS_1001 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE STATUS_1001 OUTPUT.
SET PF-STATUS '1001_STATUS'.
SET TITLEBAR '1001_TITLE'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_1001 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_1001 INPUT.
GV_OK = OK_1001.
CLEAR OK_1001.
* PERFORM frm_get_zrule.
CLEAR OK_1001.
CASE GV_OK.
"选择表,筛选
WHEN 'ASK'.
PERFORM CALL_KIMIAI.
WHEN 'EXIT'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE.
FORM CALL_KIMIAI.
DATA:QUETINFO TYPE STRING.
DATA: LV_STATUS TYPE I,
LV_ERROR_OCCURRED TYPE FLAG,
LV_ERROR_MSG TYPE STRING,
LV_RESPONSE_BODY TYPE STRING.
PERFORM GETPRODECP CHANGING QUETINFO.
DATA:LV_ASKJSON TYPE STRING.
LV_ASKJSON = '{"model": "moonshot-v1-8k","messages": [{"role": "user",' &&
'"content": "' && QUETINFO && '"}]}'.
PERFORM SEND_JSON USING
'https://api.moonshot.cn/v1/chat/completions' "
LV_ASKJSON " JSON报文
CHANGING LV_STATUS
LV_RESPONSE_BODY
LV_ERROR_OCCURRED
LV_ERROR_MSG.
ENDFORM.
FORM SEND_JSON USING IV_URL TYPE STRING
IV_JSON_DATA TYPE STRING
CHANGING CV_STATUS TYPE I
CV_RESPONSE_BODY TYPE STRING
CV_ERROR_OCCURRED TYPE FLAG
CV_ERROR_MSG TYPE STRING.
STATICS: LO_CLIENT TYPE REF TO IF_HTTP_CLIENT.
CLEAR: CV_ERROR_MSG,
CV_STATUS,
CV_ERROR_OCCURRED,
CV_ERROR_MSG.
IF IV_URL IS INITIAL.
MESSAGE E349(SBDS) INTO CV_ERROR_MSG.
CV_ERROR_OCCURRED = 'X'.
RETURN.
ENDIF.
STATICS SV_BEGIN TYPE C LENGTH 1.
IF SV_BEGIN IS INITIAL.
CALL METHOD CL_HTTP_CLIENT=>CREATE_BY_URL
EXPORTING
URL = IV_URL
IMPORTING
CLIENT = LO_CLIENT
EXCEPTIONS
ARGUMENT_NOT_FOUND = 1
PLUGIN_NOT_ACTIVE = 2
INTERNAL_ERROR = 3
OTHERS = 4.
IF SY-SUBRC NE 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
INTO CV_ERROR_MSG.
CV_ERROR_OCCURRED = 'X'.
RETURN.
ENDIF.
SV_BEGIN = 'X'.
LO_CLIENT->REQUEST->SET_CONTENT_TYPE( 'application/json' ).
LO_CLIENT->REQUEST->SET_METHOD( 'POST' ).
* 自定义参数
LO_CLIENT->REQUEST->SET_HEADER_FIELD( NAME = 'InterfaceName' VALUE = 'HTTP://WWW.chinajack.COM' ). "//保留。
LO_CLIENT->REQUEST->SET_HEADER_FIELD( NAME = 'Authorization'
VALUE = 'Bearer sk-v7grNgfmr90UCE5KrjCq3AfSXgjnroZMfn2eTiGujPBIRdFv' ). "换算成自己的kimi网址申请密钥吧。
LO_CLIENT->PROPERTYTYPE_LOGON_POPUP = 0.
LO_CLIENT->REQUEST->SET_HEADER_FIELDS( VALUE #(
( NAME = 'APIKey' VALUE = 'sk-v7grNgfmr90UCE5KrjCq3AfSXgjnroZMfn2eTiGujPBIRdFv' )
( NAME = 'DataServiceVersion' VALUE = '2.0' )
( NAME = 'Accept' VALUE = '*/*' )
( NAME = 'Content-Type' VALUE = 'application/json' ) ) ).
* 默认有10元赠送金额,相当于免费。过了之后支付宝或者微信采购即可。
ENDIF.
LO_CLIENT->REQUEST->SET_CDATA( IV_JSON_DATA ).
CALL METHOD LO_CLIENT->SEND
EXCEPTIONS
HTTP_COMMUNICATION_FAILURE = 1
HTTP_INVALID_STATE = 2
HTTP_PROCESSING_FAILED = 3
OTHERS = 4.
IF SY-SUBRC NE 0.
LO_CLIENT->GET_LAST_ERROR( IMPORTING MESSAGE = CV_ERROR_MSG ).
CV_ERROR_OCCURRED = 'X'.
RETURN.
ENDIF.
LO_CLIENT->RECEIVE( EXCEPTIONS OTHERS = 1 ).
IF SY-SUBRC NE 0.
LO_CLIENT->GET_LAST_ERROR( IMPORTING MESSAGE = CV_ERROR_MSG ).
CV_ERROR_OCCURRED = 'X'.
RETURN.
ENDIF.
CV_RESPONSE_BODY = LO_CLIENT->RESPONSE->GET_CDATA( ).
LO_CLIENT->RESPONSE->GET_STATUS( IMPORTING CODE = CV_STATUS ).
* CALL METHOD LO_CLIENT->CLOSE( )."如果多开需要关闭。
GV_OK = GV_OK + 1.
ENDFORM.
FORM GETPRODECP CHANGING CONTENT TYPE STRING.
CLEAR CONTENT.
DATA:LT_TEXT TYPE TABLE OF CHAR255.
CALL METHOD GV_TEXT_EDITOR->GET_TEXT_AS_R3TABLE
IMPORTING
TABLE = LT_TEXT
EXCEPTIONS
ERROR_DP = 1
ERROR_CNTL_CALL_METHOD = 2
OTHERS = 3.
" 将表内容转换为字符串
LOOP AT LT_TEXT INTO DATA(LS_TEXT).
CONCATENATE CONTENT LS_TEXT INTO CONTENT SEPARATED BY SPACE.
ENDLOOP.
ENDFORM.
CV_RESPONSE_BODY的获取内容结构
{
"id": "chatcmpl-67b7ebf52f35584cccf529db",
"object": "chat.completion",
"created": 1740106741,
"model": "moonshot-v1-8k",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "SAP GUI 800 录制的脚本不能执行可能有多种原因。以下是一些可能的原因和相应的解决方案:\n\n1. **脚本错误**:检查脚本是否有语法错误或逻辑错误。重新检查脚本的每一步,确保所有操作都按照预期执行。\n\n2. **环境问题**:你的确保SAP GUI 800环境设置正确,包括语言、区域设置等。有时候,环境设置不当可能导致脚本无法执行。\n\n3. **权限问题**:检查执行脚本的用户是否有足够的权限执行脚本中的操作。如果权限不足,需要联系系统管理员调整权限。\n\n4. **SAP系统问题**:检查SAP系统是否正常运行,是否有相关的错误或警告信息。有时候,SAP系统的问题也会影响脚本的执行。\n\n5. **脚本与SAP GUI版本不兼容**:如果你的脚本是在旧版本的SAP GUI中录制的,可能在新版本中不兼容。尝试在录制脚本的相同版本中执行脚本。\n\n6. **依赖问题**:脚本可能依赖于某些特定的数据或配置,如果这些依赖不存在或已更改,脚本可能无法执行。\n\n7. **错误处理**:检查脚本中是否有错误处理机制。如果没有,可能需要添加错误处理代码来捕获和处理可能发生的错误。\n\n8. **日志和调试**:启用SAP GUI的日志记录功能,查看脚本执行过程中的详细日志,这有助于诊断问题。\n\n9. **咨询SAP社区或支持**:如果以上方法都无法解决问题,可以考虑咨询SAP社区或联系SAP支持获取专业帮助。\n\n请根据这些可能的原因逐一排查,找到问题所在,并采取相应的解决措施。如果需要更具体的帮助,可以提供更详细的错误信息或脚本内容。"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 18,
"completion_tokens": 356,
"total_tokens": 374
}
}
剩下的就是以上这个json解析出cotent 并把content放到回复区域的事情了。
参考 Simple and flexible OAuth 2.0 REST API Call from a... - SAP Community
写于20250221 浙江台州
更多推荐
所有评论(0)