Browse Source

演示前

master
ma-zhongxu 10 months ago
parent
commit
77196d97c9
  1. 14
      frontend/index.html
  2. BIN
      frontend/public/favicon.png
  3. 10
      frontend/src/App.jsx
  4. 2
      frontend/src/components/DefaultChat/index.jsx
  5. 2
      frontend/src/components/Modals/ManageWorkspace/Documents/Directory/index.jsx
  6. 4
      frontend/src/components/Modals/ManageWorkspace/Documents/WorkspaceDirectory/WorkspaceFileRow/index.jsx
  7. 64
      frontend/src/components/SettingsSidebar/index.jsx
  8. 2
      frontend/src/components/SpeechToText/BrowserNative/index.jsx
  9. 2
      frontend/src/components/TextToSpeech/BrowserNative/index.jsx
  10. 2
      frontend/src/components/WorkspaceChat/ChatContainer/PromptInput/AgentMenu/index.jsx
  11. 4
      frontend/src/components/WorkspaceChat/ChatContainer/PromptInput/index.jsx
  12. 4
      frontend/src/hooks/useTheme.js
  13. 122
      frontend/src/locales/zh/common.js
  14. 3
      frontend/src/pages/DataAnalysis/DataAnalysis.css
  15. 161
      frontend/src/pages/DataAnalysis/index.jsx
  16. 6
      frontend/src/pages/GeneralSettings/Appearance/CustomAppName/index.jsx
  17. 19
      frontend/src/pages/GeneralSettings/Appearance/CustomSiteSettings/index.jsx
  18. 5
      frontend/src/pages/GeneralSettings/Appearance/LanguagePreference/index.jsx
  19. 4
      frontend/src/pages/GeneralSettings/Appearance/ShowScrollbar/index.jsx
  20. 7
      frontend/src/pages/GeneralSettings/Appearance/SupportEmail/index.jsx
  21. 4
      frontend/src/pages/GeneralSettings/Appearance/ThemePreference/index.jsx
  22. 15
      frontend/src/pages/GeneralSettings/AudioPreference/stt.jsx
  23. 15
      frontend/src/pages/GeneralSettings/AudioPreference/tts.jsx
  24. 13
      frontend/src/pages/GeneralSettings/BrowserExtensionApiKey/NewBrowserExtensionApiKeyModal/index.jsx
  25. 17
      frontend/src/pages/GeneralSettings/BrowserExtensionApiKey/index.jsx
  26. 4
      frontend/src/pages/GeneralSettings/LLMPreference/index.jsx
  27. 2
      frontend/src/pages/GeneralSettings/VectorDatabase/index.jsx
  28. 4
      frontend/src/pages/Home/index.jsx
  29. 114
      frontend/src/pages/ReportGeneration/index.jsx
  30. 212
      frontend/src/pages/Tendency/index.jsx
  31. 57
      frontend/src/pages/Yuqingfenxi/index.jsx
  32. 3
      frontend/src/utils/paths.js
  33. 4
      locales/README.zh-CN.md
  34. 16
      server/utils/boot/MetaGenerator.js

14
frontend/index.html

@ -5,24 +5,24 @@
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/favicon.png" /> <link rel="icon" type="image/svg+xml" href="/favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>AnythingLLM | Your personal LLM trained on anything</title>
<title>琛海AI | 大模型私有化训练</title>
<meta name="title" content="AnythingLLM | Your personal LLM trained on anything">
<meta name="description" content="AnythingLLM | Your personal LLM trained on anything">
<meta name="title" content="琛海AI | 大模型私有化训练">
<meta name="description" content="琛海AI | 大模型私有化训练">
<!-- Facebook --> <!-- Facebook -->
<meta property="og:type" content="website"> <meta property="og:type" content="website">
<meta property="og:url" content="https://anythingllm.com"> <meta property="og:url" content="https://anythingllm.com">
<meta property="og:title" content="AnythingLLM | Your personal LLM trained on anything">
<meta property="og:description" content="AnythingLLM | Your personal LLM trained on anything">
<meta property="og:title" content="琛海AI | 大模型私有化训练">
<meta property="og:description" content="琛海AI | 大模型私有化训练">
<meta property="og:image" <meta property="og:image"
content="https://raw.githubusercontent.com/Mintplex-Labs/anything-llm/master/images/promo.png"> content="https://raw.githubusercontent.com/Mintplex-Labs/anything-llm/master/images/promo.png">
<!-- Twitter --> <!-- Twitter -->
<meta property="twitter:card" content="summary_large_image"> <meta property="twitter:card" content="summary_large_image">
<meta property="twitter:url" content="https://anythingllm.com"> <meta property="twitter:url" content="https://anythingllm.com">
<meta property="twitter:title" content="AnythingLLM | Your personal LLM trained on anything">
<meta property="twitter:description" content="AnythingLLM | Your personal LLM trained on anything">
<meta property="twitter:title" content="琛海AI | 大模型私有化训练">
<meta property="twitter:description" content="琛海AI | 大模型私有化训练">
<meta property="twitter:image" <meta property="twitter:image"
content="https://raw.githubusercontent.com/Mintplex-Labs/anything-llm/master/images/promo.png"> content="https://raw.githubusercontent.com/Mintplex-Labs/anything-llm/master/images/promo.png">

BIN
frontend/public/favicon.png

Before

Width: 200  |  Height: 200  |  Size: 3.5 KiB

After

Width: 626  |  Height: 626  |  Size: 40 KiB

10
frontend/src/App.jsx

