mirror of
https://github.com/kuaifan/dootask.git
synced 2026-08-01 19:05:55 +00:00
fix(ai-assistant): respect model visibility settings
This commit is contained in:
parent
44bd541d00
commit
6f22fd2706
@ -24,7 +24,7 @@ negative:
|
|||||||
- 配置入口不在「系统设置」菜单,而在「AI 助手」应用内的设置面板(仅管理员可见)
|
- 配置入口不在「系统设置」菜单,而在「AI 助手」应用内的设置面板(仅管理员可见)
|
||||||
- v1.4.35 起旧接口 setting__ai 已废弃,AI 模型配置全部迁移到 AI 助手应用的设置面板
|
- v1.4.35 起旧接口 setting__ai 已废弃,AI 模型配置全部迁移到 AI 助手应用的设置面板
|
||||||
- 不安装 ai 插件,「AI 助手」应用不出现
|
- 不安装 ai 插件,「AI 助手」应用不出现
|
||||||
last_verified: v1.7.90
|
last_verified: v1.8.69
|
||||||
---
|
---
|
||||||
|
|
||||||
# AI 模型配置
|
# AI 模型配置
|
||||||
@ -40,9 +40,11 @@ DooTask 的 AI 能力由独立的 **ai 插件**(`dootask-ai`)提供。系统
|
|||||||
## 操作步骤
|
## 操作步骤
|
||||||
1. 管理员在应用商店安装并启用 ai 插件(生成 `dootask-ai` 容器)
|
1. 管理员在应用商店安装并启用 ai 插件(生成 `dootask-ai` 容器)
|
||||||
2. 打开「AI 助手」应用,选择要配置的供应商(ChatGPT/OpenAI、Claude、DeepSeek、Gemini、Grok、Ollama、智谱、通义千问、文心一言等)
|
2. 打开「AI 助手」应用,选择要配置的供应商(ChatGPT/OpenAI、Claude、DeepSeek、Gemini、Grok、Ollama、智谱、通义千问、文心一言等)
|
||||||
3. 在设置面板填写:API Key、模型列表(一行一个模型名,可点「使用默认模型列表」一键填入)、默认模型、Base URL(可选)、代理(可选)、Temperature、默认提示词
|
3. 在设置面板填写:API Key、模型列表、默认模型、Base URL(可选)、代理(可选)、Temperature、默认提示词;不希望普通用户选择的模型可设为隐藏
|
||||||
4. 保存后该供应商的模型立即可在 AI 对话中选用,并可被 [[system-setting.ai-bot.howto]] 的「AI 机器人」使用
|
4. 保存后该供应商的模型立即可在 AI 对话中选用,并可被 [[system-setting.ai-bot.howto]] 的「AI 机器人」使用
|
||||||
|
|
||||||
|
AI 助手的模型下拉会按供应商展示全部可见模型,不限制每个供应商的模型数量。设为隐藏的模型不会出现在 AI 助手或 AI 机器人的模型选择列表;如果原默认模型或用户缓存的模型已隐藏,AI 助手会自动改选可见模型。
|
||||||
|
|
||||||
## 与其他模块的关系
|
## 与其他模块的关系
|
||||||
- 提供模型给 [[system-setting.ai-bot.howto]] 的默认模型选择
|
- 提供模型给 [[system-setting.ai-bot.howto]] 的默认模型选择
|
||||||
- 「AI 整理汇报」、AI 助手浮窗等都依赖此处配置
|
- 「AI 整理汇报」、AI 助手浮窗等都依赖此处配置
|
||||||
|
|||||||
@ -622,18 +622,11 @@ export default {
|
|||||||
}
|
}
|
||||||
const defaultModel = data[`${type}_model`] || '';
|
const defaultModel = data[`${type}_model`] || '';
|
||||||
const label = AIBotMap[type] || type;
|
const label = AIBotMap[type] || type;
|
||||||
const options = list.slice(0, 5);
|
|
||||||
if (defaultModel) {
|
|
||||||
const defaultOption = list.find(option => option.value === defaultModel);
|
|
||||||
if (defaultOption && !options.some(option => option.value === defaultOption.value)) {
|
|
||||||
options.push(defaultOption);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const group = {
|
const group = {
|
||||||
type,
|
type,
|
||||||
label,
|
label,
|
||||||
defaultModel,
|
defaultModel,
|
||||||
options: options.map(option => {
|
options: list.map(option => {
|
||||||
const id = `${type}:${option.value}`;
|
const id = `${type}:${option.value}`;
|
||||||
const item = Object.assign({}, option, {
|
const item = Object.assign({}, option, {
|
||||||
id,
|
id,
|
||||||
|
|||||||
3
resources/assets/js/utils/ai.js
vendored
3
resources/assets/js/utils/ai.js
vendored
@ -181,7 +181,7 @@ const withLanguagePreferencePrompt = (prompt) => {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 解析模型列表文本为选项数组
|
* 解析模型列表文本为选项数组
|
||||||
* 新格式:JSON 数组 [{id,name,thinking}];旧格式:每行 "id|name"
|
* 新格式:JSON 数组 [{id,name,thinking,hidden}];旧格式:每行 "id|name"
|
||||||
*/
|
*/
|
||||||
const AIModelNames = (str) => {
|
const AIModelNames = (str) => {
|
||||||
if (typeof str !== 'string') {
|
if (typeof str !== 'string') {
|
||||||
@ -195,6 +195,7 @@ const AIModelNames = (str) => {
|
|||||||
const parsed = JSON.parse(trimmed);
|
const parsed = JSON.parse(trimmed);
|
||||||
if (Array.isArray(parsed)) {
|
if (Array.isArray(parsed)) {
|
||||||
return parsed
|
return parsed
|
||||||
|
.filter(item => !item?.hidden)
|
||||||
.map(item => ({
|
.map(item => ({
|
||||||
value: String(item?.id ?? item?.value ?? '').trim(),
|
value: String(item?.id ?? item?.value ?? '').trim(),
|
||||||
label: String(item?.name ?? item?.label ?? '').trim()
|
label: String(item?.name ?? item?.label ?? '').trim()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user