thinkphp插件接入大模型API教程【紧跟潮流】
ThinkPHP无现成AI插件,需手写HTTP客户端服务类转发请求并解析JSON。先用curl探测API连通性,以讯飞为例构建服务类,注意字段限制。百度文心需两步令牌及缓存。OpenAI兼容接口统一替换base_uri和模型名,流式响应需逐行解析SSE。
想在ThinkPHP项目里接入通义千问、讯飞星火或者Ollama这些大模型API,但又被各种SDK搞晕、卡在鉴权和流式响应上?我先直接告诉你一个核心事实:别被“插件”这个词误导了。ThinkPHP压根就没有什么现成的AI插件可用,你能做的是写一个可复用的HTTP客户端服务类。它不跑模型,只负责精准转发请求和解析JSON回来。

确认通信链路是否通
别急着上手写代码。先打开终端,拿curl探测一下目标API的连通性,这是最保险的一步。
拿Ollama举例,本地服务就用这条命令:
curl -X GET http://127.0.0.1:11434/api/tags
如果是讯飞Lite接口:
curl -X GET https://spark-api-open.xf-yun.com/v1/chat/completions -H "Authorization: Bearer your_api_password"
如果返回了包含models数组的JSON,或者看到了401错误,都说明网络和基础认证已经就绪。但要是返回curl: (7) Failed to connect,那你就得逐一排查:Ollama是否在运行、防火墙有没有放开端口、讯飞那边复制的API密码是否一字不差——【APIPassword必须严格一致,末尾多了个空格都直接导致401】。
手写基础服务类(以讯飞Spark Lite为例)
在app/service目录下手动新建一个XingHuoService.php,按以下步骤走就行。
第一件事,声明命名空间和依赖。然后定义私有属性$baseUrl、$apiPassword和$client。接着在__construct()里面从配置中读取api_password,同时用Guzzle初始化Client——【headers里必须显式写上Content-Type和Accept为application/json,漏掉任何一个字段,都会返回400 Bad Request】。
关键一步:写chat()方法,构造$params数组。这里要特别注意,model字段必须填"lite",不能省略。content传用户输入字符串,但千万别拼接system提示词——讯飞Lite不支持role=system这个字段,传了就直接拒掉。
最后,用$client->post()发送请求,捕获可能出现的RequestException,返回json_decode后的数组,然后直接从$result['choices'][0]['message']['content']拿文本内容即可。
对接百度文心一言(需两步令牌)
方法一:手动管理access_token
新建一个BaiduWenxinService。先调/oauth/2.0/token接口,用apiKey和secretKey去换access_token。需要注意,返回的expires_in是秒数,你必须缓存这个token并在过期前刷新——【不加缓存的话,每次请求都得重新去拿token,百度那边会触发限频】。
方法二:用think-ai官方Client(仅限ThinkPHP 6.1+)
用composer安装topthink/think-ai,然后在.env里配置BAIDU_API_KEY和BAIDU_SECRET_KEY。控制器里直接调用$client = new think\ai\Client(); $client->chat()->completions(['model'=>'ernie-bot-4', 'messages'=>[['role'=>'user','content'=>'你好']]])。操作看起来简单,但必须确保.env里BAIDU_API_KEY的值没有中文引号、换行或BOM头,否则token获取会静默失败。
统一处理OpenAI兼容接口(Ollama/DeepSeek/Fireworks)
所有兼容OpenAI格式的接口,其实共用一套请求结构,你只需要替换base_uri和model名就行。
流程很简单:用Guzzle设置base_uri为https://api.deepseek.com/v1/,然后发送POST到chat/completions,请求体json里model填deepseek-r1,Authorization头填Bearer sk-xxx。注意,Ollama是个例外。它的base_uri是http://127.0.0.1:11434,接口路径是/api/chat,请求体用model和messages字段,不需要Authorization头,格式是{"model":"qwen2:1.5b","messages":[{"role":"user","content":"hi"}]}——【Ollama不校验token,但model名必须和ollama list输出的名字完全一致,qwen2:1.5b ≠ qwen2:1.5b-q4_k_m】。
流式响应这块需要单独处理。开启stream=>true后,响应体是SSE格式,每行以data:开头。你不能直接对整个响应体做json_decode,必须逐行读取、剥离data:前缀,然后再json_decode。这一点处理不当,整个接入流程都会卡住。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















