SAP ABAP调用DeepSeek API 接口示例程序代码
DeepSeek API 使用与 OpenAI 兼容的 API 格式,通过修改配置,您可以使用 OpenAI SDK 来访问 DeepSeek API,或使用与 OpenAI API 兼容的软件。本文提供一个可以实际测试调用DeepSeek接口示例程序。注意:需要替换API密钥和SAP服务器开通相关网权限和STRUST导入HTTPS证书。SAP ABAP调用DeepSeek接口示例程序。DeepS
·
SAP ABAP调用DeepSeek API 接口示例程序代码
本文提供一个可以实际测试调用DeepSeek接口示例程序。注意:需要替换API密钥和SAP服务器开通相关网权限和STRUST导入HTTPS证书。
DeepSeek API 文档
https://api-docs.deepseek.com/zh-cn
首次调用 API
DeepSeek API 使用与 OpenAI 兼容的 API 格式,通过修改配置,您可以使用 OpenAI SDK 来访问 DeepSeek API,或使用与 OpenAI API 兼容的软件。


请求报文
{
"model": "deepseek-chat",
"messages": [
{
"role": "user",
"content": "ABAP写Hellor world!"
}
],
"temperature": 1.0
}
响应报文
{
"id": "6f47cae2-831b-4d84-96cf-e0b1c595690c",
"object": "chat.completion",
"created": 1739241345,
"model": "deepseek-chat",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "在ABAP中,你可以使用 `WRITE` 语句来输出 \"Hello, World!\"。以下是一个简单的ABAP程序示例:\n\n```abap\nREPORT z_hello_world.\n\nSTART-OF-SELECTION.\n WRITE: / 'Hello, World!'.\n```\n\n### 解释:\n- `REPORT z_hello_world.`:定义了一个名为 `z_hello_world` 的报告程序。\n- `START-OF-SELECTION.`:这是ABAP程序的入口点,程序从这里开始执行。\n- `WRITE: / 'Hello, World!'.`:`WRITE` 语句用于输出文本。`/` 表示换行,`'Hello, World!'` 是要输出的文本。\n\n### 运行程序:\n1. 在SAP系统中创建一个新的ABAP程序(例如 `Z_HELLO_WORLD`)。\n2. 将上述代码复制到程序中。\n3. 保存并激活程序。\n4. 运行程序,你将在输出窗口中看到 \"Hello, World!\"。\n\n这就是在ABAP中编写和运行 \"Hello, World!\" 程序的基本步骤。"
},
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 10,
"completion_tokens": 239,
"total_tokens": 249,
"prompt_tokens_details": { "cached_tokens": 0 },
"prompt_cache_hit_tokens": 0,
"prompt_cache_miss_tokens": 10
},
"system_fingerprint": "fp_3a5770e1b4"
}


*&---------------------------------------------------------------------*
*& Report Z_DEEPSEEK_API_CALL
*&---------------------------------------------------------------------*
*& SAP ABAP调用DeepSeek接口示例程序
*& DeepSeek-V3 的综合能力 DeepSeek-V3 在推理速度上相较历史模型有了大幅提升。
*&---------------------------------------------------------------------*
REPORT Z_DEEPSEEK_API_CALL NO STANDARD PAGE HEADING.
DATA: LT_HEADERS TYPE TIHTTPNVP,
LT_COOKIES TYPE TIHTTPCKI.
DATA: LW_HEADERS TYPE IHTTPNVP,
LW_COOKIES TYPE IHTTPCKI.
DATA: LO_HTTP_CLIENT TYPE REF TO IF_HTTP_CLIENT,
LV_METHOD TYPE STRING,
LV_URL TYPE STRING VALUE 'https://api.deepseek.com/v1/chat/completions', " API地址
LV_API_KEY TYPE STRING VALUE 'sk-9824d878b', " 替换为你的API密钥
LV_REQUEST TYPE STRING,
LV_RESPONSE TYPE STRING.
TYPES: BEGIN OF T_MESSAGE3,
ROLE TYPE STRING,
CONTENT TYPE STRING,
END OF T_MESSAGE3.
TYPES: BEGIN OF T_PROMPT_TOKENS_DETAILS4,
CACHED_TOKENS TYPE I,
END OF T_PROMPT_TOKENS_DETAILS4.
TYPES: BEGIN OF T_CHOICES2,
INDEX TYPE I,
MESSAGE TYPE T_MESSAGE3,
FINISH_REASON TYPE STRING,
END OF T_CHOICES2.
TYPES: BEGIN OF T_USAGE5,
PROMPT_TOKENS TYPE I,
COMPLETION_TOKENS TYPE I,
TOTAL_TOKENS TYPE I,
PROMPT_TOKENS_DETAILS TYPE T_PROMPT_TOKENS_DETAILS4,
PROMPT_CACHE_HIT_TOKENS TYPE I,
PROMPT_CACHE_MISS_TOKENS TYPE I,
END OF T_USAGE5.
TYPES: TT_CHOICES2 TYPE STANDARD TABLE OF T_CHOICES2 WITH DEFAULT KEY.
TYPES: BEGIN OF T_JSON1,
ID TYPE STRING,
OBJECT TYPE STRING,
CREATED TYPE P LENGTH 16 DECIMALS 0,
MODEL TYPE STRING,
CHOICES TYPE TT_CHOICES2,
USAGE TYPE T_USAGE5,
SYSTEM_FINGERPRINT TYPE STRING,
END OF T_JSON1.
DATA: LW_DATA TYPE T_JSON1.
DATA: LW_CHOICES TYPE T_CHOICES2.
SELECTION-SCREEN BEGIN OF BLOCK B101 WITH FRAME TITLE TEXT-101.
PARAMETERS: P_METHOD TYPE UJX0_AT_TESTLOG-METHOD OBLIGATORY DEFAULT 'POST',
P_URL TYPE STRING LOWER CASE DEFAULT 'https://api.deepseek.com/v1/chat/completions',
P_APIKEY TYPE STRING LOWER CASE DEFAULT 'sk-xxxxxx',
P_REQ TYPE STRING LOWER CASE DEFAULT '{"model":"deepseek-chat","messages":[{"role":"user","content":"Hello!"}],"temperature":1.0}'.
SELECTION-SCREEN END OF BLOCK B101.
INITIALIZATION.
START-OF-SELECTION.
LV_METHOD = P_METHOD.
LV_URL = P_URL.
LV_API_KEY = P_APIKEY.
LV_REQUEST = P_REQ.
* 创建HTTP客户端
CL_HTTP_CLIENT=>CREATE_BY_URL(
EXPORTING
URL = LV_URL
IMPORTING
CLIENT = LO_HTTP_CLIENT
).
* 设置HTTP方法
LO_HTTP_CLIENT->REQUEST->SET_METHOD( LV_METHOD ).
* 设置请求头
LO_HTTP_CLIENT->REQUEST->SET_HEADER_FIELD(
NAME = 'Content-Type'
VALUE = 'application/json' ).
LO_HTTP_CLIENT->REQUEST->SET_HEADER_FIELD(
NAME = 'Authorization'
VALUE = |Bearer { LV_API_KEY }| ).
* 构建JSON请求体
* lv_request = '{"model":"deepseek-chat","messages":[{"role":"user","content":"Hello!"}],"temperature":1.0}'. " 根据API文档调整参数
*lv_request = '{"model":"deepseek-chat","messages":[{"role":"user","content":"Hello!"}],"temperature":0.7}'. " 根据API文档调整参数
* 设置请求数据
LO_HTTP_CLIENT->REQUEST->SET_CDATA( LV_REQUEST ).
ULINE.
WRITE:/ P_URL.
* 发送请求
TRY.
LO_HTTP_CLIENT->SEND( ).
LO_HTTP_CLIENT->RECEIVE( ).
" 获取响应
LV_RESPONSE = LO_HTTP_CLIENT->RESPONSE->GET_CDATA( ).
" 处理响应(示例:直接输出)
WRITE :/ 'API Response:', LV_RESPONSE.
CATCH CX_ROOT INTO DATA(LX_ERROR).
WRITE: / 'Error:', LX_ERROR->GET_TEXT( ).
ENDTRY.
PERFORM FRM_RESPONSE_GET_HEADERS USING LO_HTTP_CLIENT CHANGING LT_HEADERS.
PERFORM FRM_RESPONSE_GET_COOKIE USING LO_HTTP_CLIENT CHANGING LT_COOKIES.
* 关闭连接
LO_HTTP_CLIENT->CLOSE( ).
ULINE.
WRITE:/ P_REQ.
ULINE.
WRITE:/ LV_RESPONSE.
LOOP AT LT_HEADERS INTO LW_HEADERS.
WRITE:/ LW_HEADERS-NAME, LW_HEADERS-VALUE.
ENDLOOP.
WRITE:/ 'get_cookies'.
ULINE.
LOOP AT LT_COOKIES INTO LW_COOKIES.
WRITE:/ LW_COOKIES-NAME, / LW_COOKIES-VALUE, / LW_COOKIES-EXPIRES.
ENDLOOP.
PERFORM FRM_JSON_ABAP USING LV_RESPONSE 'X' CHANGING LW_DATA.
LOOP AT LW_DATA-CHOICES INTO LW_CHOICES.
PERFORM FRM_SHOW_HTML USING LW_CHOICES-MESSAGE-CONTENT.
ENDLOOP.
PERFORM FRM_DISPLAY_JSON_HTML USING LV_RESPONSE.
FORM FRM_RESPONSE_GET_HEADERS USING LO_CLIENT TYPE REF TO IF_HTTP_CLIENT
CHANGING LT_FIELDS TYPE TIHTTPNVP.
REFRESH: LT_FIELDS.
CALL METHOD LO_CLIENT->RESPONSE->GET_HEADER_FIELDS
CHANGING
FIELDS = LT_FIELDS.
ENDFORM.
FORM FRM_RESPONSE_GET_COOKIE USING LO_CLIENT TYPE REF TO IF_HTTP_CLIENT
CHANGING LT_TIHTTPCKI TYPE TIHTTPCKI.
REFRESH: LT_TIHTTPCKI.
CALL METHOD LO_CLIENT->RESPONSE->GET_COOKIES
CHANGING
COOKIES = LT_TIHTTPCKI.
ENDFORM.
FORM FRM_SHOW_HTML USING LV_HTML.
CALL METHOD CL_ABAP_BROWSER=>SHOW_HTML
EXPORTING
HTML_STRING = LV_HTML.
ENDFORM.
FORM FRM_SHOW_XML USING LV_XML.
CALL METHOD CL_ABAP_BROWSER=>SHOW_XML
EXPORTING
XML_STRING = LV_XML.
ENDFORM.
FORM FRM_DISPLAY_XML USING LV_XML.
CALL METHOD CL_DEMO_OUTPUT=>DISPLAY_XML
EXPORTING
XML = LV_XML.
ENDFORM.
FORM FRM_DISPLAY_JSON USING LV_JSON.
CALL METHOD CL_DEMO_OUTPUT=>DISPLAY_JSON
EXPORTING
JSON = LV_JSON.
ENDFORM.
FORM FRM_DISPLAY_DATA USING LV_DATA.
CALL METHOD CL_DEMO_OUTPUT=>DISPLAY
EXPORTING
DATA = LV_DATA.
ENDFORM.
FORM FRM_DISPLAY_JSON_HTML USING LV_JSON.
DATA: LV_CONVERT TYPE STRING,
LV_ERR_TXT TYPE STRING.
IF LV_JSON IS NOT INITIAL.
TRY.
CALL TRANSFORMATION SJSON2HTML SOURCE XML LV_JSON
RESULT XML DATA(LV_HTML).
CATCH CX_XSLT_RUNTIME_ERROR INTO DATA(LO_ERR).
LV_ERR_TXT = LO_ERR->GET_TEXT( ).
MESSAGE I001(00) WITH LV_ERR_TXT.
ENDTRY.
IF LV_ERR_TXT IS INITIAL.
LV_CONVERT = CL_ABAP_CODEPAGE=>CONVERT_FROM( LV_HTML ).
CL_ABAP_BROWSER=>SHOW_HTML( HTML_STRING = LV_CONVERT ).
ENDIF.
ENDIF.
ENDFORM.
FORM FRM_ABAP_JSON USING DATA
LV_PRETTY_NAME TYPE CHAR1
LV_COMPRESS TYPE CHAR1
LV_NUMC_AS_STRING TYPE CHAR1
CHANGING LV_JSON.
DATA: LW_NAME_MAPPING TYPE /UI2/CL_JSON=>NAME_MAPPING,
LT_NAME_MAPPINGS TYPE /UI2/CL_JSON=>NAME_MAPPINGS.
DATA:
* lv_compress TYPE char1 VALUE ``,
LV_NAME TYPE STRING,
* LV_PRETTY_NAME TYPE CHAR1,
LO_TYPE_DESCR TYPE REF TO CL_ABAP_TYPEDESCR,
LV_ASSOC_ARRAYS TYPE CHAR1 VALUE ``,
LV_TS_AS_ISO8601 TYPE CHAR1 VALUE ``,
LV_EXPAND_INCLUDES TYPE CHAR1 VALUE `X`,
LV_ASSOC_ARRAYS_OPT TYPE CHAR1 VALUE ``,
* LV_NUMC_AS_STRING TYPE CHAR1 VALUE ``,
LV_CONVERSION_EXITS TYPE CHAR1,
LV_FORMAT_OUTPUT TYPE CHAR1,
LV_HEX_AS_BASE64 TYPE CHAR1 VALUE `X`.
"LV_PRETTY_NAME L low_case X camel_case Y extended U user C user_low_case
CLEAR: LV_JSON.
LV_COMPRESS = 'X'.
CALL METHOD /UI2/CL_JSON=>SERIALIZE
EXPORTING
DATA = DATA
COMPRESS = LV_COMPRESS
NAME = LV_NAME
PRETTY_NAME = LV_PRETTY_NAME
TYPE_DESCR = LO_TYPE_DESCR
ASSOC_ARRAYS = LV_ASSOC_ARRAYS
TS_AS_ISO8601 = LV_TS_AS_ISO8601
EXPAND_INCLUDES = LV_EXPAND_INCLUDES
ASSOC_ARRAYS_OPT = LV_ASSOC_ARRAYS_OPT
NUMC_AS_STRING = LV_NUMC_AS_STRING
NAME_MAPPINGS = LT_NAME_MAPPINGS
CONVERSION_EXITS = LV_CONVERSION_EXITS
* format_output = lv_format_output
* hex_as_base64 = lv_hex_as_base64
RECEIVING
R_JSON = LV_JSON.
ENDFORM.
FORM FRM_JSON_ABAP USING LV_JSON
LV_PRETTY_NAME
CHANGING DATA.
DATA: LW_NAME_MAPPING TYPE /UI2/CL_JSON=>NAME_MAPPING,
LT_NAME_MAPPINGS TYPE /UI2/CL_JSON=>NAME_MAPPINGS.
DATA: LV_JSONX TYPE XSTRING,
* LV_PRETTY_NAME TYPE CHAR1,
LV_ASSOC_ARRAYS TYPE CHAR1,
LV_ASSOC_ARRAYS_OPT TYPE CHAR1,
LV_CONVERSION_EXITS TYPE CHAR1,
LV_HEX_AS_BASE64 TYPE CHAR1 VALUE `X`.
CLEAR: DATA.
CALL METHOD /UI2/CL_JSON=>DESERIALIZE
EXPORTING
JSON = LV_JSON
JSONX = LV_JSONX
PRETTY_NAME = LV_PRETTY_NAME
ASSOC_ARRAYS = LV_ASSOC_ARRAYS
ASSOC_ARRAYS_OPT = LV_ASSOC_ARRAYS_OPT
NAME_MAPPINGS = LT_NAME_MAPPINGS
CONVERSION_EXITS = LV_CONVERSION_EXITS
* hex_as_base64 = lv_hex_as_base64
CHANGING
DATA = DATA.
ENDFORM.
FORM FRM_FDT_ABAP_JSON USING DATA
CHANGING LV_JSON.
CLEAR: LV_JSON.
CALL METHOD CL_FDT_JSON=>DATA_TO_JSON
EXPORTING
IA_DATA = DATA
RECEIVING
RV_JSON = LV_JSON.
ENDFORM.
FORM FRM_FDT_JSON_ABAP USING LV_JSON
CHANGING DATA.
CLEAR: DATA.
FREE: DATA.
CALL METHOD CL_FDT_JSON=>JSON_TO_DATA
EXPORTING
IV_JSON = LV_JSON
CHANGING
CA_DATA = DATA.
ENDFORM.
https://api.deepseek.com/v1/chat/completions
API Response:
{"id":"0ab131b3-9ac6-41a6-b6fa-0c6b79cb5bbb","object":"chat.completion","created":1739241180,"model":"deepseek-chat","choices":[{"index":0,"message":{"role"
{"model":"deepseek-chat","messages":[{"role":"user","content":"ABAP写Hellor world!"}],"temperature":1.0}
{"id":"0ab131b3-9ac6-41a6-b6fa-0c6b79cb5bbb","object":"chat.completion","created":1739241180,"model":"deepseek-chat","choices":[{"index":0,"message":{"role"
~response_line HTTP/1.1 200 OK
~server_protocol HTTP/1.1
~status_code 200
~status_reason OK
date Tue, 11 Feb 2025 02:33:00 GMT
content-type application/json
set-cookie HWWAFSESID=6887288766169067ac; path=/
set-cookie HWWAFSESTIME=1739241179226; path=/
vary origin, access-control-request-method, access-control-request-headers
access-control-allow-credentials true
x-ds-trace-id 85e1da12b84a7c2cae3ec5fa4f6835c1
strict-transport-security max-age=31536000; includeSubDomains; preload
x-content-type-options nosniff
content-encoding gzip
server elb
transfer-encoding chunked
sap-original-protocol h2
get_cookies
HWWAFSESTIME
1739241179226
HWWAFSESID
6887288766169067ac
更多推荐

所有评论(0)