@ -23,6 +23,8 @@ const Home = lazy(() => import("@/pages/Home")); // 新首页
const PolicyLibrary = lazy(() => import("@/pages/PolicyLibrary")); // const PolicyLibrary = lazy(() => import("@/pages/PolicyLibrary")); //
const DataAnalysis = lazy(() => import("@/pages/DataAnalysis")); // const DataAnalysis = lazy(() => import("@/pages/DataAnalysis")); //
const Tendency = lazy(() => import("@/pages/Tendency")); // const Tendency = lazy(() => import("@/pages/Tendency")); //
const Yuqingfenxi = lazy(() => import("@/pages/Yuqingfenxi")); //
const ReportGeneration = lazy(() => import("@/pages/ReportGeneration")); //
const InvitePage = lazy(() => import("@/pages/Invite")); const InvitePage = lazy(() => import("@/pages/Invite"));
const WorkspaceChat = lazy(() => import("@/pages/WorkspaceChat")); const WorkspaceChat = lazy(() => import("@/pages/WorkspaceChat"));
@ -104,10 +106,18 @@ export default function App() {
path="/home/Tendency" path="/home/Tendency"
element={<ManagerRoute Component={Tendency} />} element={<ManagerRoute Component={Tendency} />}
/> />
<Route
path="/home/Yuqingfenxi"
element={<ManagerRoute Component={Yuqingfenxi} />}
/>
<Route <Route
path="/home/DataAnalysis" path="/home/DataAnalysis"
element={<ManagerRoute Component={DataAnalysis} />} element={<ManagerRoute Component={DataAnalysis} />}
/> />
<Route
path="/home/ReportGeneration"
element={<ManagerRoute Component={ReportGeneration} />}
/>
<Route path="/login" element={<Login />} /> <Route path="/login" element={<Login />} />
<Route <Route

2
frontend/src/components/DefaultChat/index.jsx

@ -96,7 +96,7 @@ export default function DefaultChatContainer() {
<UserIcon user={{ uid: "system" }} role={"assistant"} /> <UserIcon user={{ uid: "system" }} role={"assistant"} />
<div> <div>
{/* <MessageText>{t("welcomeMessage.part4")}</MessageText> */} {/* <MessageText>{t("welcomeMessage.part4")}</MessageText> */}
<MessageText>{'很简单。所有集合都组织成我们称之为“工作区”的桶。工作区是文件、文档、图像、PDF 和其他文件的存储桶,这些文件将被琛海AI转换为可以理解和在对话中使用的内容。 你可以随时添加和删除文件。'}</MessageText>
<MessageText>{'所有集合都被组织成我们称之为“文件分析区”的存储桶。这些文件分析区作为存储文件、文档、图像、PDF 以及其他类型文件的容器,使得琛海AI能够将这些文件转换为可以理解和在对话中使用的内容。你可以随时向文件分析区中添加或删除文件。'}</MessageText>
{(!user || user?.role !== "default") && ( {(!user || user?.role !== "default") && (
<button <button

2
frontend/src/components/Modals/ManageWorkspace/Documents/Directory/index.jsx

@ -273,7 +273,7 @@ function Directory({
onMouseLeave={() => setHighlightWorkspace(false)} onMouseLeave={() => setHighlightWorkspace(false)}
className="border-none text-sm font-semibold bg-white light:bg-[#E0F2FE] h-[30px] px-2.5 rounded-lg hover:bg-neutral-800/80 hover:text-white light:text-[#026AA2] light:hover:bg-[#026AA2] light:hover:text-white" className="border-none text-sm font-semibold bg-white light:bg-[#E0F2FE] h-[30px] px-2.5 rounded-lg hover:bg-neutral-800/80 hover:text-white light:text-[#026AA2] light:hover:bg-[#026AA2] light:hover:text-white"
> >
移动到工作
移动到文件分析
</button> </button>
<div className="relative"> <div className="relative">
<button <button

4
frontend/src/components/Modals/ManageWorkspace/Documents/WorkspaceDirectory/WorkspaceFileRow/index.jsx

@ -28,7 +28,7 @@ export default function WorkspaceFileRow({
setLoading(true); setLoading(true);
try { try {
setLoadingMessage(`工作区中删除文件中`);
setLoadingMessage(`文件分析区中删除文件中`);
await Workspace.modifyEmbeddings(workspace.slug, { await Workspace.modifyEmbeddings(workspace.slug, {
adds: [], adds: [],
deletes: [`${folderName}/${item.name}`], deletes: [`${folderName}/${item.name}`],
@ -251,7 +251,7 @@ const RemoveItemFromWorkspace = ({ item, onClick }) => {
<div> <div>
<ArrowUUpLeft <ArrowUUpLeft
data-tooltip-id="remove-document" data-tooltip-id="remove-document"
data-tooltip-content="从工作区中删除文档"
data-tooltip-content="从文件分析区中删除文档"
onClick={onClick} onClick={onClick}
className="text-base font-bold w-4 h-4 ml-2 flex-shrink-0 cursor-pointer" className="text-base font-bold w-4 h-4 ml-2 flex-shrink-0 cursor-pointer"
/> />

64
frontend/src/components/SettingsSidebar/index.jsx

@ -291,38 +291,38 @@ const SidebarOptions = ({ user = null, t }) => (
}, },
]} ]}
/> />
<Option
btnText={t("settings.agent-skills")}
icon={<Robot className="h-5 w-5 flex-shrink-0" />}
href={paths.settings.agentSkills()}
user={user}
flex={true}
roles={["admin"]}
/>
<Option
btnText="Community Hub"
icon={<Globe className="h-5 w-5 flex-shrink-0" />}
childOptions={[
{
btnText: "Explore Trending",
href: paths.communityHub.trending(),
flex: true,
roles: ["admin"],
},
{
btnText: "Your Account",
href: paths.communityHub.authentication(),
flex: true,
roles: ["admin"],
},
{
btnText: "Import Item",
href: paths.communityHub.importItem(),
flex: true,
roles: ["admin"],
},
]}
/>
{/*<Option*/}
{/* btnText={t("settings.agent-skills")}*/}
{/* icon={<Robot className="h-5 w-5 flex-shrink-0" />}*/}
{/* href={paths.settings.agentSkills()}*/}
{/* user={user}*/}
{/* flex={true}*/}
{/* roles={["admin"]}*/}
{/*/>*/}
{/*<Option*/}
{/* btnText="Community Hub"*/}
{/* icon={<Globe className="h-5 w-5 flex-shrink-0" />}*/}
{/* childOptions={[*/}
{/* {*/}
{/* btnText: "Explore Trending",*/}
{/* href: paths.communityHub.trending(),*/}
{/* flex: true,*/}
{/* roles: ["admin"],*/}
{/* },*/}
{/* {*/}
{/* btnText: "Your Account",*/}
{/* href: paths.communityHub.authentication(),*/}
{/* flex: true,*/}
{/* roles: ["admin"],*/}
{/* },*/}
{/* {*/}
{/* btnText: "Import Item",*/}
{/* href: paths.communityHub.importItem(),*/}
{/* flex: true,*/}
{/* roles: ["admin"],*/}
{/* },*/}
{/* ]}*/}
{/*/>*/}
<Option <Option
btnText={t("settings.customization")} btnText={t("settings.customization")}
icon={<PencilSimpleLine className="h-5 w-5 flex-shrink-0" />} icon={<PencilSimpleLine className="h-5 w-5 flex-shrink-0" />}

2
frontend/src/components/SpeechToText/BrowserNative/index.jsx

@ -2,7 +2,7 @@ export default function BrowserNative() {
return ( return (
<div className="w-full h-10 items-center flex"> <div className="w-full h-10 items-center flex">
<p className="text-sm font-base text-white text-opacity-60"> <p className="text-sm font-base text-white text-opacity-60">
There is no configuration needed for this provider.
此提供程序不需要配置
</p> </p>
</div> </div>
); );

2
frontend/src/components/TextToSpeech/BrowserNative/index.jsx

@ -2,7 +2,7 @@ export default function BrowserNative() {
return ( return (
<div className="w-full h-10 items-center flex"> <div className="w-full h-10 items-center flex">
<p className="text-sm font-base text-white text-opacity-60"> <p className="text-sm font-base text-white text-opacity-60">
There is no configuration needed for this provider.
此提供程序不需要配置
</p> </p>
</div> </div>
); );

2
frontend/src/components/WorkspaceChat/ChatContainer/PromptInput/AgentMenu/index.jsx

@ -81,7 +81,7 @@ export function AvailableAgents({
> >
<div className="w-full flex-col text-left flex pointer-events-none"> <div className="w-full flex-col text-left flex pointer-events-none">
<div className="text-theme-text-primary text-sm"> <div className="text-theme-text-primary text-sm">
<b>@代理</b> - 工作区的默认代理.
<b>@代理</b> - 文件分析区的默认代理.
</div> </div>
<div className="flex flex-wrap gap-2 mt-2"> <div className="flex flex-wrap gap-2 mt-2">
<AbilityTag text="rag-search" /> <AbilityTag text="rag-search" />

4
frontend/src/components/WorkspaceChat/ChatContainer/PromptInput/index.jsx

@ -284,8 +284,8 @@ export default function PromptInput({
type="submit" type="submit"
className="border-none inline-flex justify-center rounded-2xl cursor-pointer opacity-60 hover:opacity-100 light:opacity-100 light:hover:opacity-60 ml-4" className="border-none inline-flex justify-center rounded-2xl cursor-pointer opacity-60 hover:opacity-100 light:opacity-100 light:hover:opacity-60 ml-4"
data-tooltip-id="send-prompt" data-tooltip-id="send-prompt"
data-tooltip-content="向工作区发送提示消息"
aria-label="向工作区发送提示消息"
data-tooltip-content="向文件分析区发送提示消息"
aria-label="向文件分析区发送提示消息"
> >
<PaperPlaneRight <PaperPlaneRight
color="var(--theme-sidebar-footer-icon-fill)" color="var(--theme-sidebar-footer-icon-fill)"

4
frontend/src/hooks/useTheme.js

@ -2,8 +2,8 @@ import { REFETCH_LOGO_EVENT } from "@/LogoContext";
import { useState, useEffect } from "react"; import { useState, useEffect } from "react";
const availableThemes = { const availableThemes = {
default: "Default",
light: "Light",
default: "默认",
light: "高亮",
}; };
/** /**

122
frontend/src/locales/zh/common.js

@ -6,9 +6,9 @@ const TRANSLATIONS = {
getStarted: "开始", getStarted: "开始",
}, },
llm: { llm: {
title: "LLM 偏好",
title: "大模型偏好",
description: description:
"AnythingLLM 可以与多家 LLM 提供商合作。这将是处理聊天的服务。",
"琛海AI 可以与多家大模型提供商合作。这是处理聊天的服务。",
}, },
userSetup: { userSetup: {
title: "用户设置", title: "用户设置",
@ -34,26 +34,26 @@ const TRANSLATIONS = {
settingsHint: "这些设置可以随时在设置中重新配置。", settingsHint: "这些设置可以随时在设置中重新配置。",
}, },
survey: { survey: {
title: "欢迎使用 AnythingLLM",
description: "帮助我们为你的需求打造 AnythingLLM。可选。",
title: "欢迎使用琛海AI",
description: "帮助我们为你的需求打造琛海AI。可选。",
email: "你的电子邮件是什么?", email: "你的电子邮件是什么?",
useCase: "你将如何使用 AnythingLLM?",
useCase: "你将如何使用琛海AI?",
useCaseWork: "用于工作", useCaseWork: "用于工作",
useCasePersonal: "用于个人使用", useCasePersonal: "用于个人使用",
useCaseOther: "其他", useCaseOther: "其他",
comment: "你是如何听说 AnythingLLM 的?",
comment: "你是如何听说琛海AI 的?",
commentPlaceholder: commentPlaceholder:
"Reddit,Twitter,GitHub,YouTube 等 - 让我们知道你是如何找到我们的!", "Reddit,Twitter,GitHub,YouTube 等 - 让我们知道你是如何找到我们的!",
skip: "跳过调查", skip: "跳过调查",
thankYou: "感谢你的反馈!", thankYou: "感谢你的反馈!",
}, },
workspace: { workspace: {
title: "创建你的第一个工作区",
description: "创建你的第一个工作区并开始使用 AnythingLLM。",
title: "创建你的第一个文件分析区",
description: "创建你的第一个文件分析区并开始使用琛海AI。",
}, },
}, },
common: { common: {
"workspaces-name": "工作区名称",
"workspaces-name": "文件分析区名称",
error: "错误", error: "错误",
success: "成功", success: "成功",
user: "用户", user: "用户",
@ -72,13 +72,13 @@ const TRANSLATIONS = {
invites: "邀请", invites: "邀请",
users: "用户", users: "用户",
section:"部门", section:"部门",
workspaces: "工作区",
workspaces: "文件分析区",
"workspace-chats": "对话历史记录", "workspace-chats": "对话历史记录",
customization: "外观", customization: "外观",
"api-keys": "API 密钥", "api-keys": "API 密钥",
llm: "LLM 首选项",
llm: "大模型设置",
transcription: "转录模型", transcription: "转录模型",
embedder: "Embedder 首选项",
embedder: "嵌入模型设置",
"text-splitting": "文本分割", "text-splitting": "文本分割",
"voice-speech": "语音和讲话", "voice-speech": "语音和讲话",
"vector-database": "向量数据库", "vector-database": "向量数据库",
@ -119,7 +119,7 @@ const TRANSLATIONS = {
}, },
welcomeMessage: { welcomeMessage: {
part1: part1:
"欢迎使用 AnythingLLM,这是由 Mintplex Labs 开发的开源 AI 工具,可以将任何东西转换为你可以查询和聊天的训练有素的聊天机器人。AnythingLLM 是一款 BYOK(自带密钥)软件,因此除了你想使用的服务外,此软件不收取订阅费、费用或其他费用。",
"欢迎使用琛海AI,这是由 Mintplex Labs 开发的开源 AI 工具,可以将任何东西转换为你可以查询和聊天的训练有素的聊天机器人。AnythingLLM 是一款 BYOK(自带密钥)软件,因此除了你想使用的服务外,此软件不收取订阅费、费用或其他费用。",
part2: part2:
"AnythingLLM 是将强大的 AI 产品(如 OpenAi、GPT-4、LangChain、PineconeDB、ChromaDB 等)整合在一个整洁的包中而无需繁琐操作的最简单方法,可以将你的生产力提高 100 倍。", "AnythingLLM 是将强大的 AI 产品(如 OpenAi、GPT-4、LangChain、PineconeDB、ChromaDB 等)整合在一个整洁的包中而无需繁琐操作的最简单方法,可以将你的生产力提高 100 倍。",
part3: part3:
@ -127,19 +127,19 @@ const TRANSLATIONS = {
githubIssue: "在 GitHub 上创建问题", githubIssue: "在 GitHub 上创建问题",
user1: "我该如何开始?!", user1: "我该如何开始?!",
part4: part4:
"很简单。所有集合都组织成我们称之为“工作区”的桶。工作区是文件、文档、图像、PDF 和其他文件的存储桶,这些文件将被转换为 LLM 可以理解和在对话中使用的内容。\n\n你可以随时添加和删除文件。",
createWorkspace: "创建你的第一个工作区",
"很简单。所有集合都组织成我们称之为“文件分析区”的桶。文件分析区是文件、文档、图像、PDF 和其他文件的存储桶,这些文件将被转换为 LLM 可以理解和在对话中使用的内容。\n\n你可以随时添加和删除文件。",
createWorkspace: "创建你的第一个文件分析区",
user2: "这像是一个 AI Dropbox 吗?那么聊天呢?它是一个聊天机器人,不是吗?", user2: "这像是一个 AI Dropbox 吗?那么聊天呢?它是一个聊天机器人,不是吗?",
part5: part5:
"AnythingLLM 不仅仅是一个更智能的 Dropbox。\n\nAnythingLLM 提供了两种与你的数据交流的方式:\n\n<i>查询:</i> 你的聊天将返回在你的工作区中访问的文档中找到的数据或推论。向工作区添加更多文档会使其更智能!\n\n<i>对话:</i> 你的文档和正在进行的聊天记录同时为 LLM 知识做出贡献。非常适合添加基于文本的实时信息或纠正 LLM 可能存在的误解。\n\n你可以在聊天过程中 <i>切换模式!</i>",
"AnythingLLM 不仅仅是一个更智能的 Dropbox。\n\nAnythingLLM 提供了两种与你的数据交流的方式:\n\n<i>查询:</i> 你的聊天将返回在你的文件分析区中访问的文档中找到的数据或推论。向文件分析区添加更多文档会使其更智能!\n\n<i>对话:</i> 你的文档和正在进行的聊天记录同时为 LLM 知识做出贡献。非常适合添加基于文本的实时信息或纠正 LLM 可能存在的误解。\n\n你可以在聊天过程中 <i>切换模式!</i>",
user3: "哇,这听起来很棒,让我马上试试!", user3: "哇,这听起来很棒,让我马上试试!",
part6: "玩得开心!",
part6: "祝您工作愉快!",
starOnGitHub: "在 GitHub 上加星", starOnGitHub: "在 GitHub 上加星",
contact: "联系 Mintplex Labs", contact: "联系 Mintplex Labs",
}, },
"new-workspace": { "new-workspace": {
title: "文件分析区", title: "文件分析区",
placeholder: "我的工作区",
placeholder: "我的文件分析区",
}, },
"workspaces—settings": { "workspaces—settings": {
general: "通用设置", general: "通用设置",
@ -154,11 +154,11 @@ const TRANSLATIONS = {
description: "向量数据库中的总向量数。", description: "向量数据库中的总向量数。",
}, },
names: { names: {
description: "这只会更改工作区的显示名称。",
description: "这只会更改文件分析区的显示名称。",
}, },
message: { message: {
title: "建议的聊天消息", title: "建议的聊天消息",
description: "自定义将向你的工作区用户建议的消息。",
description: "自定义将向你的文件分析区用户建议的消息。",
add: "添加新消息", add: "添加新消息",
save: "保存消息", save: "保存消息",
heading: "向我解释", heading: "向我解释",
@ -166,31 +166,31 @@ const TRANSLATIONS = {
}, },
pfp: { pfp: {
title: "助理头像", title: "助理头像",
description: "为此工作区自定义助手的个人资料图像。",
image: "工作区图像",
remove: "移除工作区图像",
description: "为此文件分析区自定义助手的个人资料图像。",
image: "文件分析区图像",
remove: "移除文件分析区图像",
}, },
delete: { delete: {
title: "删除工作区",
description: "删除此工作区及其所有数据。这将删除所有用户的工作区。",
delete: "删除工作区",
deleting: "正在删除工作区...",
title: "删除文件分析区",
description: "删除此文件分析区及其所有数据。这将删除所有用户的文件分析区。",
delete: "删除文件分析区",
deleting: "正在删除文件分析区...",
"confirm-start": "你即将删除整个", "confirm-start": "你即将删除整个",
"confirm-end": "confirm-end":
"工作区。这将删除矢量数据库中的所有矢量嵌入。\n\n原始源文件将保持不变。此操作是不可逆转的。",
"文件分析区。这将删除矢量数据库中的所有矢量嵌入。\n\n原始源文件将保持不变。此操作是不可逆转的。",
}, },
}, },
chat: { chat: {
llm: { llm: {
title: "工作区 LLM 提供者",
title: "文件分析区 LLM 提供者",
description: description:
"将用于此工作区的特定 LLM 提供商和模型。默认情况下,它使用系统 LLM 提供程序和设置。",
"将用于此文件分析区的特定 LLM 提供商和模型。默认情况下,它使用系统 LLM 提供程序和设置。",
search: "搜索所有 LLM 提供商", search: "搜索所有 LLM 提供商",
}, },
model: { model: {
title: "工作区聊天模型",
title: "文件分析区聊天模型",
description: description:
"将用于此工作区的特定聊天模型。如果为空,将使用系统 LLM 首选项。",
"将用于此文件分析区的特定聊天模型。如果为空,将使用系统 LLM 首选项。",
wait: "-- 等待模型 --", wait: "-- 等待模型 --",
}, },
mode: { mode: {
@ -218,7 +218,7 @@ const TRANSLATIONS = {
prompt: { prompt: {
title: "聊天提示", title: "聊天提示",
description: description:
"将在此工作区上使用的提示。定义 AI 生成响应的上下文和指令。你应该提供精心设计的提示,以便人工智能可以生成相关且准确的响应。",
"将在此文件分析区上使用的提示。定义 AI 生成响应的上下文和指令。你应该提供精心设计的提示,以便人工智能可以生成相关且准确的响应。",
}, },
refusal: { refusal: {
title: "查询模式拒绝响应", title: "查询模式拒绝响应",
@ -255,31 +255,31 @@ const TRANSLATIONS = {
reset: "重置向量数据库", reset: "重置向量数据库",
resetting: "清除向量...", resetting: "清除向量...",
confirm: confirm:
"你将重置此工作区的矢量数据库。这将删除当前嵌入的所有矢量嵌入。\n\n原始源文件将保持不变。此操作是不可逆转的。",
"你将重置此文件分析区的矢量数据库。这将删除当前嵌入的所有矢量嵌入。\n\n原始源文件将保持不变。此操作是不可逆转的。",
success: "向量数据库已重置。", success: "向量数据库已重置。",
error: "无法重置工作区向量数据库!",
error: "无法重置文件分析区向量数据库!",
}, },
}, },
agent: { agent: {
"performance-warning": "performance-warning":
"不明确支持工具调用的 LLMs 的性能高度依赖于模型的功能和准确性。有些能力可能受到限制或不起作用。", "不明确支持工具调用的 LLMs 的性能高度依赖于模型的功能和准确性。有些能力可能受到限制或不起作用。",
provider: { provider: {
title: "工作区代理 LLM 提供商",
description: "将用于此工作区的 @agent 代理的特定 LLM 提供商和模型。",
title: "文件分析区代理 LLM 提供商",
description: "将用于此文件分析区的 @agent 代理的特定 LLM 提供商和模型。",
}, },
mode: { mode: {
chat: { chat: {
title: "工作区代理聊天模型",
description: "将用于此工作区的 @agent 代理的特定聊天模型。",
title: "文件分析区代理聊天模型",
description: "将用于此文件分析区的 @agent 代理的特定聊天模型。",
}, },
title: "工作区代理模型",
description: "将用于此工作区的 @agent 代理的特定 LLM 模型。",
title: "文件分析区代理模型",
description: "将用于此文件分析区的 @agent 代理的特定 LLM 模型。",
wait: "-- 等待模型 --", wait: "-- 等待模型 --",
}, },
skill: { skill: {
title: "默认代理技能", title: "默认代理技能",
description: description:
"使用这些预构建的技能提高默认代理的自然能力。此设置适用于所有工作区。",
"使用这些预构建的技能提高默认代理的自然能力。此设置适用于所有文件分析区。",
rag: { rag: {
title: "RAG 和长期记忆", title: "RAG 和长期记忆",
description: description:
@ -287,7 +287,7 @@ const TRANSLATIONS = {
}, },
view: { view: {
title: "查看和总结文档", title: "查看和总结文档",
description: "允许代理列出和总结当前嵌入的工作区文件的内容。",
description: "允许代理列出和总结当前嵌入的文件分析区文件的内容。",
}, },
scrape: { scrape: {
title: "抓取网站", title: "抓取网站",
@ -311,13 +311,13 @@ const TRANSLATIONS = {
}, },
}, },
recorded: { recorded: {
title: "工作区聊天历史记录",
title: "文件分析区聊天历史记录",
description: "这些是用户发送的所有聊天记录和消息,按创建日期排序。", description: "这些是用户发送的所有聊天记录和消息,按创建日期排序。",
export: "导出", export: "导出",
table: { table: {
id: "Id", id: "Id",
by: "发送者", by: "发送者",
workspace: "工作区",
workspace: "文件分析区",
prompt: "提示", prompt: "提示",
response: "响应", response: "响应",
at: "发送时间", at: "发送时间",
@ -354,7 +354,7 @@ const TRANSLATIONS = {
}, },
api: { api: {
title: "API 密钥", title: "API 密钥",
description: "API 密钥允许持有者以编程方式访问和管理此 AnythingLLM 实例。",
description: "API 密钥允许持有者以编程方式访问和管理此琛海AI 实例。",
link: "阅读 API 文档", link: "阅读 API 文档",
generate: "生成新的 API 密钥", generate: "生成新的 API 密钥",
table: { table: {
@ -364,10 +364,10 @@ const TRANSLATIONS = {
}, },
}, },
llm: { llm: {
title: "LLM 首选项",
title: "大模型设置",
description: description:
"这些是你首选的 LLM 聊天和嵌入提供商的凭据和设置。重要的是,这些密钥是最新的和正确的,否则 AnythingLLM 将无法正常运行。",
provider: "LLM 提供商",
"设置你的模型提供者",
provider: "大模型提供商",
}, },
transcription: { transcription: {
title: "转录模型首选项", title: "转录模型首选项",
@ -375,25 +375,25 @@ const TRANSLATIONS = {
"这些是你的首选转录模型提供商的凭据和设置。重要的是这些密钥是最新且正确的,否则媒体文件和音频将无法转录。", "这些是你的首选转录模型提供商的凭据和设置。重要的是这些密钥是最新且正确的,否则媒体文件和音频将无法转录。",
provider: "转录提供商", provider: "转录提供商",
"warn-start": "warn-start":
"在 RAM 或 CPU 有限的计算机上使用本地耳语模型可能会在处理媒体文件时停止 AnythingLLM。",
"在 RAM 或 CPU 有限的计算机上使用本地耳语模型可能会在处理媒体文件时停止琛海AI。",
"warn-recommend": "我们建议至少 2GB RAM 并上传 <10Mb 的文件。", "warn-recommend": "我们建议至少 2GB RAM 并上传 <10Mb 的文件。",
"warn-end": "内置模型将在首次使用时自动下载。", "warn-end": "内置模型将在首次使用时自动下载。",
}, },
embedding: { embedding: {
title: "嵌入首选项",
title: "嵌入模型设置",
"desc-start": "desc-start":
"当使用本身不支持嵌入引擎的 LLM 时,你可能需要额外指定用于嵌入文本的凭据。",
"当使用本身不支持嵌入引擎的大模型时,你可能需要额外指定用于嵌入文本的凭据。",
"desc-end": "desc-end":
"嵌入是将文本转换为矢量的过程。需要这些凭据才能将你的文件和提示转换为 AnythingLLM 可以用来处理的格式。",
"嵌入是将文本转换为向量的过程。需要这些凭据才能将你的文件和提示转换为琛海AI可以处理的格式。",
provider: { provider: {
title: "嵌入引擎提供商",
description: "使用 AnythingLLM 的本机嵌入引擎时不需要设置。",
title: "嵌入模型提供商",
description: "使用琛海AI 的本机嵌入模型时不需要设置。",
}, },
}, },
text: { text: {
title: "文本拆分和分块首选项",
title: "文本分割设置",
"desc-start": "desc-start":
"有时,你可能希望更改新文档在插入到矢量数据库之前拆分和分块的默认方式。",
"你可以更改新文档在插入到向量数据库之前拆分和分段的默认方式。",
"desc-end": "只有在了解文本拆分的工作原理及其副作用时,才应修改此设置。", "desc-end": "只有在了解文本拆分的工作原理及其副作用时,才应修改此设置。",
"warn-start": "此处的更改仅适用于", "warn-start": "此处的更改仅适用于",
"warn-center": "新嵌入的文档", "warn-center": "新嵌入的文档",
@ -411,19 +411,19 @@ const TRANSLATIONS = {
vector: { vector: {
title: "向量数据库", title: "向量数据库",
description: description:
"这些是 AnythingLLM 实例如何运行的凭据和设置。重要的是,这些密钥是最新的和正确的。",
"这些是琛海AI 实例如何运行的凭据和设置。重要的是,这些密钥是最新的和正确的。",
provider: { provider: {
title: "向量数据库提供商", title: "向量数据库提供商",
description: "LanceDB 不需要任何配置。",
description: "默认使用LanceDB 可以不需要任何配置。",
}, },
}, },
embeddable: { embeddable: {
title: "可嵌入的聊天小部件", title: "可嵌入的聊天小部件",
description: description:
"可嵌入的聊天小部件是与单个工作区绑定的面向公众的聊天界面。这些允许你构建工作区,然后你可以将其发布到全世界。",
"可嵌入的聊天小部件是与单个文件分析区绑定的面向公众的聊天界面。这些允许你构建文件分析区,然后你可以将其发布到全世界。",
create: "创建嵌入式对话", create: "创建嵌入式对话",
table: { table: {
workspace: "工作区",
workspace: "文件分析区",
chats: "已发送聊天", chats: "已发送聊天",
Active: "活动域", Active: "活动域",
}, },

3
frontend/src/pages/DataAnalysis/DataAnalysis.css

@ -1,7 +1,8 @@
.box { .box {
width: 100%; width: 100%;
padding: 10px 0; padding: 10px 0;
height: auto;
/*height: auto;*/
height: 100vh;
position: absolute; position: absolute;
background-color: #F7F7FC; background-color: #F7F7FC;
} }

161
frontend/src/pages/DataAnalysis/index.jsx

@ -16,131 +16,144 @@ import tu11 from './img/11.png'
import tu12 from './img/12.png' import tu12 from './img/12.png'
import tu13 from './img/13.png' import tu13 from './img/13.png'
import tu14 from './img/14.png' import tu14 from './img/14.png'
import { message } from "antd";
function DataAnalysis() { function DataAnalysis() {
const [renderKey, setRenderKey] = useState(); const [renderKey, setRenderKey] = useState();
const list = [ const list = [
{ {
name: '数据分析',
text: '整合并分析业务办理数据,输出业务办理量分析报告,自动生成包含图表和文字解读的分析报告',
img: tu1
name: '舆情分析',
text: '收集群众反馈意见,对意见进行分类,并分析对应舆情状态',
img: tu1,
url: '/home/Yuqingfenxi'
}, },
{ {
name: '智能优化',
text: '分析历史办理数据,识别重复提交数据,设计业务办理简化流程',
name: '经济发展分析',
text: '整合并分析经济数据,输出经济趋势分析报告,自动生成包含图表和文字解读的分析报告',
img: tu2 img: tu2
}, },
{ {
name: '智能客服',
text: '智能识别问题并提供答案',
name: '沙漠化分析',
text: '分析植被覆盖率和沙化面积',
img: tu3 img: tu3
}, },
{ {
name: '反馈收集',
text: '收集用户反馈意见,并进行分类',
name: '工业污染分析',
text: '分析工业区域污染物排放情况',
img: tu4 img: tu4
}, },
{ {
name: '沙漠化监测',
text: '实时监测指定区域的沙漠化动态,分析植被覆盖率和沙化面积',
name: '生态修复分析',
text: '分析不同区域内环境治理前后生态指标',
img: tu5 img: tu5
}, },
{ {
name: '工业污染监测',
text: '监测工业区域的污染物排放,及时分析并预警',
name: '人才分析',
text: '分析人才流动情况、就业情况、人才数量、性别占比、岗位数量、录用率等',
img: tu6 img: tu6
}, },
{
name: '生态修复评估',
text: '对比治理前后的生态指标,评估生态修复效果',
img: tu7
},
{ {
name: '教育资源分析', name: '教育资源分析',
text: '分析教育资源的分布情况,评估教育公平性', text: '分析教育资源的分布情况,评估教育公平性',
img: tu8
img: tu7
}, },
{ {
name: '医疗服务分析', name: '医疗服务分析',
text: '监测医疗服务数据,分析就诊率和疾病谱变化', text: '监测医疗服务数据,分析就诊率和疾病谱变化',
img: tu9
},
{
name: '社会救助统计分析',
text: '统计辖区内各类型救助人员数量、补助款发放金额等数据,并对数据进行分析',
img: tu10
img: tu8
}, },
// {
// name: '',
// text: '',
// img: tu9
// },
// {
// name: '',
// text: '',
// img: tu10
// },
{ {
name: '项目进度跟踪', name: '项目进度跟踪',
text: '实时显示项目的进度状态,对比计划与实际进度', text: '实时显示项目的进度状态,对比计划与实际进度',
img: tu11 img: tu11
}, },
{
name: '风险预警与策略建议',
text: '基于进度和资金流数据,智能预警潜在风险并提供应对策略',
img: tu12
},
{
name: '经济与社会效益分析',
text: '分析项目的经济效益和社会效益,为决策提供数据支持',
img: tu13
},
// {
// name: '',
// text: '',
// img: tu12
// },
// {
// name: '',
// text: '',
// img: tu13
// },
{ {
name: '产业分析', name: '产业分析',
text: '对新能源、盐碱化工等产业进行资源、市场、技术分析用户输入产业信息,系统自动进行分析并输出报告资源分析:评估产业所需的自然、人力资源市场分析:分析当前市场需求、竞争态势', text: '对新能源、盐碱化工等产业进行资源、市场、技术分析用户输入产业信息,系统自动进行分析并输出报告资源分析:评估产业所需的自然、人力资源市场分析:分析当前市场需求、竞争态势',
img: tu14 img: tu14
}, },
{
name: '专家咨询',
text: '提供专家的联系方式和专业领域,供用户咨询。用户选择需要咨询的专家领域,系统列出相关专家',
img: tu8
},
{
name: '趋势研究报告',
text: '提供产业发展趋势的研究报告。用户访问趋势研究系统,阅读最新的趋势报告',
img: tu9
},
{
name: '产学研合作对接',
text: '搭建互动系统,促进企业、高校和科研机构之间的合作',
img: tu10
},
{
name: '政策优化',
text: '根据人才数据的深度分析结果,提出具体的政策优化建议',
img: tu11
},
{
name: '人才发展跟踪',
text: '搭建人才数据库,对人才的发展进行全面跟踪和评估,生成详细的发展报告',
img: tu12
},
{
name: '招商引资',
text: '跟踪各招商引资项目的进度,评估其对经济的贡献,预测项目完成后对经济的潜在影响',
img: tu13
},
{
name: '智能客服',
text: '智能识别问题并提供答案',
img: tu14
},
// {
// name: '',
// text: '',
// img: tu8
// },
// {
// name: '',
// text: '访',
// img: tu9
// },
// {
// name: '',
// text: '',
// img: tu10
// },
// {
// name: '',
// text: '',
// img: tu11
// },
// {
// name: '',
// text: '',
// img: tu12
// },
// {
// name: '',
// text: '',
// img: tu13
// },
// {
// name: '',
// text: '',
// img: tu14
// },
] ]
useEffect(() => { useEffect(() => {
}, []); }, []);
const bindUrl = () =>{
window.location = '/'
const bindUrl = (e) =>{
console.log(1234, e);
if (e.url) {
window.location = e.url
} else {
message.info({
content: e.name + '开发中...'
})
}
} }
const bindUrl1 = () =>{
window.location = "/"
}
return ( return (
<div className='box'> <div className='box'>
<div className='box1'> <div className='box1'>
<div className='head'> <div className='head'>
<div><img src={home} onClick={bindUrl} alt="" /></div>
<div><img src={home} onClick={bindUrl1} alt="" /></div>
<div className='search'> <div className='search'>
<div className='search1'> <div className='search1'>
<img src={sou} alt="" /> <img src={sou} alt="" />
@ -161,7 +174,7 @@ function DataAnalysis() {
<div>{item.text}</div> <div>{item.text}</div>
</div> </div>
</div> </div>
<div className='content2_2'>
<div className='content2_2' onClick={() => bindUrl(item)}>
<button>立即使用</button> <button>立即使用</button>
</div> </div>
</div> </div>

6
frontend/src/pages/GeneralSettings/Appearance/CustomAppName/index.jsx

@ -60,10 +60,10 @@ export default function CustomAppName() {
<form className="mb-6" onSubmit={updateCustomAppName}> <form className="mb-6" onSubmit={updateCustomAppName}>
<div className="flex flex-col gap-y-1"> <div className="flex flex-col gap-y-1">
<h2 className="text-base leading-6 font-bold text-white"> <h2 className="text-base leading-6 font-bold text-white">
Custom App Name
自定义应用名称
</h2> </h2>
<p className="text-xs leading-[18px] font-base text-white/60"> <p className="text-xs leading-[18px] font-base text-white/60">
Set a custom app name that is displayed on the login page.
自定义应用名称显示在登录界面
</p> </p>
</div> </div>
<div className="flex items-center gap-x-4"> <div className="flex items-center gap-x-4">
@ -71,7 +71,7 @@ export default function CustomAppName() {
name="customAppName" name="customAppName"
type="text" type="text"
className="border-none bg-theme-settings-input-bg mt-3 text-white text-sm rounded-lg focus:outline-primary-button active:outline-primary-button outline-none block w-full p-2.5 max-w-[275px] placeholder:text-theme-settings-input-placeholder" className="border-none bg-theme-settings-input-bg mt-3 text-white text-sm rounded-lg focus:outline-primary-button active:outline-primary-button outline-none block w-full p-2.5 max-w-[275px] placeholder:text-theme-settings-input-placeholder"
placeholder="AnythingLLM"
placeholder="琛海AI"
required={true} required={true}
autoComplete="off" autoComplete="off"
onChange={handleChange} onChange={handleChange}

19
frontend/src/pages/GeneralSettings/Appearance/CustomSiteSettings/index.jsx

@ -42,19 +42,18 @@ export default function CustomSiteSettings() {
<div className="flex flex-col border-t border-white/30 pt-4 gap-y-2"> <div className="flex flex-col border-t border-white/30 pt-4 gap-y-2">
<div className="flex flex-col gap-y-1"> <div className="flex flex-col gap-y-1">
<h2 className="text-base leading-6 font-bold text-white"> <h2 className="text-base leading-6 font-bold text-white">
Custom Site Settings
自定义站点设置
</h2> </h2>
<p className="text-xs leading-[18px] font-base text-white/60"> <p className="text-xs leading-[18px] font-base text-white/60">
Change the content of the browser tab for customization and
branding.
更改浏览器选项卡的内容以进行自定义和标记
</p> </p>
</div> </div>
<div className="w-fit"> <div className="w-fit">
<div className="flex flex-col gap-y-1"> <div className="flex flex-col gap-y-1">
<h2 className="text-sm leading-6 text-white">Tab Title</h2>
<h2 className="text-sm leading-6 text-white">选项卡标题</h2>
<p className="text-xs leading-[18px] font-base text-white/60"> <p className="text-xs leading-[18px] font-base text-white/60">
Set a custom tab title when the app is open in a browser.
当应用程序在浏览器中打开时显示设置的自定义标签和标题
</p> </p>
</div> </div>
<div className="flex items-center gap-x-4"> <div className="flex items-center gap-x-4">
@ -62,7 +61,7 @@ export default function CustomSiteSettings() {
name="meta_page_title" name="meta_page_title"
type="text" type="text"
className="border-none bg-theme-settings-input-bg mt-3 text-white text-sm rounded-lg focus:outline-primary-button active:outline-primary-button outline-none block w-full p-2.5 max-w-[400px] placeholder:text-theme-settings-input-placeholder" className="border-none bg-theme-settings-input-bg mt-3 text-white text-sm rounded-lg focus:outline-primary-button active:outline-primary-button outline-none block w-full p-2.5 max-w-[400px] placeholder:text-theme-settings-input-placeholder"
placeholder="AnythingLLM | Your personal LLM trained on anything"
placeholder="琛海AI"
autoComplete="off" autoComplete="off"
onChange={(e) => { onChange={(e) => {
setSettings((prev) => { setSettings((prev) => {
@ -71,7 +70,7 @@ export default function CustomSiteSettings() {
}} }}
value={ value={
settings.title ?? settings.title ??
"AnythingLLM | Your personal LLM trained on anything"
"琛海AI | 大模型私有化训练"
} }
/> />
</div> </div>
@ -79,9 +78,9 @@ export default function CustomSiteSettings() {
<div className="w-fit"> <div className="w-fit">
<div className="flex flex-col gap-y-1"> <div className="flex flex-col gap-y-1">
<h2 className="text-sm leading-6 text-white">Tab Favicon</h2>
<h2 className="text-sm leading-6 text-white">标签标识</h2>
<p className="text-xs leading-[18px] font-base text-white/60"> <p className="text-xs leading-[18px] font-base text-white/60">
Define a url to an image to use for your favicon
为你的标签定义一个链接地址
</p> </p>
</div> </div>
<div className="flex items-center gap-x-2"> <div className="flex items-center gap-x-2">
@ -94,7 +93,7 @@ export default function CustomSiteSettings() {
name="meta_page_favicon" name="meta_page_favicon"
type="url" type="url"
className="border-none bg-theme-settings-input-bg mt-3 text-white text-sm rounded-lg focus:outline-primary-button active:outline-primary-button outline-none block w-full p-2.5 max-w-[400px] placeholder:text-theme-settings-input-placeholder" className="border-none bg-theme-settings-input-bg mt-3 text-white text-sm rounded-lg focus:outline-primary-button active:outline-primary-button outline-none block w-full p-2.5 max-w-[400px] placeholder:text-theme-settings-input-placeholder"
placeholder="url to your image"
placeholder="链接地址"
onChange={(e) => { onChange={(e) => {
setSettings((prev) => { setSettings((prev) => {
return { ...prev, faviconUrl: e.target.value }; return { ...prev, faviconUrl: e.target.value };

5
frontend/src/pages/GeneralSettings/Appearance/LanguagePreference/index.jsx

@ -12,11 +12,10 @@ export default function LanguagePreference() {
<> <>
<div className="flex flex-col gap-y-1 mt-6"> <div className="flex flex-col gap-y-1 mt-6">
<h2 className="text-base leading-6 font-bold text-white"> <h2 className="text-base leading-6 font-bold text-white">
Display Language
语言
</h2> </h2>
<p className="text-xs leading-[18px] font-base text-white/60"> <p className="text-xs leading-[18px] font-base text-white/60">
Select the preferred language to render AnythingLLM's UI in, when
applicable.
选择渲染琛海AI的首选语言
</p> </p>
</div> </div>
<div className="flex items-center gap-x-4"> <div className="flex items-center gap-x-4">

4
frontend/src/pages/GeneralSettings/Appearance/ShowScrollbar/index.jsx

@ -30,10 +30,10 @@ export default function ShowScrollbar() {
<div className="flex flex-col w-full gap-y-4 mt-6"> <div className="flex flex-col w-full gap-y-4 mt-6">
<div className="flex flex-col gap-y-1"> <div className="flex flex-col gap-y-1">
<h2 className="text-base leading-6 font-bold text-white"> <h2 className="text-base leading-6 font-bold text-white">
Show chat window scrollbar
显示聊天窗口滚动条
</h2> </h2>
<p className="text-xs leading-[18px] font-base text-white/60"> <p className="text-xs leading-[18px] font-base text-white/60">
Enable or disable the scrollbar in the chat window
启用或禁用聊天窗口中的滚动条
</p> </p>
<div className="mt-2"> <div className="mt-2">
<label className="relative inline-flex cursor-pointer items-center"> <label className="relative inline-flex cursor-pointer items-center">

7
frontend/src/pages/GeneralSettings/Appearance/SupportEmail/index.jsx

@ -55,11 +55,10 @@ export default function SupportEmail() {
<form className="mb-6" onSubmit={updateSupportEmail}> <form className="mb-6" onSubmit={updateSupportEmail}>
<div className="flex flex-col gap-y-1"> <div className="flex flex-col gap-y-1">
<h2 className="text-base leading-6 font-bold text-white"> <h2 className="text-base leading-6 font-bold text-white">
Support Email
支持电子邮件
</h2> </h2>
<p className="text-xs leading-[18px] font-base text-white/60"> <p className="text-xs leading-[18px] font-base text-white/60">
Set the support email address that shows up in the user menu while
logged into this instance.
设置用户菜单中显示的支持电子邮件地址
</p> </p>
</div> </div>
<div className="flex items-center gap-x-4"> <div className="flex items-center gap-x-4">
@ -67,7 +66,7 @@ export default function SupportEmail() {
name="supportEmail" name="supportEmail"
type="email" type="email"
className="border-none bg-theme-settings-input-bg mt-3 text-white text-sm rounded-lg focus:outline-primary-button active:outline-primary-button outline-none block w-full p-2.5 max-w-[275px] placeholder:text-theme-settings-input-placeholder" className="border-none bg-theme-settings-input-bg mt-3 text-white text-sm rounded-lg focus:outline-primary-button active:outline-primary-button outline-none block w-full p-2.5 max-w-[275px] placeholder:text-theme-settings-input-placeholder"
placeholder="support@mycompany.com"
placeholder="support@163/qq.com"
required={true} required={true}
autoComplete="off" autoComplete="off"
onChange={handleChange} onChange={handleChange}

4
frontend/src/pages/GeneralSettings/Appearance/ThemePreference/index.jsx

@ -5,9 +5,9 @@ export default function ThemePreference() {
return ( return (
<div className="flex flex-col gap-y-1 mt-4"> <div className="flex flex-col gap-y-1 mt-4">
<h2 className="text-base leading-6 font-bold text-white">Theme</h2>
<h2 className="text-base leading-6 font-bold text-white">主题</h2>
<p className="text-xs leading-[18px] font-base text-white/60"> <p className="text-xs leading-[18px] font-base text-white/60">
Select your preferred theme for the application.
为应用程序选择您喜欢的主题
</p> </p>
<div className="flex items-center gap-x-4"> <div className="flex items-center gap-x-4">
<select <select

15
frontend/src/pages/GeneralSettings/AudioPreference/stt.jsx

@ -9,11 +9,11 @@ import BrowserNative from "@/components/SpeechToText/BrowserNative";
const PROVIDERS = [ const PROVIDERS = [
{ {
name: "System native",
name: "系统原生",
value: "native", value: "native",
logo: AnythingLLMIcon, logo: AnythingLLMIcon,
options: (settings) => <BrowserNative settings={settings} />, options: (settings) => <BrowserNative settings={settings} />,
description: "Uses your browser's built in STT service if supported.",
description: "如果支持的话,使用浏览器内置的STT服务",
}, },
]; ];
@ -80,14 +80,11 @@ export default function SpeechToTextProvider({ settings }) {
<div className="w-full flex flex-col gap-y-1 pb-6 border-white light:border-theme-sidebar-border border-b-2 border-opacity-10"> <div className="w-full flex flex-col gap-y-1 pb-6 border-white light:border-theme-sidebar-border border-b-2 border-opacity-10">
<div className="flex gap-x-4 items-center"> <div className="flex gap-x-4 items-center">
<p className="text-lg leading-6 font-bold text-white"> <p className="text-lg leading-6 font-bold text-white">
Speech-to-text Preference
语音识别偏好
</p> </p>
</div> </div>
<p className="text-xs leading-[18px] font-base text-white text-opacity-60"> <p className="text-xs leading-[18px] font-base text-white text-opacity-60">
Here you can specify what kind of text-to-speech and speech-to-text
providers you would want to use in your AnythingLLM experience. By
default, we use the browser's built in support for these services,
but you may want to use others.
您可以在此指定在琛海AI体验中使用的文本到语音和语音到文本服务类型默认使用浏览器内置服务但您也可选择其他服务
</p> </p>
</div> </div>
<div className="w-full justify-end flex"> <div className="w-full justify-end flex">
@ -100,7 +97,7 @@ export default function SpeechToTextProvider({ settings }) {
</CTAButton> </CTAButton>
)} )}
</div> </div>
<div className="text-base font-bold text-white mt-6 mb-4">Provider</div>
<div className="text-base font-bold text-white mt-6 mb-4">提供商</div>
<div className="relative"> <div className="relative">
{searchMenuOpen && ( {searchMenuOpen && (
<div <div
@ -121,7 +118,7 @@ export default function SpeechToTextProvider({ settings }) {
type="text" type="text"
name="stt-provider-search" name="stt-provider-search"
autoComplete="off" autoComplete="off"
placeholder="Search speech to text providers"
placeholder="搜索语音转文本的提供商"
className="border-none -ml-4 my-2 bg-transparent z-20 pl-12 h-[38px] w-full px-4 py-1 text-sm outline-none text-theme-text-primary placeholder:text-theme-text-primary placeholder:font-medium" className="border-none -ml-4 my-2 bg-transparent z-20 pl-12 h-[38px] w-full px-4 py-1 text-sm outline-none text-theme-text-primary placeholder:text-theme-text-primary placeholder:font-medium"
onChange={(e) => setSearchQuery(e.target.value)} onChange={(e) => setSearchQuery(e.target.value)}
ref={searchInputRef} ref={searchInputRef}

15
frontend/src/pages/GeneralSettings/AudioPreference/tts.jsx

@ -18,11 +18,11 @@ import OpenAiGenericTTSOptions from "@/components/TextToSpeech/OpenAiGenericOpti
const PROVIDERS = [ const PROVIDERS = [
{ {
name: "System native",
name: "系统原生",
value: "native", value: "native",
logo: AnythingLLMIcon, logo: AnythingLLMIcon,
options: (settings) => <BrowserNative settings={settings} />, options: (settings) => <BrowserNative settings={settings} />,
description: "Uses your browser's built in TTS service if supported.",
description: "如果支持的话,使用浏览器内置的TTS服务",
}, },
{ {
name: "OpenAI", name: "OpenAI",
@ -118,14 +118,11 @@ export default function TextToSpeechProvider({ settings }) {
<div className="w-full flex flex-col gap-y-1 pb-6 border-white light:border-theme-sidebar-border border-b-2 border-opacity-10"> <div className="w-full flex flex-col gap-y-1 pb-6 border-white light:border-theme-sidebar-border border-b-2 border-opacity-10">
<div className="flex gap-x-4 items-center"> <div className="flex gap-x-4 items-center">
<p className="text-lg leading-6 font-bold text-white"> <p className="text-lg leading-6 font-bold text-white">
Text-to-speech Preference
语音合成偏好
</p> </p>
</div> </div>
<p className="text-xs leading-[18px] font-base text-white text-opacity-60"> <p className="text-xs leading-[18px] font-base text-white text-opacity-60">
Here you can specify what kind of text-to-speech providers you would
want to use in your AnythingLLM experience. By default, we use the
browser's built in support for these services, but you may want to
use others.
您可在此选择文本到语音提供程序用于琛海AI体验默认使用浏览器内置服务但您也可选择其他
</p> </p>
</div> </div>
<div className="w-full justify-end flex"> <div className="w-full justify-end flex">
@ -135,7 +132,7 @@ export default function TextToSpeechProvider({ settings }) {
</CTAButton> </CTAButton>
)} )}
</div> </div>
<div className="text-base font-bold text-white mt-6 mb-4">Provider</div>
<div className="text-base font-bold text-white mt-6 mb-4">提供商</div>
<div className="relative"> <div className="relative">
{searchMenuOpen && ( {searchMenuOpen && (
<div <div
@ -156,7 +153,7 @@ export default function TextToSpeechProvider({ settings }) {
type="text" type="text"
name="tts-provider-search" name="tts-provider-search"
autoComplete="off" autoComplete="off"
placeholder="Search text to speech providers"
placeholder="搜索文本转语音的提供商"
className="border-none -ml-4 my-2 bg-transparent z-20 pl-12 h-[38px] w-full px-4 py-1 text-sm outline-none text-theme-text-primary placeholder:text-theme-text-primary placeholder:font-medium" className="border-none -ml-4 my-2 bg-transparent z-20 pl-12 h-[38px] w-full px-4 py-1 text-sm outline-none text-theme-text-primary placeholder:text-theme-text-primary placeholder:font-medium"
onChange={(e) => setSearchQuery(e.target.value)} onChange={(e) => setSearchQuery(e.target.value)}
ref={searchInputRef} ref={searchInputRef}

13
frontend/src/pages/GeneralSettings/BrowserExtensionApiKey/NewBrowserExtensionApiKeyModal/index.jsx

@ -53,7 +53,7 @@ export default function NewBrowserExtensionApiKeyModal({
<div className="relative p-6 border-b rounded-t border-theme-modal-border"> <div className="relative p-6 border-b rounded-t border-theme-modal-border">
<div className="w-full flex gap-x-2 items-center"> <div className="w-full flex gap-x-2 items-center">
<h3 className="text-xl font-semibold text-white overflow-hidden overflow-ellipsis whitespace-nowrap"> <h3 className="text-xl font-semibold text-white overflow-hidden overflow-ellipsis whitespace-nowrap">
New Browser Extension API Key
新的浏览器扩展API密钥
</h3> </h3>
</div> </div>
<button <button
@ -78,19 +78,14 @@ export default function NewBrowserExtensionApiKeyModal({
)} )}
{isMultiUser && ( {isMultiUser && (
<p className="text-yellow-300 light:text-orange-500 text-xs md:text-sm font-semibold"> <p className="text-yellow-300 light:text-orange-500 text-xs md:text-sm font-semibold">
Warning: You are in multi-user mode, this API key will allow
access to all workspaces associated with your account. Please
share it cautiously.
警告当前处于多用户模式此API密钥可访问与您帐户关联的所有文件分析区请谨慎分享以防泄露
</p> </p>
)} )}
<p className="text-white text-opacity-60 text-xs md:text-sm"> <p className="text-white text-opacity-60 text-xs md:text-sm">
After clicking "Create API Key", AnythingLLM will attempt to
connect to your browser extension automatically.
点击创建API密钥琛海AI将尝试自动连接到您的浏览器扩展
</p> </p>
<p className="text-white text-opacity-60 text-xs md:text-sm"> <p className="text-white text-opacity-60 text-xs md:text-sm">
If you see "Connected to AnythingLLM" in the extension, the
connection was successful. If not, please copy the connection
string and paste it into the extension manually.
如果在扩展中显示链接琛海AI则表示连接已成功建立如果未显示请复制连接字符串并手动粘贴到扩展中以完成连接
</p> </p>
</div> </div>
<div className="flex justify-between items-center mt-6 pt-6 border-t border-theme-modal-border"> <div className="flex justify-between items-center mt-6 pt-6 border-t border-theme-modal-border">

17
frontend/src/pages/GeneralSettings/BrowserExtensionApiKey/index.jsx

@ -50,12 +50,11 @@ export default function BrowserExtensionApiKeys() {
<div className="w-full flex flex-col gap-y-1 pb-6 border-white/10 border-b-2"> <div className="w-full flex flex-col gap-y-1 pb-6 border-white/10 border-b-2">
<div className="items-center flex gap-x-4"> <div className="items-center flex gap-x-4">
<p className="text-lg leading-6 font-bold text-theme-text-primary"> <p className="text-lg leading-6 font-bold text-theme-text-primary">
Browser Extension API Keys
浏览器扩展API密钥
</p> </p>
</div> </div>
<p className="text-xs leading-[18px] font-base text-theme-text-secondary mt-2"> <p className="text-xs leading-[18px] font-base text-theme-text-secondary mt-2">
Manage API keys for browser extensions connecting to your
AnythingLLM instance.
管理连接到琛海AI的实例的浏览器扩展API密钥
</p> </p>
</div> </div>
<div className="w-full justify-end flex"> <div className="w-full justify-end flex">
@ -64,7 +63,7 @@ export default function BrowserExtensionApiKeys() {
className="mt-3 mr-0 mb-4 md:-mb-14 z-10" className="mt-3 mr-0 mb-4 md:-mb-14 z-10"
> >
<PlusCircle className="h-4 w-4" weight="bold" /> <PlusCircle className="h-4 w-4" weight="bold" />
Generate New API Key
生成新的API秘钥
</CTAButton> </CTAButton>
</div> </div>
<div className="overflow-x-auto mt-6"> <div className="overflow-x-auto mt-6">
@ -85,18 +84,18 @@ export default function BrowserExtensionApiKeys() {
<thead className="text-theme-text-secondary text-xs leading-[18px] font-bold uppercase border-white/10 border-b"> <thead className="text-theme-text-secondary text-xs leading-[18px] font-bold uppercase border-white/10 border-b">
<tr> <tr>
<th scope="col" className="px-6 py-3 rounded-tl-lg"> <th scope="col" className="px-6 py-3 rounded-tl-lg">
Extension Connection String
扩展连接字符串
</th> </th>
{isMultiUser && ( {isMultiUser && (
<th scope="col" className="px-6 py-3"> <th scope="col" className="px-6 py-3">
Created By
创建者
</th> </th>
)} )}
<th scope="col" className="px-6 py-3"> <th scope="col" className="px-6 py-3">
Created At
创建时间
</th> </th>
<th scope="col" className="px-6 py-3 rounded-tr-lg"> <th scope="col" className="px-6 py-3 rounded-tr-lg">
Actions
动作
</th> </th>
</tr> </tr>
</thead> </thead>
@ -107,7 +106,7 @@ export default function BrowserExtensionApiKeys() {
colSpan={isMultiUser ? "4" : "3"} colSpan={isMultiUser ? "4" : "3"}
className="px-6 py-4 text-center" className="px-6 py-4 text-center"
> >
No API keys found
没有发现API密钥
</td> </td>
</tr> </tr>
) : ( ) : (

4
frontend/src/pages/GeneralSettings/LLMPreference/index.jsx

@ -466,11 +466,11 @@ export default function GeneralLLMPreference() {
/> />
<div className="flex flex-col text-left"> <div className="flex flex-col text-left">
<div className="text-sm font-semibold text-white"> <div className="text-sm font-semibold text-white">
{selectedLLMObject?.name || "None selected"}
{selectedLLMObject?.name || "暂无选择"}
</div> </div>
<div className="mt-1 text-xs text-description"> <div className="mt-1 text-xs text-description">
{selectedLLMObject?.description || {selectedLLMObject?.description ||
"You need to select an LLM"}
"你需要选择一个大模型"}
</div> </div>
</div> </div>
</div> </div>

2
frontend/src/pages/GeneralSettings/VectorDatabase/index.jsx

@ -236,7 +236,7 @@ export default function GeneralVectorDatabase() {
type="text" type="text"
name="vdb-search" name="vdb-search"
autoComplete="off" autoComplete="off"
placeholder="Search all vector database providers"
placeholder="搜索所有向量数据库提供商"
className="border-none -ml-4 my-2 bg-transparent z-20 pl-12 h-[38px] w-full px-4 py-1 text-sm outline-none text-theme-text-primary placeholder:text-theme-text-primary placeholder:font-medium" className="border-none -ml-4 my-2 bg-transparent z-20 pl-12 h-[38px] w-full px-4 py-1 text-sm outline-none text-theme-text-primary placeholder:text-theme-text-primary placeholder:font-medium"
onChange={(e) => setSearchQuery(e.target.value)} onChange={(e) => setSearchQuery(e.target.value)}
ref={searchInputRef} ref={searchInputRef}

4
frontend/src/pages/Home/index.jsx

@ -41,8 +41,8 @@ export default function Home() {
icon: icon4, icon: icon4,
}, },
{ {
type: 2,
url: '',
type: 1,
url: '/home/ReportGeneration',
name: '报告生成', name: '报告生成',
icon: icon3, icon: icon3,
}, },

114
frontend/src/pages/ReportGeneration/index.jsx

@ -0,0 +1,114 @@
// import React, { useEffect, useRef } from 'react';
import React, { useEffect, useState, useRef } from 'react';
import '../DataAnalysis/DataAnalysis.css'
import sou from '../DataAnalysis/img/sou.png'
import home from '../DataAnalysis/img/home.png'
import tu1 from '../DataAnalysis/img/1.png'
import tu2 from '../DataAnalysis/img/2.png'
import tu3 from '../DataAnalysis/img/3.png'
import tu4 from '../DataAnalysis/img/4.png'
function IframeComponent() {
// const iframeRef = useRef(null);
//
// useEffect(() => {
// if (iframeRef.current) {
// iframeRef.current.contentWindow.addEventListener('message', (event) => {
// console.log(11111, event.data);
// });
// }
//
// return () => {
// if (iframeRef.current) {
// iframeRef.current.contentWindow.removeEventListener('message', (event) => {
// console.log('Received message:', event.data);
// });
// }
// };
// }, []); //
//
// return (
// <div>
// <iframe ref={iframeRef} src="https://example.com" className='w-[100%] h-screen'/>;
// </div>
// )
const [renderKey, setRenderKey] = useState();
const list = [
{
name: '报告模板',
text: '根据需要选择合适的模板进行编辑和生成报告。',
img: tu1
},
{
name: '数据支撑',
text: '可从文件库内选取指定参考文件',
img: tu2
},
{
name: '报告生成',
text: '根据分析结果和用户需求,自动生成各类报告,并支持多种输出格式。',
img: tu3
},
{
name: '智能推送',
text: '支持根据预设条件自动推送报告,确保相关人员及时获取报告信息',
img: tu4
},
]
useEffect(() => {
}, []);
const bindUrl = () =>{
window.location = '/'
}
return (
<div className='box'>
<div className='box1'>
<div className='head'>
<div><img src={home} onClick={bindUrl} alt="" /></div>
<div className='search'>
<div className='search1'>
<img src={sou} alt="" />
<input type="text" placeholder='请输入内容' />
</div>
<button>搜索</button>
</div>
</div>
<div className='content'>
{list.map((item, index) => (
<div className='content2' key={index}>
<div className='content2_1'>
<div className='nr1'>
<img src={item.img} alt="" />
</div>
<div className='nr2'>
<div>{item.name}</div>
<div>{item.text}</div>
</div>
</div>
<div className='content2_2'>
<button>立即使用</button>
</div>
</div>
))}
</div>
</div>
</div>
)
}
export default IframeComponent;

212
frontend/src/pages/Tendency/index.jsx

@ -1,29 +1,209 @@
import React, { useEffect, useRef } from 'react';
// import React, { useEffect, useRef } from 'react';
import React, { useEffect, useState, useRef } from 'react';
import '../DataAnalysis/DataAnalysis.css'
import sou from '../DataAnalysis/img/sou.png'
import home from '../DataAnalysis/img/home.png'
import tu1 from '../DataAnalysis/img/1.png'
import tu2 from '../DataAnalysis/img/2.png'
import tu3 from '../DataAnalysis/img/3.png'
import tu4 from '../DataAnalysis/img/4.png'
import tu5 from '../DataAnalysis/img/5.png'
import tu6 from '../DataAnalysis/img/6.png'
import tu7 from '../DataAnalysis/img/7.png'
import tu8 from '../DataAnalysis/img/8.png'
import tu9 from '../DataAnalysis/img/9.png'
import tu10 from '../DataAnalysis/img/10.png'
import tu11 from '../DataAnalysis/img/11.png'
import tu12 from '../DataAnalysis/img/12.png'
import tu13 from '../DataAnalysis/img/13.png'
import tu14 from '../DataAnalysis/img/14.png'
function IframeComponent() { function IframeComponent() {
const iframeRef = useRef(null);
// const iframeRef = useRef(null);
//
// useEffect(() => {
// if (iframeRef.current) {
// iframeRef.current.contentWindow.addEventListener('message', (event) => {
// console.log(11111, event.data);
// });
// }
//
// return () => {
// if (iframeRef.current) {
// iframeRef.current.contentWindow.removeEventListener('message', (event) => {
// console.log('Received message:', event.data);
// });
// }
// };
// }, []); //
//
// return (
// <div>
// <iframe ref={iframeRef} src="https://example.com" className='w-[100%] h-screen'/>;
// </div>
// )
const [renderKey, setRenderKey] = useState();
const list = [
{
name: '趋势预测',
text: '利用机器学习算法对历史数据进行分析,预测未来一段时间内的数据变化趋势,如经济发展、人口流动、环境状况等。',
img: tu1
},
{
name: '异常监测',
text: '自动检测数据中的异常值或突变点,提醒用户注意可能存在的问题或风险。',
img: tu2
},
{
name: '指标监测',
text: '对关键指标进行实时监控,当指标达到预设阈值时,自动触发警报,确保管理层能迅速响应。',
img: tu3
},
// {
// name: '',
// text: '',
// img: tu4
// },
// {
// name: '',
// text: '',
// img: tu5
// },
// {
// name: '',
// text: '',
// img: tu6
// },
// {
// name: '',
// text: '',
// img: tu7
// },
// {
// name: '',
// text: '',
// img: tu8
// },
// {
// name: '',
// text: '',
// img: tu9
// },
// {
// name: '',
// text: '',
// img: tu10
// },
// {
// name: '',
// text: '',
// img: tu11
// },
// {
// name: '',
// text: '',
// img: tu12
// },
// {
// name: '',
// text: '',
// img: tu13
// },
// {
// name: '',
// text: '',
// img: tu14
// },
// {
// name: '',
// text: '',
// img: tu8
// },
// {
// name: '',
// text: '访',
// img: tu9
// },
// {
// name: '',
// text: '',
// img: tu10
// },
// {
// name: '',
// text: '',
// img: tu11
// },
// {
// name: '',
// text: '',
// img: tu12
// },
// {
// name: '',
// text: '',
// img: tu13
// },
// {
// name: '',
// text: '',
// img: tu14
// },
]
useEffect(() => { useEffect(() => {
if (iframeRef.current) {
iframeRef.current.contentWindow.addEventListener('message', (event) => {
console.log(11111, event.data);
});
}
return () => {
if (iframeRef.current) {
iframeRef.current.contentWindow.removeEventListener('message', (event) => {
console.log('Received message:', event.data);
});
}, []);
const bindUrl = () =>{
window.location = '/'
} }
};
}, []); //
return ( return (
<div>
<iframe ref={iframeRef} src="https://example.com" className='w-[100%] h-screen'/>;
<div className='box'>
<div className='box1'>
<div className='head'>
<div><img src={home} onClick={bindUrl} alt="" /></div>
<div className='search'>
<div className='search1'>
<img src={sou} alt="" />
<input type="text" placeholder='请输入内容' />
</div>
<button>搜索</button>
</div>
</div>
<div className='content'>
{list.map((item, index) => (
<div className='content2' key={index}>
<div className='content2_1'>
<div className='nr1'>
<img src={item.img} alt="" />
</div>
<div className='nr2'>
<div>{item.name}</div>
<div>{item.text}</div>
</div>
</div>
<div className='content2_2'>
<button>立即使用</button>
</div>
</div>
))}
</div>
</div>
</div> </div>
) )
} }
export default IframeComponent; export default IframeComponent;

57
frontend/src/pages/Yuqingfenxi/index.jsx

@ -0,0 +1,57 @@
// import React, { useEffect, useRef } from 'react';
import React, { useEffect, useState, useRef } from 'react';
import '../DataAnalysis/DataAnalysis.css'
import sou from '../DataAnalysis/img/sou.png'
import home from '../DataAnalysis/img/home.png'
import tu1 from '../DataAnalysis/img/1.png'
import tu2 from '../DataAnalysis/img/2.png'
import tu3 from '../DataAnalysis/img/3.png'
import tu4 from '../DataAnalysis/img/4.png'
import tu5 from '../DataAnalysis/img/5.png'
import tu6 from '../DataAnalysis/img/6.png'
import tu7 from '../DataAnalysis/img/7.png'
import tu8 from '../DataAnalysis/img/8.png'
import tu9 from '../DataAnalysis/img/9.png'
import tu10 from '../DataAnalysis/img/10.png'
import tu11 from '../DataAnalysis/img/11.png'
import tu12 from '../DataAnalysis/img/12.png'
import tu13 from '../DataAnalysis/img/13.png'
import tu14 from '../DataAnalysis/img/14.png'
function IframeComponent() {
const iframeRef = useRef(null);
useEffect(() => {
if (iframeRef.current) {
iframeRef.current.contentWindow.addEventListener('message', (event) => {
console.log(11111, event.data);
});
}
return () => {
if (iframeRef.current) {
iframeRef.current.contentWindow.removeEventListener('message', (event) => {
console.log('Received message:', event.data);
});
}
};
}, []); //
return (
<div>
<iframe ref={iframeRef} src="http://ds1.chenhaitech.com/chat/8HbpWwY8Y6TtGD0v" className='w-[100%] h-screen'/>;
</div>
)
}
export default IframeComponent;

3
frontend/src/utils/paths.js

@ -17,6 +17,9 @@ export default {
Tendency: () => { Tendency: () => {
return "/home/Tendency"; return "/home/Tendency";
}, },
Yuqingfenxi: () => {
return "/home/Yuqingfenxi";
},
DataAnalysis: () => { DataAnalysis: () => {
return "/home/DataAnalysis"; return "/home/DataAnalysis";
}, },

4
locales/README.zh-CN.md

@ -47,12 +47,12 @@
AnythingLLM是一个全栈应用程序,您可以使用现成的商业大语言模型或流行的开源大语言模型,再结合向量数据库解决方案构建一个私有ChatGPT,不再受制于人:您可以本地运行,也可以远程托管,并能够与您提供的任何文档智能聊天。 AnythingLLM是一个全栈应用程序,您可以使用现成的商业大语言模型或流行的开源大语言模型,再结合向量数据库解决方案构建一个私有ChatGPT,不再受制于人:您可以本地运行,也可以远程托管,并能够与您提供的任何文档智能聊天。
AnythingLLM将您的文档划分为称为`workspaces` (工作区)的对象。工作区的功能类似于线程,同时增加了文档的容器化,。工作区可以共享文档,但工作区之间的内容不会互相干扰或污染,因此您可以保持每个工作区的上下文清晰。
AnythingLLM将您的文档划分为称为`workspaces` (文件分析区)的对象。文件分析区的功能类似于线程,同时增加了文档的容器化,。文件分析区可以共享文档,但文件分析区之间的内容不会互相干扰或污染,因此您可以保持每个文件分析区的上下文清晰。
AnythingLLM的一些酷炫特性 AnythingLLM的一些酷炫特性
- **多用户实例支持和权限管理** - **多用户实例支持和权限管理**
- 工作区内的智能体Agent(浏览网页、运行代码等)
- 文件分析区内的智能体Agent(浏览网页、运行代码等)
- [为您的网站定制的可嵌入聊天窗口](./embed/README.md) - [为您的网站定制的可嵌入聊天窗口](./embed/README.md)
- 支持多种文档类型(PDF、TXT、DOCX等) - 支持多种文档类型(PDF、TXT、DOCX等)
- 通过简单的用户界面管理向量数据库中的文档 - 通过简单的用户界面管理向量数据库中的文档

16
server/utils/boot/MetaGenerator.js

@ -45,21 +45,21 @@ class MetaGenerator {
{ {
tag: "title", tag: "title",
props: null, props: null,
content: "AnythingLLM | Your personal LLM trained on anything",
content: "琛海AI | 大模型私有化训练",
}, },
{ {
tag: "meta", tag: "meta",
props: { props: {
name: "title", name: "title",
content: "AnythingLLM | Your personal LLM trained on anything",
content: "琛海AI | 大模型私有化训练",
}, },
}, },
{ {
tag: "meta", tag: "meta",
props: { props: {
description: "title", description: "title",
content: "AnythingLLM | Your personal LLM trained on anything",
content: "琛海AI | 大模型私有化训练",
}, },
}, },
@ -73,14 +73,14 @@ class MetaGenerator {
tag: "meta", tag: "meta",
props: { props: {
property: "og:title", property: "og:title",
content: "AnythingLLM | Your personal LLM trained on anything",
content: "琛海AI | 大模型私有化训练",
}, },
}, },
{ {
tag: "meta", tag: "meta",
props: { props: {
property: "og:description", property: "og:description",
content: "AnythingLLM | Your personal LLM trained on anything",
content: "琛海AI | 大模型私有化训练",
}, },
}, },
{ {
@ -105,14 +105,14 @@ class MetaGenerator {
tag: "meta", tag: "meta",
props: { props: {
property: "twitter:title", property: "twitter:title",
content: "AnythingLLM | Your personal LLM trained on anything",
content: "琛海AI | 大模型私有化训练",
}, },
}, },
{ {
tag: "meta", tag: "meta",
props: { props: {
property: "twitter:description", property: "twitter:description",
content: "AnythingLLM | Your personal LLM trained on anything",
content: "琛海AI | 大模型私有化训练",
}, },
}, },
{ {
@ -191,7 +191,7 @@ class MetaGenerator {
props: null, props: null,
content: content:
customTitle ?? customTitle ??
"AnythingLLM | Your personal LLM trained on anything",
"琛海AI | 大模型私有化训练",
}, },
]; ];
} }

Loading…
Cancel
Save