ABAP 调用 Deepseek API

作者:郑德鼎 约 3 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, Basis, Data Engineering, SD, 开发, 数据工程, 系统管理, 销售分销
ABAP 调用 Deepseek API - 封面图
ABAP 调用 Deepseek API - 封面图

先注册一下deepseek,然后在https://platform.deepseek.com/申请一个key。注意保密。泄露了会被封。记得把https的证书导进系统。

调用过程比较简单,和项目中常用的调用外部接口api完全一样。最后因为账户没钱返回402,技术上算是调用成功。deepseek目前不让充钱。

通过ABAP,发挥想象力,可以在GUI或者Fiori上以各种花里胡哨的方式调用deepseek。

我们这个行业离不了搜索引擎,AI是个更高级的搜索引擎,能读懂人话,能快速命中准确答案,省脑子省精力,肯定是个好工具。但为了AI而AI意思不大,哪些业务、技术等问题可以抛给AI,AI解决的成功率有多少,AI会不会帮倒忙......可能要在实践中慢慢探索。

代码如下:

DATA: len           TYPE        i,      url           TYPE        string,      http_client   TYPE REF TO if_http_client,      request       TYPE        string,      result        TYPE        string,      authorization TYPE        string.      TYPES:BEGIN OF ty_body,        role    TYPE string,        content TYPE string,      END OF ty_body.      DATA:gw_body TYPE ty_body,     gt_body TYPE TABLE OF ty_body.     TYPES: BEGIN OF ty_cdata,         model    TYPE string,         messages TYPE STANDARD TABLE OF ty_body WITH EMPTY KEY,         stream   TYPE string,       END OF ty_cdata.       DATA:gt_cdata TYPE TABLE OF ty_cdata,     gs_cdata TYPE ty_cdata.     DATA: g_code   TYPE i,      g_reason TYPE string.      url = 'https://api.deepseek.com/chat/completions'.authorization = |Bearer 你自己申请的key|.

"创建http客户端对象CLEAR http_client.CALL METHOD cl_http_client=>create_by_url  EXPORTING    url                = url  IMPORTING    client             = http_client  EXCEPTIONS    argument_not_found = 1    plugin_not_active  = 2    internal_error     = 3    OTHERS             = 4.

"传输请求内容格式以及编码http_client->request->set_content_type( content_type = 'application/json' )."不要改

"方法=POSThttp_client->request->set_method( if_http_request=>co_request_method_post ).

"Headerhttp_client->request->set_header_field( EXPORTING name = 'Authorization'                                                  value = authorization ).

gt_body = VALUE #( ( role    = 'system' content = 'You are a helpful assistant.'  ) "不要改                    ( role    = 'user' content = 'hello!'  )  ). "user不要动,content是你想说的话

gs_cdata = VALUE #( messages = gt_body                    model    = 'deepseek-chat' "deepseek-chat是聊天,deepseek-reasoner是推理                    stream   = 'false' ).      "true也可以

request = /ui2/cl_json=>serialize( EXPORTING data     = gs_cdata                                   compress =  abap_false                                   numc_as_string   = abap_false                                   pretty_name  = 'L' ) .

REPLACE ALL OCCURRENCES OF '"false"' IN request WITH 'false'.

"传入请求http_client->request->set_cdata( EXPORTING data = request ).

"发送CALL METHOD http_client->send  EXCEPTIONS    http_communication_failure = 1    http_invalid_state         = 2    http_processing_failed     = 3    http_invalid_timeout       = 4    OTHERS                     = 5."接收CALL METHOD http_client->receive  EXCEPTIONS    http_communication_failure = 1    http_invalid_state         = 2    http_processing_failed     = 3.http_client->response->get_status(  IMPORTING code = g_code reason = g_reason )."提取返回字符串result = http_client->response->get_cdata( ).IF result IS NOT INITIAL.ENDIF.

执行结果如下:

ABAP 调用 Deepseek API - 封面图
ABAP 调用 Deepseek API - 封面图

{"error":{"message":"Insufficient

Balance","type":"unknown_error","param":null,"code":"invalid_request_error"}}。

等让充钱了再研究。

郑德鼎

关于作者:郑德鼎

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「ABAP调用DeepseekAPI.md」整理生成,仅用于内部技术分享与学习交流。