Commit e4afd59e by YeYuheng Committed by GitHub

Handle Agent V2 helper Pro modal (#7168)

* Handle Agent V2 helper Pro modal

* Document Agent Skill assisted generation availability

* Fix website sync create modal layout

* Update Skill preview Pro prompt
parent 2eeea151
...@@ -11,32 +11,33 @@ FastGPT 商业版是基于 FastGPT 社区版的增强版本,增加了一些独 ...@@ -11,32 +11,33 @@ FastGPT 商业版是基于 FastGPT 社区版的增强版本,增加了一些独
## 功能差异 ## 功能差异
| | 社区版 | 商业版 | 云服务版 | | | 社区版 | 商业版 | 云服务版 |
| ------------------------------ | ------------------------------------------ | ------ | ------- | | ------------------------------ | ---------------------------------------- | ------ | -------- |
| **应用构建** | | | | | **应用构建** | | | |
| 工作流编排 | ✅ | ✅ | ✅ | | 工作流编排 | ✅ | ✅ | ✅ |
| 分享链接和 API | ✅ | ✅ | ✅ | | 分享链接和 API | ✅ | ✅ | ✅ |
| 应用发布安全配置 | ❌ | ✅ | ✅ | | 应用发布安全配置 | ❌ | ✅ | ✅ |
| 第三方应用发布(飞书、公众号) | ❌ | ✅ | ✅ | | 第三方应用发布(飞书、公众号) | ❌ | ✅ | ✅ |
| 运行日志看板 | ❌ | ✅ | ✅ | | 运行日志看板 | ❌ | ✅ | ✅ |
| 应用评测 | ❌ | ✅ | ✅ | | 应用评测 | ❌ | ✅ | ✅ |
| **知识库** | | | | | Agent 与 Skill 辅助生成 | ❌ | ✅ | ✅ |
| 知识库 | ✅ | ✅ | ✅ | | **知识库** | | | |
| 第三方知识库定时同步 | ❌ | ✅ | ✅ | | 知识库 | ✅ | ✅ | ✅ |
| 知识库索引增强 | ❌ | ✅ | ✅ | | 第三方知识库定时同步 | ❌ | ✅ | ✅ |
| web站点同步 | ❌ | ✅ | ✅ | | 知识库索引增强 | ❌ | ✅ | ✅ |
| 图片知识库 | ❌ | ✅ | ✅ | | web 站点同步 | ❌ | ✅ | ✅ |
| **通用功能** | | | | | 图片知识库 | ❌ | ✅ | ✅ |
| 多模型配置 | ✅ | ✅ | ✅ | | **通用功能** | | | |
| 模型日志看板 | ✅ | ✅ | ✅ | | 多模型配置 | ✅ | ✅ | ✅ |
| 模型内容审核 | ❌ | ✅ | ✅ | | 模型日志看板 | ✅ | ✅ | ✅ |
| **企业级功能** | | | | | 模型内容审核 | ❌ | ✅ | ✅ |
| 自定义版权信息 | ❌ | ✅ | 设计中 | | **企业级功能** | | | |
| 多租户与支付 | ❌ | ✅ | ✅ | | 自定义版权信息 | ❌ | ✅ | 设计中 |
| 团队空间 & 权限 | ❌ | ✅ | ✅ | | 多租户与支付 | ❌ | ✅ | ✅ |
| 管理后台 | ❌ | ✅ | 不需要 | | 团队空间 & 权限 | ❌ | ✅ | ✅ |
| SSO 登录 | ❌ | ✅ | 设计中 | | 管理后台 | ❌ | ✅ | 不需要 |
| 商业授权 | [查看开源协议](./opensource/license.mdx) | 完整 | 完整 | | SSO 登录 | ❌ | ✅ | 设计中 |
| 商业授权 | [查看开源协议](./opensource/license.mdx) | 完整 | 完整 |
## 商业版软件价格 ## 商业版软件价格
...@@ -44,24 +45,24 @@ FastGPT 商业版软件根据不同的部署方式,分为 3 类收费模式。 ...@@ -44,24 +45,24 @@ FastGPT 商业版软件根据不同的部署方式,分为 3 类收费模式。
**共有服务** **共有服务**
1. Saas 商业授权许可 - 在商业版有效期内,可提供任意形式的商业服务。 1. SaaS 商业授权许可 - 在商业版有效期内,可提供任意形式的商业服务。
2. 首次免费帮助部署。 2. 首次免费帮助部署。
3. 优先问题工单处理。 3. 优先问题工单处理。
**特有服务** **特有服务**
| 部署方式 | 特有服务 | 上线时长 | 标品价格 | | 部署方式 | 特有服务 | 上线时长 | 标品价格 |
| ---------------------- | ------------------------------------------------- | -------- | ----------------------------------------------------------------------------------------------------- | | ----------------------- | ------------------------------------------------- | -------- | ----------------------------------------------------------------------------------------------------- |
| Sealos全托管 | 1. 有效期内免费升级。<br />2. 免运维服务&数据库。 | 半天 | 10000元起/月(3个月起)<br />或<br />120000元起/年<br />8C32G 资源,额外资源另外收费。 | | Sealos 全托管 | 1. 有效期内免费升级。<br />2. 免运维服务&数据库。 | 半天 | 10000 元起/月(3 个月起)<br />或<br />120000 元起/年<br />8C32G 资源,额外资源另外收费。 |
| Sealos全托管(多节点) | 1. 有效期内免费升级。<br />2. 免运维服务&数据库。 | 半天 | 22000元起/月(3个月起)<br />或<br />264000元起/年<br />32C128G 资源,额外资源另外收费。 | | Sealos 全托管(多节点) | 1. 有效期内免费升级。<br />2. 免运维服务&数据库。 | 半天 | 22000 元起/月(3 个月起)<br />或<br />264000 元起/年<br />32C128G 资源,额外资源另外收费。 |
| 自有服务器部署 | 1. 6个版本免费升级支持。 | 14天内 | 具体价格和优惠可[联系咨询](https://fael3z0zfze.feishu.cn/share/base/form/shrcnjJWtKqjOI9NbQTzhNyzljc) | | 自有服务器部署 | 1. 6 个版本免费升级支持。 | 14 天内 | 具体价格和优惠可[联系咨询](https://fael3z0zfze.feishu.cn/share/base/form/shrcnjJWtKqjOI9NbQTzhNyzljc) |
<Alert icon="🤖" context="success"> <Alert icon="🤖" context="success">
- 6个版本的升级服务不是指只能用 6 个版本,而是指依赖 FastGPT - 6 个版本的升级服务不是指只能用 6 个版本,而是指依赖 FastGPT
团队提供的升级服务。大部分时候,建议自行升级,也不麻烦。 - 团队提供的升级服务。大部分时候,建议自行升级,也不麻烦。-
全托管版本适合技术人员紧缺的团队,仅需关注业务推动,无需关心服务是否正常运行。 - 全托管版本适合技术人员紧缺的团队,仅需关注业务推动,无需关心服务是否正常运行。-
自有服务器部署版可以完全部署在自己服务器中。 - 自有服务器部署版可以完全部署在自己服务器中。-
单机版适合中小团队对内提供服务,需要自己维护数据库备份等。 - 单机版适合中小团队对内提供服务,需要自己维护数据库备份等。-
高可用版适合对外提供在线服务,包含可视化监控、多副本、负载均衡、数据库自动备份等生产环境的基础设施。 高可用版适合对外提供在线服务,包含可视化监控、多副本、负载均衡、数据库自动备份等生产环境的基础设施。
</Alert> </Alert>
...@@ -77,7 +78,7 @@ FastGPT 商业版软件根据不同的部署方式,分为 3 类收费模式。 ...@@ -77,7 +78,7 @@ FastGPT 商业版软件根据不同的部署方式,分为 3 类收费模式。
### 技术服务费(定开、维护、迁移、三方接入等) ### 技术服务费(定开、维护、迁移、三方接入等)
2000 ~ 3000元/人/天 2000 ~ 3000 元/人/天
### 更新升级费用 ### 更新升级费用
......
...@@ -928,9 +928,9 @@ ...@@ -928,9 +928,9 @@
"plugin.Invalid URL": "Invalid URL", "plugin.Invalid URL": "Invalid URL",
"plugin.Search_app": "Search App", "plugin.Search_app": "Search App",
"price_over_wx_limit": "Exceed payment provider limit: WeChat Pay only supports less than 6,000 yuan", "price_over_wx_limit": "Exceed payment provider limit: WeChat Pay only supports less than 6,000 yuan",
"pro_modal_feature_1": "External organization structure integration and multi-tenancy", "pro_modal_feature_1": "Intelligent assisted generation for Agents and Skills",
"pro_modal_feature_2": "Team-exclusive application showcase page", "pro_modal_feature_2": "Website sync and third-party knowledge bases",
"pro_modal_feature_3": "Knowledge base enhanced indexing", "pro_modal_feature_3": "Multi-tenancy, organization structure, and audit logs",
"pro_modal_later_button": "Maybe Later", "pro_modal_later_button": "Maybe Later",
"pro_modal_subtitle": "Join the business edition now to unlock more premium features", "pro_modal_subtitle": "Join the business edition now to unlock more premium features",
"pro_modal_title": "Business Edition Exclusive", "pro_modal_title": "Business Edition Exclusive",
......
...@@ -76,5 +76,8 @@ ...@@ -76,5 +76,8 @@
"permission.des.read": "Can view Agent Skill", "permission.des.read": "Can view Agent Skill",
"permission.des.write": "Can edit Agent Skill", "permission.des.write": "Can edit Agent Skill",
"permission.des.manage": "Can manage Agent Skill and collaborators", "permission.des.manage": "Can manage Agent Skill and collaborators",
"empty_state_tip": "Tell AI how to modify the Skill,\nor let AI run the Skill to see the effect" "empty_state_tip": "Tell AI how to modify the Skill,\nor let AI run the Skill to see the effect",
"empty_state_community_prefix": "Preview Skill results through chat. ",
"empty_state_community_upgrade": "Upgrade to the Commercial Edition",
"empty_state_community_suffix": " to generate Skills with AI."
} }
...@@ -928,9 +928,9 @@ ...@@ -928,9 +928,9 @@
"plugin.Invalid URL": "URL 无效", "plugin.Invalid URL": "URL 无效",
"plugin.Search_app": "搜索应用", "plugin.Search_app": "搜索应用",
"price_over_wx_limit": "超出支付提供商限额:微信支付仅支持 6000 元以下", "price_over_wx_limit": "超出支付提供商限额:微信支付仅支持 6000 元以下",
"pro_modal_feature_1": "外部组织架构接入与多租户", "pro_modal_feature_1": "Agent与Skill的智能辅助生成",
"pro_modal_feature_2": "团队专属的应用展示页", "pro_modal_feature_2": "web站点同步与第三方知识库",
"pro_modal_feature_3": "知识库增强索引", "pro_modal_feature_3": "多租户、组织架构与审计日志",
"pro_modal_later_button": "我再想想", "pro_modal_later_button": "我再想想",
"pro_modal_subtitle": "即刻加入商业版,解锁更多高级功能", "pro_modal_subtitle": "即刻加入商业版,解锁更多高级功能",
"pro_modal_title": "商业版专享", "pro_modal_title": "商业版专享",
......
...@@ -76,5 +76,8 @@ ...@@ -76,5 +76,8 @@
"permission.des.read": "可查看 Agent Skill", "permission.des.read": "可查看 Agent Skill",
"permission.des.write": "可编辑 Agent Skill", "permission.des.write": "可编辑 Agent Skill",
"permission.des.manage": "可管理 Agent Skill 和协作者", "permission.des.manage": "可管理 Agent Skill 和协作者",
"empty_state_tip": "告诉 AI 如何修改 Skill,\n或让 AI 运行 Skill 查看效果" "empty_state_tip": "告诉 AI 如何修改 Skill,\n或让 AI 运行 Skill 查看效果",
"empty_state_community_prefix": "通过对话预览 Skill 效果,",
"empty_state_community_upgrade": "升级商业版",
"empty_state_community_suffix": "可使用 AI 生成 Skill。"
} }
...@@ -918,9 +918,9 @@ ...@@ -918,9 +918,9 @@
"plugin.Invalid URL": "無效的網址", "plugin.Invalid URL": "無效的網址",
"plugin.Search_app": "搜尋應用程式", "plugin.Search_app": "搜尋應用程式",
"price_over_wx_limit": "超出支付提供商限額:微信支付僅支持 6000 元以下", "price_over_wx_limit": "超出支付提供商限額:微信支付僅支持 6000 元以下",
"pro_modal_feature_1": "外部組織架構接入與多租戶", "pro_modal_feature_1": "Agent 與 Skill 的智能輔助生成",
"pro_modal_feature_2": "團隊專屬的應用展示頁", "pro_modal_feature_2": "Web 站點同步與第三方知識庫",
"pro_modal_feature_3": "知識庫增強索引", "pro_modal_feature_3": "多租戶、組織架構與審計日誌",
"pro_modal_later_button": "我再想想", "pro_modal_later_button": "我再想想",
"pro_modal_subtitle": "即刻加入商業版,解鎖更多高級功能", "pro_modal_subtitle": "即刻加入商業版,解鎖更多高級功能",
"pro_modal_title": "商業版專享", "pro_modal_title": "商業版專享",
......
...@@ -75,5 +75,9 @@ ...@@ -75,5 +75,9 @@
"no_current_version": "Skill 暫無可用版本,請重新建立或匯入後再編輯。", "no_current_version": "Skill 暫無可用版本,請重新建立或匯入後再編輯。",
"permission.des.read": "可查看 Agent Skill", "permission.des.read": "可查看 Agent Skill",
"permission.des.write": "可編輯 Agent Skill", "permission.des.write": "可編輯 Agent Skill",
"permission.des.manage": "可管理 Agent Skill 和協作者" "permission.des.manage": "可管理 Agent Skill 和協作者",
"empty_state_tip": "告訴 AI 如何修改 Skill,\n或讓 AI 運行 Skill 查看效果",
"empty_state_community_prefix": "透過對話預覽 Skill 效果,",
"empty_state_community_upgrade": "升級商業版",
"empty_state_community_suffix": "可使用 AI 生成 Skill。"
} }
...@@ -29,6 +29,7 @@ import { useSystemStore } from '@/web/common/system/useSystemStore'; ...@@ -29,6 +29,7 @@ import { useSystemStore } from '@/web/common/system/useSystemStore';
import { useUserStore } from '@/web/support/user/useUserStore'; import { useUserStore } from '@/web/support/user/useUserStore';
import { useToast } from '@fastgpt/web/hooks/useToast'; import { useToast } from '@fastgpt/web/hooks/useToast';
import ChatVariableButton from '@/pageComponents/chat/ChatWindow/ChatVariableButton'; import ChatVariableButton from '@/pageComponents/chat/ChatWindow/ChatVariableButton';
import ProModal from '@/components/ProTip/ProModal';
type Props = { type Props = {
appForm: AppFormEditFormType; appForm: AppFormEditFormType;
...@@ -51,6 +52,7 @@ const ChatTest = ({ appForm, setAppForm, setRenderEdit, form2WorkflowFn }: Props ...@@ -51,6 +52,7 @@ const ChatTest = ({ appForm, setAppForm, setRenderEdit, form2WorkflowFn }: Props
}); });
const [activeTab, setActiveTab] = useSafeState<'helper' | 'chat_debug'>('chat_debug'); const [activeTab, setActiveTab] = useSafeState<'helper' | 'chat_debug'>('chat_debug');
const [proModalOpen, setProModalOpen] = useSafeState(false);
const HelperBotRef = useRef<HelperBotRefType>(null); const HelperBotRef = useRef<HelperBotRefType>(null);
const { appDetail } = useContextSelector(AppContext, (v) => v); const { appDetail } = useContextSelector(AppContext, (v) => v);
...@@ -154,6 +156,10 @@ const ChatTest = ({ appForm, setAppForm, setRenderEdit, form2WorkflowFn }: Props ...@@ -154,6 +156,10 @@ const ChatTest = ({ appForm, setAppForm, setRenderEdit, form2WorkflowFn }: Props
]} ]}
value={activeTab} value={activeTab}
onChange={(value) => { onChange={(value) => {
if (value === 'helper' && !feConfigs?.isPlus) {
setProModalOpen(true);
return;
}
setActiveTab(value); setActiveTab(value);
}} }}
/> />
...@@ -253,6 +259,9 @@ const ChatTest = ({ appForm, setAppForm, setRenderEdit, form2WorkflowFn }: Props ...@@ -253,6 +259,9 @@ const ChatTest = ({ appForm, setAppForm, setRenderEdit, form2WorkflowFn }: Props
)} )}
<SandboxEditorModal /> <SandboxEditorModal />
{!feConfigs?.isPlus && (
<ProModal isOpen={proModalOpen} onClose={() => setProModalOpen(false)} />
)}
</Flex> </Flex>
); );
}; };
......
...@@ -21,6 +21,7 @@ import { AppTypeEnum } from '@fastgpt/global/core/app/constants'; ...@@ -21,6 +21,7 @@ import { AppTypeEnum } from '@fastgpt/global/core/app/constants';
import type { AppFileSelectConfigType } from '@fastgpt/global/core/app/type/config.schema'; import type { AppFileSelectConfigType } from '@fastgpt/global/core/app/type/config.schema';
import type { StartChatFnProps } from '@/components/core/chat/ChatContainer/type'; import type { StartChatFnProps } from '@/components/core/chat/ChatContainer/type';
import { useMemoizedFn } from 'ahooks'; import { useMemoizedFn } from 'ahooks';
import ProModal from '@/components/ProTip/ProModal';
const fileSelectConfig: AppFileSelectConfigType = { const fileSelectConfig: AppFileSelectConfigType = {
maxFiles: 10, maxFiles: 10,
...@@ -41,10 +42,11 @@ const SkillPreview = () => { ...@@ -41,10 +42,11 @@ const SkillPreview = () => {
chatId: v.chatId chatId: v.chatId
})); }));
const { llmModelList, defaultModels } = useSystemStore(); const { llmModelList, defaultModels, feConfigs } = useSystemStore();
const setChatBoxData = useContextSelector(ChatItemContext, (v) => v.setChatBoxData); const setChatBoxData = useContextSelector(ChatItemContext, (v) => v.setChatBoxData);
const defaultModel = defaultModels.llm?.model || llmModelList[0]?.model || ''; const defaultModel = defaultModels.llm?.model || llmModelList[0]?.model || '';
const [selectedModel, setSelectedModel] = useState(''); const [selectedModel, setSelectedModel] = useState('');
const [proModalOpen, setProModalOpen] = useState(false);
const userSelectedModelRef = useRef(false); const userSelectedModelRef = useRef(false);
const modelSelectList = useMemo( const modelSelectList = useMemo(
...@@ -162,10 +164,28 @@ const SkillPreview = () => { ...@@ -162,10 +164,28 @@ const SkillPreview = () => {
lineHeight="20px" lineHeight="20px"
whiteSpace="pre-wrap" whiteSpace="pre-wrap"
> >
{t('empty_state_tip')} {feConfigs?.isPlus ? (
t('empty_state_tip')
) : (
<>
{t('empty_state_community_prefix')}
<Box
as="button"
type="button"
color="primary.600"
fontWeight={500}
cursor="pointer"
onClick={() => setProModalOpen(true)}
>
{t('empty_state_community_upgrade')}
</Box>
{t('empty_state_community_suffix')}
</>
)}
</Flex> </Flex>
} }
/> />
<ProModal isOpen={proModalOpen} onClose={() => setProModalOpen(false)} />
</Box> </Box>
); );
}; };
......
...@@ -112,11 +112,7 @@ const CreateModal = ({ ...@@ -112,11 +112,7 @@ const CreateModal = ({
</> </>
} }
> >
<Flex <Flex flexDirection={'column'} alignItems={'flex-start'}>
flexDirection={'column'}
alignItems={'flex-start'}
minH={showApiDatasetForm ? undefined : '338px'}
>
<Flex w={'100%'} flexDirection={'column'} gap={4}> <Flex w={'100%'} flexDirection={'column'} gap={4}>
<Box w={'100%'}> <Box w={'100%'}>
<Flex justify={'space-between'}> <Flex justify={'space-between'}>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment