feat: 添加 Grok AI、Ollama AI

This commit is contained in:
kuaifan 2025-02-21 12:08:54 +08:00
parent f78c4a1fb0
commit 5a7f4efa91
5 changed files with 101 additions and 36 deletions

View File

@ -65,7 +65,7 @@ class Setting extends AbstractModel
$value['claude_key'] = $value['claude_token'];
}
$array = [];
$aiList = ['openai', 'claude', 'deepseek', 'gemini', 'zhipu', 'qianwen', 'wenxin'];
$aiList = ['openai', 'claude', 'deepseek', 'gemini', 'grok', 'ollama', 'zhipu', 'qianwen', 'wenxin'];
$fieldList = ['key', 'models', 'model', 'base_url', 'agency', 'temperature', 'system', 'secret'];
foreach ($aiList as $aiName) {
foreach ($fieldList as $fieldName) {
@ -148,27 +148,6 @@ class Setting extends AbstractModel
'deepseek-chat: DeepSeek V3',
'deepseek-reasoner: DeepSeek R1'
],
'wenxin' => [
'ernie-4.0-8k: Ernie 4.0 8K',
'ernie-4.0-8k-latest: Ernie 4.0 8K Latest',
'ernie-4.0-turbo-128k: Ernie 4.0 Turbo 128K',
'ernie-4.0-turbo-8k: Ernie 4.0 Turbo 8K',
'ernie-3.5-128k: Ernie 3.5 128K',
'ernie-3.5-8k: Ernie 3.5 8K',
'ernie-speed-128k: Ernie Speed 128K',
'ernie-speed-8k: Ernie Speed 8K',
'ernie-lite-8k: Ernie Lite 8K',
'ernie-tiny-8k: Ernie Tiny 8K'
],
'qianwen' => [
'qwen-max: QWEN Max',
'qwen-max-latest: QWEN Max Latest',
'qwen-turbo: QWEN Turbo',
'qwen-turbo-latest: QWEN Turbo Latest',
'qwen-plus: QWEN Plus',
'qwen-plus-latest: QWEN Plus Latest',
'qwen-long: QWEN Long'
],
'gemini' => [
'gemini-2.0-flash: Gemini 2.0 Flash',
'gemini-2.0-flash-lite-preview-02-05: Gemini 2.0 Flash-Lite Preview',
@ -177,6 +156,16 @@ class Setting extends AbstractModel
'gemini-1.5-pro: Gemini 1.5 Pro',
'gemini-1.0-pro: Gemini 1.0 Pro'
],
'grok' => [
'grok-2-vision-1212: Grok 2 Vision 1212',
'grok-2-vision: Grok 2 Vision',
'grok-2-vision-latest: Grok 2 Vision Latest',
'grok-2-1212: Grok 2 1212',
'grok-2: Grok 2',
'grok-2-latest: Grok 2 Latest',
'grok-vision-beta: Grok Vision Beta',
'grok-beta: Grok Beta',
],
'zhipu' => [
'glm-4: GLM-4',
'glm-4-plus: GLM-4 Plus',
@ -188,6 +177,27 @@ class Setting extends AbstractModel
'glm-4v-plus: GLM-4V Plus',
'glm-3-turbo: GLM-3 Turbo'
],
'qianwen' => [
'qwen-max: QWEN Max',
'qwen-max-latest: QWEN Max Latest',
'qwen-turbo: QWEN Turbo',
'qwen-turbo-latest: QWEN Turbo Latest',
'qwen-plus: QWEN Plus',
'qwen-plus-latest: QWEN Plus Latest',
'qwen-long: QWEN Long'
],
'wenxin' => [
'ernie-4.0-8k: Ernie 4.0 8K',
'ernie-4.0-8k-latest: Ernie 4.0 8K Latest',
'ernie-4.0-turbo-128k: Ernie 4.0 Turbo 128K',
'ernie-4.0-turbo-8k: Ernie 4.0 Turbo 8K',
'ernie-3.5-128k: Ernie 3.5 128K',
'ernie-3.5-8k: Ernie 3.5 8K',
'ernie-speed-128k: Ernie Speed 128K',
'ernie-speed-8k: Ernie Speed 8K',
'ernie-lite-8k: Ernie Lite 8K',
'ernie-tiny-8k: Ernie Tiny 8K'
],
default => [],
};
}

View File

@ -597,6 +597,10 @@ class User extends AbstractModel
return url("images/avatar/default_deepseek.png");
case 'ai-gemini@bot.system':
return url("images/avatar/default_gemini.png");
case 'ai-grok@bot.system':
return url("images/avatar/default_grok.png");
case 'ai-ollama@bot.system':
return url("images/avatar/default_ollama.png");
case 'ai-zhipu@bot.system':
return url("images/avatar/default_zhipu.png");
case 'bot-manager@bot.system':

View File

@ -84,10 +84,12 @@ class UserBot extends AbstractModel
'ai-openai' => 'ChatGPT',
'ai-claude' => 'Claude',
'ai-deepseek' => 'DeepSeek',
'ai-wenxin' => '文心一言',
'ai-qianwen' => '通义千问',
'ai-gemini' => 'Gemini',
'ai-grok' => 'Grok',
'ai-ollama' => 'Ollama',
'ai-zhipu' => '智谱清言',
'ai-qianwen' => '通义千问',
'ai-wenxin' => '文心一言',
'bot-manager' => '机器人管理',
'meeting-alert' => '会议通知',
'okr-alert' => 'OKR提醒',

