
先把本地大模型的API服务开起来
我这边用ollama跑本地模型,之前试过别的本地部署方案,又是装依赖又是配环境变量太麻烦,ollama装完基本不用改设置,敲两行命令就能把接口服务拉起来。
安装完ollama之后,先在终端拉你要用的模型,再启动服务:
ollama pull qwen2:7b
ollama serve
默认服务会监听本地11434端口,启动完在浏览器访问http://127.0.0.1:11434 能看到正常返回文本,就说明服务没问题。响应速度看设备配置,我那台五年前的游戏本跑7b参数的模型也不卡,没必要一开始就追着大参数模型下。
易语言端的核心代码
不用找乱七八糟的第三方支持库,就用自带的互联网支持库发POST请求就行,整个流程没什么复杂的:
- 新建Windows窗口程序,拖两个编辑框(一个做输入区一个做输出区)、一个按钮,界面不用费时间调,自己用的工具够使就行
- 记得把所有请求、返回的内容都做UTF-8编码转换,易语言默认是GBK编码,之前试过直接传中文会返回乱码,卡了我快二十分钟才找到原因
- 请求地址填
http://127.0.0.1:11434/api/generate,请求方式选POST,请求头带上Content-Type: application/json就行
按钮点击事件的核心代码我贴在下面,基本复制过去改改控件名就能用:
.版本 2
.支持库 internet
.子程序 _按钮1_被单击
.局部变量 提交数据, 文本型
.局部变量 返回文本, 文本型
提交数据 = "{" + #引号 + "model" + #引号 + ":" + #引号 + "qwen2:7b" + #引号 + "," + #引号 + "prompt" + #引号 + ":" + #引号 + 编码_Utf8编码 (编辑框1.内容) + #引号 + "," + #引号 + "stream" + #引号 + ":false}"
返回文本 = 到文本 (HTTP读文件 ("http://127.0.0.1:11434/api/generate", 1, 提交数据, ))
编辑框2.内容 = 编码_Utf8解码 (取文本中间 (返回文本, 寻找文本 (返回文本, #引号 + "response" + #引号 + ":", , 假) + 12, 寻找文本 (返回文本, "," + #引号 + "done" + #引号, , 假) - 寻找文本 (返回文本, #引号 + "response" + #引号 + ":", , 假) - 12))
小提示:要是你没装精易模块,就用易语言自带的编码转换支持库自己写UTF-8编解码函数,我这边是图省事儿直接用了模块里的现成函数,怎么方便怎么来。
流式输出的功能我还没细测,现在非流式的响应速度自己用完全够,不用连外网,也不用担心对话内容被上传,平时写点小脚本、查个语法问题挺顺手。要是跑的时候提示端口被占用,去任务管理器杀掉残留的ollama进程重启就行。
评论一下?