Bagisto 通义千问模型配置与错误解决方案
一、申请通义千问API密钥
准备工作
-
阿里云账号(需完成实名认证)
-
浏览器访问阿里云控制台
申请步骤
- 登录阿里云账号
-
访问 阿里云官网
-
登录您的账号
- 开通通义千问服务
-
进入 DashScope模型服务灵积控制台
-
点击开通服务(部分服务可能需要完成实名认证)
- 创建API密钥
-
进入API-KEY管理页面
-
点击「创建API密钥」按钮
-
保存生成的API密钥(请妥善保管,密钥仅显示一次)
- 了解免费额度
-
通义千问服务提供约100万tokens的免费额度
-
超出免费额度后将按实际使用量计费
二、Bagisto后台配置
1. 访问Magic AI设置
-
登录Bagisto管理后台
-
导航至「系统设置」→「配置」→「Magic AI」
2. 基础配置
-
启用Magic AI : 勾选「启用」选项
-
API密钥 : 输入从阿里云获取的通义千问API密钥
-
API域名 : 设置为 https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation
3. 模型选择
-
在相关功能配置中选择Qwen系列模型
-
推荐选项:qwen2.5-14b(对应qwen-max)
4. 启用功能模块
-
根据需要启用内容生成、评论翻译等功能
-
配置相应的提示词模板
三、解决常见错误
错误1: 401 Unauthorized (No API-key provided) 错误原因
API请求中缺少认证信息,通义千问API要求在请求头中提供API密钥。
解决方案
修改 `Ollama.php` 文件,添加API密钥认证:
// 获取API密钥
$apiKey = core()->getConfigData('general.magic_ai.settings.api_key');
// 在请求头中添加Authorization
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer ' . $apiKey,
]
错误2: 400 Bad Request (Model not exist) 错误原因
模型名称与通义千问API要求不匹配,请求格式不符合API规范。
解决方案
修改 `Ollama.php` 文件,添加通义千问模型特定处理:
// 检查是否为通义千问模型
$isQwenModel = strpos(strtolower($this->model), 'qwen') !== false;
// 通义千问模型的特殊处理
if ($isQwenModel && strpos($endpoint, 'dashscope.aliyuncs.com') !== false) {
// 映射正确的千问模型名称
$modelMap = [
'qwen2.5-0.5b' => 'qwen-turbo',
'qwen2.5-1.5b' => 'qwen-turbo',
'qwen2.5-3b' => 'qwen-plus',
'qwen2.5-7b' => 'qwen-plus',
'qwen2.5-14b' => 'qwen-max',
'qwen-turbo' => 'qwen-turbo',
'qwen-plus' => 'qwen-plus',
'qwen-max' => 'qwen-max',
];
$qwenModel = $modelMap[strtolower($this->model)] ?? 'qwen-turbo';
// 通义千问API的请求格式
$result = $httpClient->request('POST', $endpoint, [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer ' . $apiKey,
'Content-Type' => 'application/json',
],
'json' => [
'model' => $qwenModel,
'input' => [
'messages' => [
[
'role' => 'user',
'content' => $this->prompt
]
]
],
'parameters' => [
'temperature' => $this->temperature,
'top_p' => 0.95,
]
],
]);
$resultData = json_decode($result->getBody()->getContents(), true);
return $resultData['output']['text'] ?? $resultData['output']['choices'][0]['message']['content'] ?? 'No response';
}
四、完整代码修改
修改文件
- `Ollama.php`
完整修改后代码
<?php
namespace Webkul\MagicAI\Services;
use GuzzleHttp\Client;
class Ollama
{
/**
* New service instance.
*/
public function __construct(
protected string $model,
protected string $prompt,
protected float $temperature,
protected bool $stream,
protected bool $raw,
) {}
/**
* Set LLM prompt text.
*/
public function ask(): string
{
$httpClient = new Client;
$endpoint = core()->getConfigData('general.magic_ai.settings.api_domain');
$apiKey = core()->getConfigData('general.magic_ai.settings.api_key');
// 检查是否为通义千问模型
$isQwenModel = strpos(strtolower($this->model), 'qwen') !== false;
// 通义千问模型的特殊处理
if ($isQwenModel && strpos($endpoint, 'dashscope.aliyuncs.com') !== false) {
// 映射正确的千问模型名称
$modelMap = [
'qwen2.5-0.5b' => 'qwen-turbo',
'qwen2.5-1.5b' => 'qwen-turbo',
'qwen2.5-3b' => 'qwen-plus',
'qwen2.5-7b' => 'qwen-plus',
'qwen2.5-14b' => 'qwen-max',
'qwen-turbo' => 'qwen-turbo',
'qwen-plus' => 'qwen-plus',
'qwen-max' => 'qwen-max',
];
$qwenModel = $modelMap[strtolower($this->model)] ?? 'qwen-turbo';
// 通义千问API的请求格式
$result = $httpClient->request('POST', $endpoint, [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer ' . $apiKey,
'Content-Type' => 'application/json',
],
'json' => [
'model' => $qwenModel,
'input' => [
'messages' => [
[
'role' => 'user',
'content' => $this->prompt
]
]
],
'parameters' => [
'temperature' => $this->temperature,
'top_p' => 0.95,
]
],
]);
$resultData = json_decode($result->getBody()->getContents(), true);
return $resultData['output']['text'] ?? $resultData['output']['choices'][0]['message']['content'] ?? 'No response';
}
// 原始Ollama处理逻辑
$result = $httpClient->request('POST', $endpoint, [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer ' . $apiKey,
],
'json' => [
'model' => $this->model,
'prompt' => $this->prompt,
'raw' => $this->raw,
'stream' => $this->stream,
],
]);
$result = json_decode($result->getBody()->getContents(), true);
return $result['response'] ?? 'No response';
}
}
五、使用说明
- 配置验证
-
完成上述配置后,可通过生成产品描述等功能测试API连接
-
检查是否成功获取AI生成的内容
- 注意事项
-
确保API密钥安全,不要在前端代码中暴露
-
合理设置API请求频率,避免触发限流
-
监控API使用量,及时了解计费情况
- 故障排除
-
如果遇到其他错误,建议检查网络连接和API密钥有效性
-
查看阿里云控制台的API调用日志获取详细错误信息
通过以上配置和修改,Bagisto系统将能够成功集成通义千问模型,实现AI内容生成、评论翻译等功能。