使用 LMStudio 本地部署 AI 模型并发布 API 接口供 SAP 调用

作者:郑德鼎 约 6 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, 开发
使用 LMStudio 本地部署 AI 模型并发布 API 接口供 SAP 调用 - 封面图
使用 LMStudio 本地部署 AI 模型并发布 API 接口供 SAP 调用 - 封面图

使用LM Studio本地部署AI模型并发布API接口供SAP调用

首先是下载LM Studio。LM Studio作为运行AI的框架,安装简单,用户协议友好,可以方便的通过防火墙实现离线运行。

官方下载地址: https://lmstudio.ai/download 百度网盘分享下载地址:LM Studio 链接

https://pan.baidu.com/s/1bcU2dKIfvfk4GZVKBEfwMA?pwd=1nku 提取码: 1nku @NathMath

bilibili大佬一键包 度盘:https://pan.baidu.com/s/1hPbaQrIrH7l8lhcUPy6fjg?pwd=NATH

提取码:NATH 谷歌:https://drive.google.com/file/d/1zdfai-

gSIKgpxXuxZtCIM0-LjunqOqia/view?usp=drive_link

内层压缩包解压密码【NathMath@bilibili#39】

---

LM Studio本身可以下载AI模型,如果有小伙伴网络困难,可以直接使用大佬的离线下载。

可选配的推荐模型 DeepSeek R1 8B + 32B 擅长数学推理 + 科研探索 + 逻辑推理

度盘:https://pan.baidu.com/s/1XM_s1uOc89A2Cll8Z6l2EQ?pwd=NATH 提取码:NATH Phi4

擅长英文文本推理 + 数学推理(Phi3.5也值得推荐)

度盘:https://pan.baidu.com/s/1YWaQdfGjUeOEAFEWoeXHiQ?pwd=NATH 提取码:NATH Gemma 9B

擅长通用文本推理 + 文学类文本写作

度盘:https://pan.baidu.com/s/1nCMAxr_BRyzzbWbNw_BxFA?pwd=NATH 提取码:NATH Smegmma

9B 擅长二次元风格的虚拟角色扮演对话 + 无限

度盘:链接:https://pan.baidu.com/s/1pKzIRIVcATqln4NDRJatsg?pwd=NATH 提取码:NATH

花活+无限的推荐模型列表参考(有很多,这里都是UP推荐的好用的模型)

度盘:https://pan.baidu.com/s/1_n_-M7KhdExqgw4kdpYqfA?pwd=NATH 提取码:NATH

---

如果机器性能好,个人推荐使用32B以上的模型,这个最接近于Deepseek R1的能力,虽然只有八九折的样子,但勉强能算生产力了。

下面是大佬的分享站

https://truthful-busby-322.notion.site/NathMath-

LLM-18e45165050a80408586c3f2bf93ce68

启动LM Studio,我们先安装模型。

首先点击下面的Power User,把最左侧一栏的几个图标唤出。

使用 LMStudio 本地部署 AI 模型并发布 API 接口供 SAP 调用 - 封面图
使用 LMStudio 本地部署 AI 模型并发布 API 接口供 SAP 调用 - 封面图

点击左边的放大镜图标可以下载模型(网络问题自行解决)

使用 LMStudio 本地部署 AI 模型并发布 API 接口供 SAP 调用 - 封面图
使用 LMStudio 本地部署 AI 模型并发布 API 接口供 SAP 调用 - 封面图

或者点击文件夹,手动导入模型

使用 LMStudio 本地部署 AI 模型并发布 API 接口供 SAP 调用 - 封面图
使用 LMStudio 本地部署 AI 模型并发布 API 接口供 SAP 调用 - 封面图

注意模型的目录,默认是在C:\Users\\{ 用户名 }\\.lmstudio\models下。

下载好的模型,需要放在models下的【发布者】文件夹下,【模型名】文件夹下。

使用 LMStudio 本地部署 AI 模型并发布 API 接口供 SAP 调用 - 封面图
使用 LMStudio 本地部署 AI 模型并发布 API 接口供 SAP 调用 - 封面图

点击界面右下角齿轮,下载Runtimes,Compatible Only的全部下载。

使用 LMStudio 本地部署 AI 模型并发布 API 接口供 SAP 调用 - 封面图
使用 LMStudio 本地部署 AI 模型并发布 API 接口供 SAP 调用 - 封面图

点击APP Setting,将Local LLM Service启用,这样可以后台运行LM

Studio了(关闭GUI会在托盘生成一个图标继续运行模型,点击托盘图标唤醒GUI)

使用 LMStudio 本地部署 AI 模型并发布 API 接口供 SAP 调用 - 封面图
使用 LMStudio 本地部署 AI 模型并发布 API 接口供 SAP 调用 - 封面图

点击开发者按钮,将模型发布成本地API。LM Studio发布的API兼容OpenAI的API,这会节省不少开发

使用 LMStudio 本地部署 AI 模型并发布 API 接口供 SAP 调用 - 封面图
使用 LMStudio 本地部署 AI 模型并发布 API 接口供 SAP 调用 - 封面图

首先点击setting设置端口号,其他的保持默认即可,可以按照需求选择:

使用 LMStudio 本地部署 AI 模型并发布 API 接口供 SAP 调用 - 封面图
使用 LMStudio 本地部署 AI 模型并发布 API 接口供 SAP 调用 - 封面图

我这里端口设置的2345,拨动Stauts旁边的开关,如果能切换到Running模式,说明这个端口好可以使用,如果不行,就换个端口号试试。端口号需要大于1024。

运行成功后可以看到一个接口的IP地址,各种可以使用的服务也给了出来。后面开发我们使用chat服务进行演示。

使用 LMStudio 本地部署 AI 模型并发布 API 接口供 SAP 调用 - 封面图
使用 LMStudio 本地部署 AI 模型并发布 API 接口供 SAP 调用 - 封面图

接口运行起来了,现在运行模型。还是开发者页面,选择安装好的模型。稍后要在本地跑SAP的Docker,这里就只跑个9B的模型进行演示。

使用 LMStudio 本地部署 AI 模型并发布 API 接口供 SAP 调用 - 封面图
使用 LMStudio 本地部署 AI 模型并发布 API 接口供 SAP 调用 - 封面图

按照需求调整参数,运行。

使用 LMStudio 本地部署 AI 模型并发布 API 接口供 SAP 调用 - 封面图
使用 LMStudio 本地部署 AI 模型并发布 API 接口供 SAP 调用 - 封面图

运行成功是这样的

使用 LMStudio 本地部署 AI 模型并发布 API 接口供 SAP 调用 - 封面图
使用 LMStudio 本地部署 AI 模型并发布 API 接口供 SAP 调用 - 封面图

现在启动SAP。我这里的开发环境是ABAP Trial 2022 SP01,只能在英文环境中开发。

第一版的ABAP AI助手只能在SE38,SE37,SE24和专属事务代码下运行,无法跳转后使用。

程序原理:

使用 LMStudio 本地部署 AI 模型并发布 API 接口供 SAP 调用 - 封面图
使用 LMStudio 本地部署 AI 模型并发布 API 接口供 SAP 调用 - 封面图

可以看到代码编辑区域新增了一个呼出AI助手的按钮,这里是在类CL_CTXMNU_MGR,方法CREATE_PROXY中增强,添加按钮。

FORM add_menu USING menu TYPE REF TO cl_ctmenu . CALL METHOD menu -> add_function

EXPORTING

fcode = 'AISP'

text = '呼出AI助手' .

ENDFORM .

---

点击按钮后触发事件,目前没有找到合适的增强点,在函数USERCOM_INPUT

309行插入命令判断。这个位置可以防止SE37将变量fcode强行变成DUMY

使用 LMStudio 本地部署 AI 模型并发布 API 接口供 SAP 调用 - 封面图
使用 LMStudio 本地部署 AI 模型并发布 API 接口供 SAP 调用 - 封面图

下面是主程序ZAISUPPORTER的开发:

*&---------------------------------------------------------------------**& Modulpool ZAISUPPORTER*&---------------------------------------------------------------------**&*&---------------------------------------------------------------------*REPORT zaisupporter.

FIELD-SYMBOLS: <docking>      TYPE REF TO cl_gui_docking_container,               <lo_container> TYPE REF TO cl_gui_splitter_container,               <input>        TYPE REF TO cl_gui_textedit,               <output>       TYPE REF TO cl_gui_textedit.

CLASS lcl_aisupporter DEFINITION.  PUBLIC SECTION. CLASS-METHODS main.

PRIVATE SECTION.    CLASS-METHODS handle_sapevent      FOR EVENT sapevent      OF cl_abap_browser      IMPORTING action.ENDCLASS.

CLASS lcl_aisupporter IMPLEMENTATION.  METHOD main.

STATICS : docking      TYPE REF TO cl_gui_docking_container,              lo_container TYPE REF TO cl_gui_splitter_container,              input_txt    TYPE REF TO cl_gui_textedit,              output_txt   TYPE REF TO cl_gui_textedit.

•  MESSAGE 'call AISUPPORTER' TYPE 'S'.

TRY. IF input_txt IS NOT INITIAL.          cl_abap_browser=>close_browser( ).

input_txt->free( ).          CLEAR input_txt.        ENDIF.        IF output_txt IS NOT INITIAL.          output_txt->free( ).          CLEAR input_txt.        ENDIF.        IF lo_container IS NOT INITIAL.          lo_container->free( ).          CLEAR lo_container.        ENDIF.        IF docking IS NOT INITIAL.          docking->free( ).          CLEAR docking.        ENDIF.

CASE sy-tcode.          WHEN 'SE38'.            docking = NEW cl_gui_docking_container(                            side = cl_gui_docking_container=>dock_at_right                            extension = 350                            repid = 'SAPLS38E'                            dynnr = '0500'               ).            lo_container = NEW cl_gui_splitter_container(                                 parent  = docking                                 rows    = 3                                 columns = 1                   ). WHEN 'SE37'.            docking = NEW cl_gui_docking_container(                            side = cl_gui_docking_container=>dock_at_right                            extension = 350                            repid = 'SAPLSFUNCTION_BUILDER'                            dynnr = '3000'               ).            lo_container = NEW cl_gui_splitter_container(                                 parent  = docking                                 rows    = 3                                 columns = 1                   ). WHEN 'SE24'.            docking = NEW cl_gui_docking_container(                            side = cl_gui_docking_container=>dock_at_right                            extension = 350                            repid = 'SAPLSEO_CLEDITOR'                            dynnr = '0200'               ).            lo_container = NEW cl_gui_splitter_container(                                 parent  = docking                                 rows    = 3

...

郑德鼎

关于作者:郑德鼎

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

来源说明:本文内容由「使用LMStudio本地部署AI模型并发布API接口供SAP调用.md」整理生成,仅用于内部技术分享与学习交流。