View File

@ -47,7 +47,7 @@
</DrawerOverlay>
<!--AI 机器人-->
<DrawerOverlay v-model="aibotShow" placement="right" :size="800">
<DrawerOverlay v-model="aibotShow" placement="right" :size="950">
<div class="ivu-modal-wrap-apply">
<div class="ivu-modal-wrap-apply-title">
{{ $L('AI 机器人') }}
@ -88,21 +88,31 @@
<SystemAibot :type="aibotTabAction" v-if="aibotTabAction == 'gemini'" />
</div>
</TabPane>
<TabPane label="Grok" name="grok">
<div class="aibot-warp">
<SystemAibot :type="aibotTabAction" v-if="aibotTabAction == 'grok'" />
</div>
</TabPane>
<TabPane label="Ollama" name="ollama">
<div class="aibot-warp">
<SystemAibot :type="aibotTabAction" v-if="aibotTabAction == 'ollama'" />
</div>
</TabPane>
<TabPane :label="$L('智谱清言')" name="zhipu">
<div class="aibot-warp">
<SystemAibot :type="aibotTabAction" v-if="aibotTabAction == 'zhipu'" />
</div>
</TabPane>
<TabPane :label="$L('文心一言')" name="wenxin">
<div class="aibot-warp">
<SystemAibot :type="aibotTabAction" v-if="aibotTabAction == 'wenxin'" />
</div>
</TabPane>
<TabPane :label="$L('通义千问')" name="qianwen">
<div class="aibot-warp">
<SystemAibot :type="aibotTabAction" v-if="aibotTabAction == 'qianwen'" />
</div>
</TabPane>
<TabPane :label="$L('文心一言')" name="wenxin">
<div class="aibot-warp">
<SystemAibot :type="aibotTabAction" v-if="aibotTabAction == 'wenxin'" />
</div>
</TabPane>
</Tabs>
</div>
</div>
@ -279,24 +289,36 @@ export default {
src: $A.mainUrl('images/avatar/default_gemini.png'),
desc: `${this.$L('我是由Google开发的生成式人工智能聊天机器人。')}${this.$L('它基于同名的Gemini系列大型语言模型。')}${this.$L('是应对OpenAI公司开发的ChatGPT聊天机器人的崛起而开发的。')}`
},
{
value: "grok",
label: "Grok",
src: $A.mainUrl('images/avatar/default_grok.png'),
desc: this.$L('Grok是由xAI开发的生成式人工智能聊天机器人旨在通过实时回答用户问题来提供帮助。')
},
{
value: "ollama",
label: "Ollama",
src: $A.mainUrl('images/avatar/default_ollama.png'),
desc: this.$L('Ollama 是一个轻量级、可扩展的框架,旨在让用户能够在本地机器上构建和运行大型语言模型。')
},
{
value: "zhipu",
label: "Zhipu",
src: $A.mainUrl('images/avatar/default_zhipu.png'),
desc: `${this.$L('我是智谱清言,是智谱 AI 公司于2023训练的语言模型。')}${this.$L('我的任务是针对用户的问题和要求提供适当的答复和支持。')}`
},
{
value: "wenxin",
label: "Wenxin",
src: $A.mainUrl('avatar/%E6%96%87%E5%BF%83.png'),
desc: this.$L('我是文心一言英文名是ERNIE Bot。我能够与人对话互动回答问题协助创作高效便捷地帮助人们获取信息、知识和灵感。')
},
{
value: "qianwen",
label: "Qianwen",
src: $A.mainUrl('avatar/%E9%80%9A%E4%B9%89%E5%8D%83%E9%97%AE.png'),
desc: this.$L('我是达摩院自主研发的超大规模语言模型,能够回答问题、创作文字,还能表达观点、撰写代码。')
},
{
value: "wenxin",
label: "Wenxin",
src: $A.mainUrl('avatar/%E6%96%87%E5%BF%83.png'),
desc: this.$L('我是文心一言英文名是ERNIE Bot。我能够与人对话互动回答问题协助创作高效便捷地帮助人们获取信息、知识和灵感。')
},
],
aibotTabAction: "openai",
aibotShow: false,

View File

@ -175,6 +175,32 @@ export default {
}
]
},
grok: {
extraFields: [
{
prop: "key",
placeholder: "Grok API Key",
link: "https://docs.x.ai/docs/tutorial"
},
{
prop: "models",
link: "https://docs.x.ai/docs/models"
}
]
},
ollama: {
extraFields: [
{
prop: "key",
placeholder: "Ollama API Key",
},
{
prop: "models",
link: "https://ollama.com/models",
functions: null,
}
]
},
zhipu: {
extraFields: [
{
@ -341,6 +367,7 @@ export default {
spinner: 600,
}).then(({data}) => {
this.formData[prop] = data.models.join('\n');
$A.messageSuccess('获取成功');
}).catch(({msg}) => {
$A.modalError(msg || '获取失败');
});