mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-06-08 06:46:02 +00:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b70001c579 | ||
|
|
4a8f5516f6 | ||
|
|
f1ac9c77e6 | ||
|
|
b434a4e3d7 | ||
|
|
2f209cd59f | ||
|
|
0f585fd5ef | ||
|
|
a152dece9a |
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
简体中文 / [English](README_EN.md) / [日本語](README_JP.md) / (PR for your language)
|
[English](README_EN.md) / 简体中文 / [繁體中文](README_TW.md) / [日本語](README_JP.md) / (PR for your language)
|
||||||
|
|
||||||
[](https://discord.gg/wdNEHETs87)
|
[](https://discord.gg/wdNEHETs87)
|
||||||
[](https://qm.qq.com/q/JLi38whHum)
|
[](https://qm.qq.com/q/JLi38whHum)
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
[简体中文](README.md) / English / [日本語](README_JP.md) / (PR for your language)
|
English / [简体中文](README.md) / [繁體中文](README_TW.md) / [日本語](README_JP.md) / (PR for your language)
|
||||||
|
|
||||||
[](https://discord.gg/wdNEHETs87)
|
[](https://discord.gg/wdNEHETs87)
|
||||||
[](https://deepwiki.com/langbot-app/LangBot)
|
[](https://deepwiki.com/langbot-app/LangBot)
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
[简体中文](README.md) / [English](README_EN.md) / 日本語 / (PR for your language)
|
[English](README_EN.md) / [简体中文](README.md) / [繁體中文](README_TW.md) / 日本語 / (PR for your language)
|
||||||
|
|
||||||
[](https://discord.gg/wdNEHETs87)
|
[](https://discord.gg/wdNEHETs87)
|
||||||
[](https://deepwiki.com/langbot-app/LangBot)
|
[](https://deepwiki.com/langbot-app/LangBot)
|
||||||
|
|||||||
139
README_TW.md
Normal file
139
README_TW.md
Normal file
@@ -0,0 +1,139 @@
|
|||||||
|
<p align="center">
|
||||||
|
<a href="https://langbot.app">
|
||||||
|
<img src="https://docs.langbot.app/social_zh.png" alt="LangBot"/>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
[English](README_EN.md) / [简体中文](README.md) / 繁體中文 / [日本語](README_JP.md) / (PR for your language)
|
||||||
|
|
||||||
|
[](https://discord.gg/wdNEHETs87)
|
||||||
|
[](https://qm.qq.com/q/JLi38whHum)
|
||||||
|
[](https://deepwiki.com/langbot-app/LangBot)
|
||||||
|
[](https://github.com/langbot-app/LangBot/releases/latest)
|
||||||
|
<img src="https://img.shields.io/badge/python-3.10 ~ 3.13 -blue.svg" alt="python">
|
||||||
|
[](https://gitcode.com/RockChinQ/LangBot)
|
||||||
|
|
||||||
|
<a href="https://langbot.app">主頁</a> |
|
||||||
|
<a href="https://docs.langbot.app/zh/insight/guide.html">部署文件</a> |
|
||||||
|
<a href="https://docs.langbot.app/zh/plugin/plugin-intro.html">外掛介紹</a> |
|
||||||
|
<a href="https://github.com/langbot-app/LangBot/issues/new?assignees=&labels=%E7%8B%AC%E7%AB%8B%E6%8F%92%E4%BB%B6&projects=&template=submit-plugin.yml&title=%5BPlugin%5D%3A+%E8%AF%B7%E6%B1%82%E7%99%BB%E8%AE%B0%E6%96%B0%E6%8F%92%E4%BB%B6">提交外掛</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</p>
|
||||||
|
|
||||||
|
LangBot 是一個開源的大語言模型原生即時通訊機器人開發平台,旨在提供開箱即用的 IM 機器人開發體驗,具有 Agent、RAG、MCP 等多種 LLM 應用功能,適配全球主流即時通訊平台,並提供豐富的 API 介面,支援自定義開發。
|
||||||
|
|
||||||
|
## 📦 開始使用
|
||||||
|
|
||||||
|
#### Docker Compose 部署
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/langbot-app/LangBot
|
||||||
|
cd LangBot
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
訪問 http://localhost:5300 即可開始使用。
|
||||||
|
|
||||||
|
詳細文件[Docker 部署](https://docs.langbot.app/zh/deploy/langbot/docker.html)。
|
||||||
|
|
||||||
|
#### 寶塔面板部署
|
||||||
|
|
||||||
|
已上架寶塔面板,若您已安裝寶塔面板,可以根據[文件](https://docs.langbot.app/zh/deploy/langbot/one-click/bt.html)使用。
|
||||||
|
|
||||||
|
#### Zeabur 雲端部署
|
||||||
|
|
||||||
|
社群貢獻的 Zeabur 模板。
|
||||||
|
|
||||||
|
[](https://zeabur.com/zh-CN/templates/ZKTBDH)
|
||||||
|
|
||||||
|
#### Railway 雲端部署
|
||||||
|
|
||||||
|
[](https://railway.app/template/yRrAyL?referralCode=vogKPF)
|
||||||
|
|
||||||
|
#### 手動部署
|
||||||
|
|
||||||
|
直接使用發行版運行,查看文件[手動部署](https://docs.langbot.app/zh/deploy/langbot/manual.html)。
|
||||||
|
|
||||||
|
## 😎 保持更新
|
||||||
|
|
||||||
|
點擊倉庫右上角 Star 和 Watch 按鈕,獲取最新動態。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## ✨ 特性
|
||||||
|
|
||||||
|
- 💬 大模型對話、Agent:支援多種大模型,適配群聊和私聊;具有多輪對話、工具調用、多模態能力,自帶 RAG(知識庫)實現,並深度適配 [Dify](https://dify.ai)。
|
||||||
|
- 🤖 多平台支援:目前支援 QQ、QQ頻道、企業微信、個人微信、飛書、Discord、Telegram 等平台。
|
||||||
|
- 🛠️ 高穩定性、功能完備:原生支援訪問控制、限速、敏感詞過濾等機制;配置簡單,支援多種部署方式。支援多流水線配置,不同機器人用於不同應用場景。
|
||||||
|
- 🧩 外掛擴展、活躍社群:支援事件驅動、組件擴展等外掛機制;適配 Anthropic [MCP 協議](https://modelcontextprotocol.io/);目前已有數百個外掛。
|
||||||
|
- 😻 Web 管理面板:支援通過瀏覽器管理 LangBot 實例,不再需要手動編寫配置文件。
|
||||||
|
|
||||||
|
詳細規格特性請訪問[文件](https://docs.langbot.app/zh/insight/features.html)。
|
||||||
|
|
||||||
|
或訪問 demo 環境:https://demo.langbot.dev/
|
||||||
|
- 登入資訊:郵箱:`demo@langbot.app` 密碼:`langbot123456`
|
||||||
|
- 注意:僅展示 WebUI 效果,公開環境,請不要在其中填入您的任何敏感資訊。
|
||||||
|
|
||||||
|
### 訊息平台
|
||||||
|
|
||||||
|
| 平台 | 狀態 | 備註 |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| QQ 個人號 | ✅ | QQ 個人號私聊、群聊 |
|
||||||
|
| QQ 官方機器人 | ✅ | QQ 官方機器人,支援頻道、私聊、群聊 |
|
||||||
|
| 微信 | ✅ | |
|
||||||
|
| 企微對外客服 | ✅ | |
|
||||||
|
| 微信公眾號 | ✅ | |
|
||||||
|
| Lark | ✅ | |
|
||||||
|
| DingTalk | ✅ | |
|
||||||
|
| Discord | ✅ | |
|
||||||
|
| Telegram | ✅ | |
|
||||||
|
| Slack | ✅ | |
|
||||||
|
|
||||||
|
### 大模型能力
|
||||||
|
|
||||||
|
| 模型 | 狀態 | 備註 |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| [OpenAI](https://platform.openai.com/) | ✅ | 可接入任何 OpenAI 介面格式模型 |
|
||||||
|
| [DeepSeek](https://www.deepseek.com/) | ✅ | |
|
||||||
|
| [Moonshot](https://www.moonshot.cn/) | ✅ | |
|
||||||
|
| [Anthropic](https://www.anthropic.com/) | ✅ | |
|
||||||
|
| [xAI](https://x.ai/) | ✅ | |
|
||||||
|
| [智譜AI](https://open.bigmodel.cn/) | ✅ | |
|
||||||
|
| [優雲智算](https://www.compshare.cn/?ytag=GPU_YY-gh_langbot) | ✅ | 大模型和 GPU 資源平台 |
|
||||||
|
| [PPIO](https://ppinfra.com/user/register?invited_by=QJKFYD&utm_source=github_langbot) | ✅ | 大模型和 GPU 資源平台 |
|
||||||
|
| [302.AI](https://share.302.ai/SuTG99) | ✅ | 大模型聚合平台 |
|
||||||
|
| [Google Gemini](https://aistudio.google.com/prompts/new_chat) | ✅ | |
|
||||||
|
| [Dify](https://dify.ai) | ✅ | LLMOps 平台 |
|
||||||
|
| [Ollama](https://ollama.com/) | ✅ | 本地大模型運行平台 |
|
||||||
|
| [LMStudio](https://lmstudio.ai/) | ✅ | 本地大模型運行平台 |
|
||||||
|
| [GiteeAI](https://ai.gitee.com/) | ✅ | 大模型介面聚合平台 |
|
||||||
|
| [SiliconFlow](https://siliconflow.cn/) | ✅ | 大模型聚合平台 |
|
||||||
|
| [阿里雲百煉](https://bailian.console.aliyun.com/) | ✅ | 大模型聚合平台, LLMOps 平台 |
|
||||||
|
| [火山方舟](https://console.volcengine.com/ark/region:ark+cn-beijing/model?vendor=Bytedance&view=LIST_VIEW) | ✅ | 大模型聚合平台, LLMOps 平台 |
|
||||||
|
| [ModelScope](https://modelscope.cn/docs/model-service/API-Inference/intro) | ✅ | 大模型聚合平台 |
|
||||||
|
| [MCP](https://modelcontextprotocol.io/) | ✅ | 支援通過 MCP 協議獲取工具 |
|
||||||
|
|
||||||
|
### TTS
|
||||||
|
|
||||||
|
| 平台/模型 | 備註 |
|
||||||
|
| --- | --- |
|
||||||
|
| [FishAudio](https://fish.audio/zh-CN/discovery/) | [外掛](https://github.com/the-lazy-me/NewChatVoice) |
|
||||||
|
| [海豚 AI](https://www.ttson.cn/?source=thelazy) | [外掛](https://github.com/the-lazy-me/NewChatVoice) |
|
||||||
|
| [AzureTTS](https://portal.azure.com/) | [外掛](https://github.com/Ingnaryk/LangBot_AzureTTS) |
|
||||||
|
|
||||||
|
### 文生圖
|
||||||
|
|
||||||
|
| 平台/模型 | 備註 |
|
||||||
|
| --- | --- |
|
||||||
|
| 阿里雲百煉 | [外掛](https://github.com/Thetail001/LangBot_BailianTextToImagePlugin)
|
||||||
|
|
||||||
|
## 😘 社群貢獻
|
||||||
|
|
||||||
|
感謝以下[程式碼貢獻者](https://github.com/langbot-app/LangBot/graphs/contributors)和社群裡其他成員對 LangBot 的貢獻:
|
||||||
|
|
||||||
|
<a href="https://github.com/langbot-app/LangBot/graphs/contributors">
|
||||||
|
<img src="https://contrib.rocks/image?repo=langbot-app/LangBot" />
|
||||||
|
</a>
|
||||||
@@ -14,7 +14,7 @@ spec:
|
|||||||
zh_Hans: 基础 URL
|
zh_Hans: 基础 URL
|
||||||
type: string
|
type: string
|
||||||
required: true
|
required: true
|
||||||
default: "https://api.moonshot.com/v1"
|
default: "https://api.moonshot.ai/v1"
|
||||||
- name: timeout
|
- name: timeout
|
||||||
label:
|
label:
|
||||||
en_US: Timeout
|
en_US: Timeout
|
||||||
|
|||||||
BIN
pkg/provider/modelmgr/requesters/newapi.png
Normal file
BIN
pkg/provider/modelmgr/requesters/newapi.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.4 KiB |
17
pkg/provider/modelmgr/requesters/newapichatcmpl.py
Normal file
17
pkg/provider/modelmgr/requesters/newapichatcmpl.py
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import typing
|
||||||
|
import openai
|
||||||
|
|
||||||
|
from . import chatcmpl
|
||||||
|
|
||||||
|
|
||||||
|
class NewAPIChatCompletions(chatcmpl.OpenAIChatCompletions):
|
||||||
|
"""New API ChatCompletion API 请求器"""
|
||||||
|
|
||||||
|
client: openai.AsyncClient
|
||||||
|
|
||||||
|
default_config: dict[str, typing.Any] = {
|
||||||
|
'base_url': 'http://localhost:3000/v1',
|
||||||
|
'timeout': 120,
|
||||||
|
}
|
||||||
31
pkg/provider/modelmgr/requesters/newapichatcmpl.yaml
Normal file
31
pkg/provider/modelmgr/requesters/newapichatcmpl.yaml
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: LLMAPIRequester
|
||||||
|
metadata:
|
||||||
|
name: new-api-chat-completions
|
||||||
|
label:
|
||||||
|
en_US: New API
|
||||||
|
zh_Hans: New API
|
||||||
|
icon: newapi.png
|
||||||
|
spec:
|
||||||
|
config:
|
||||||
|
- name: base_url
|
||||||
|
label:
|
||||||
|
en_US: Base URL
|
||||||
|
zh_Hans: 基础 URL
|
||||||
|
type: string
|
||||||
|
required: true
|
||||||
|
default: "http://localhost:3000/v1"
|
||||||
|
- name: timeout
|
||||||
|
label:
|
||||||
|
en_US: Timeout
|
||||||
|
zh_Hans: 超时时间
|
||||||
|
type: integer
|
||||||
|
required: true
|
||||||
|
default: 120
|
||||||
|
support_type:
|
||||||
|
- llm
|
||||||
|
- text-embedding
|
||||||
|
execution:
|
||||||
|
python:
|
||||||
|
path: ./newapichatcmpl.py
|
||||||
|
attr: NewAPIChatCompletions
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
semantic_version = 'v4.1.1'
|
semantic_version = 'v4.1.2'
|
||||||
|
|
||||||
required_database_version = 4
|
required_database_version = 4
|
||||||
"""Tag the version of the database schema, used to check if the database needs to be migrated"""
|
"""Tag the version of the database schema, used to check if the database needs to be migrated"""
|
||||||
|
|||||||
1
web/.env.example
Normal file
1
web/.env.example
Normal file
@@ -0,0 +1 @@
|
|||||||
|
NEXT_PUBLIC_API_BASE_URL=http://localhost:5300
|
||||||
1
web/.gitignore
vendored
1
web/.gitignore
vendored
@@ -32,6 +32,7 @@ yarn-error.log*
|
|||||||
|
|
||||||
# env files (can opt-in for committing if needed)
|
# env files (can opt-in for committing if needed)
|
||||||
.env*
|
.env*
|
||||||
|
!.env.example
|
||||||
|
|
||||||
# vercel
|
# vercel
|
||||||
.vercel
|
.vercel
|
||||||
|
|||||||
@@ -1,36 +1,3 @@
|
|||||||
This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).
|
# Debug LangBot Frontend
|
||||||
|
|
||||||
## Getting Started
|
Please refer to the [Development Guide](https://docs.langbot.app/en/develop/dev-config.html) for more information.
|
||||||
|
|
||||||
First, run the development server:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run dev
|
|
||||||
# or
|
|
||||||
yarn dev
|
|
||||||
# or
|
|
||||||
pnpm dev
|
|
||||||
# or
|
|
||||||
bun dev
|
|
||||||
```
|
|
||||||
|
|
||||||
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
|
|
||||||
|
|
||||||
You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
|
|
||||||
|
|
||||||
This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel.
|
|
||||||
|
|
||||||
## Learn More
|
|
||||||
|
|
||||||
To learn more about Next.js, take a look at the following resources:
|
|
||||||
|
|
||||||
- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
|
|
||||||
- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
|
|
||||||
|
|
||||||
You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!
|
|
||||||
|
|
||||||
## Deploy on Vercel
|
|
||||||
|
|
||||||
The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
|
|
||||||
|
|
||||||
Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.
|
|
||||||
@@ -4,8 +4,6 @@
|
|||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "next dev --turbopack",
|
"dev": "next dev --turbopack",
|
||||||
"dev:local": "NEXT_PUBLIC_API_BASE_URL=http://localhost:5300 next dev --turbopack",
|
|
||||||
"dev:local:win": "set NEXT_PUBLIC_API_BASE_URL=http://localhost:5300&&next dev --turbopack",
|
|
||||||
"build": "next build",
|
"build": "next build",
|
||||||
"start": "next start",
|
"start": "next start",
|
||||||
"lint": "next lint",
|
"lint": "next lint",
|
||||||
|
|||||||
@@ -144,6 +144,11 @@ export default function HomeSidebar({
|
|||||||
'https://docs.langbot.app/zh/insight/guide.html',
|
'https://docs.langbot.app/zh/insight/guide.html',
|
||||||
'_blank',
|
'_blank',
|
||||||
);
|
);
|
||||||
|
} else if (language === 'zh-Hant') {
|
||||||
|
window.open(
|
||||||
|
'https://docs.langbot.app/zh/insight/guide.html',
|
||||||
|
'_blank',
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
window.open(
|
window.open(
|
||||||
'https://docs.langbot.app/en/insight/guide.html',
|
'https://docs.langbot.app/en/insight/guide.html',
|
||||||
|
|||||||
@@ -65,6 +65,9 @@ export default function Login() {
|
|||||||
if (i18n.language === 'zh-CN' || i18n.language === 'zh-Hans') {
|
if (i18n.language === 'zh-CN' || i18n.language === 'zh-Hans') {
|
||||||
setCurrentLanguage('zh-Hans');
|
setCurrentLanguage('zh-Hans');
|
||||||
localStorage.setItem('langbot_language', 'zh-Hans');
|
localStorage.setItem('langbot_language', 'zh-Hans');
|
||||||
|
} else if (i18n.language === 'zh-TW' || i18n.language === 'zh-Hant') {
|
||||||
|
setCurrentLanguage('zh-Hant');
|
||||||
|
localStorage.setItem('langbot_language', 'zh-Hant');
|
||||||
} else if (i18n.language === 'ja' || i18n.language === 'ja-JP') {
|
} else if (i18n.language === 'ja' || i18n.language === 'ja-JP') {
|
||||||
setCurrentLanguage('ja-JP');
|
setCurrentLanguage('ja-JP');
|
||||||
localStorage.setItem('langbot_language', 'ja-JP');
|
localStorage.setItem('langbot_language', 'ja-JP');
|
||||||
@@ -84,6 +87,8 @@ export default function Login() {
|
|||||||
let lang = 'zh-Hans';
|
let lang = 'zh-Hans';
|
||||||
if (language === 'zh-CN') {
|
if (language === 'zh-CN') {
|
||||||
lang = 'zh-Hans';
|
lang = 'zh-Hans';
|
||||||
|
} else if (language === 'zh-TW') {
|
||||||
|
lang = 'zh-Hant';
|
||||||
} else if (language === 'ja' || language === 'ja-JP') {
|
} else if (language === 'ja' || language === 'ja-JP') {
|
||||||
lang = 'ja-JP';
|
lang = 'ja-JP';
|
||||||
} else {
|
} else {
|
||||||
@@ -164,6 +169,7 @@ export default function Login() {
|
|||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
<SelectItem value="zh-Hans">简体中文</SelectItem>
|
<SelectItem value="zh-Hans">简体中文</SelectItem>
|
||||||
|
<SelectItem value="zh-Hant">繁體中文</SelectItem>
|
||||||
<SelectItem value="en-US">English</SelectItem>
|
<SelectItem value="en-US">English</SelectItem>
|
||||||
<SelectItem value="ja-JP">日本語</SelectItem>
|
<SelectItem value="ja-JP">日本語</SelectItem>
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
|
|||||||
@@ -63,6 +63,9 @@ export default function Register() {
|
|||||||
if (i18n.language === 'zh-CN' || i18n.language === 'zh-Hans') {
|
if (i18n.language === 'zh-CN' || i18n.language === 'zh-Hans') {
|
||||||
setCurrentLanguage('zh-Hans');
|
setCurrentLanguage('zh-Hans');
|
||||||
localStorage.setItem('langbot_language', 'zh-Hans');
|
localStorage.setItem('langbot_language', 'zh-Hans');
|
||||||
|
} else if (i18n.language === 'zh-TW' || i18n.language === 'zh-Hant') {
|
||||||
|
setCurrentLanguage('zh-Hant');
|
||||||
|
localStorage.setItem('langbot_language', 'zh-Hant');
|
||||||
} else if (i18n.language === 'ja' || i18n.language === 'ja-JP') {
|
} else if (i18n.language === 'ja' || i18n.language === 'ja-JP') {
|
||||||
setCurrentLanguage('ja-JP');
|
setCurrentLanguage('ja-JP');
|
||||||
localStorage.setItem('langbot_language', 'ja-JP');
|
localStorage.setItem('langbot_language', 'ja-JP');
|
||||||
@@ -82,6 +85,8 @@ export default function Register() {
|
|||||||
let lang = 'zh-Hans';
|
let lang = 'zh-Hans';
|
||||||
if (language === 'zh-CN') {
|
if (language === 'zh-CN') {
|
||||||
lang = 'zh-Hans';
|
lang = 'zh-Hans';
|
||||||
|
} else if (language === 'zh-TW') {
|
||||||
|
lang = 'zh-Hant';
|
||||||
} else if (language === 'ja' || language === 'ja-JP') {
|
} else if (language === 'ja' || language === 'ja-JP') {
|
||||||
lang = 'ja-JP';
|
lang = 'ja-JP';
|
||||||
} else {
|
} else {
|
||||||
@@ -148,6 +153,7 @@ export default function Register() {
|
|||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
<SelectItem value="zh-Hans">简体中文</SelectItem>
|
<SelectItem value="zh-Hans">简体中文</SelectItem>
|
||||||
|
<SelectItem value="zh-Hant">繁體中文</SelectItem>
|
||||||
<SelectItem value="en-US">English</SelectItem>
|
<SelectItem value="en-US">English</SelectItem>
|
||||||
<SelectItem value="ja-JP">日本語</SelectItem>
|
<SelectItem value="ja-JP">日本語</SelectItem>
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import LanguageDetector from 'i18next-browser-languagedetector';
|
|||||||
|
|
||||||
import enUS from './locales/en-US';
|
import enUS from './locales/en-US';
|
||||||
import zhHans from './locales/zh-Hans';
|
import zhHans from './locales/zh-Hans';
|
||||||
|
import zhHant from './locales/zh-Hant';
|
||||||
import jaJP from './locales/ja-JP';
|
import jaJP from './locales/ja-JP';
|
||||||
|
|
||||||
i18n
|
i18n
|
||||||
@@ -19,6 +20,9 @@ i18n
|
|||||||
'zh-Hans': {
|
'zh-Hans': {
|
||||||
translation: zhHans,
|
translation: zhHans,
|
||||||
},
|
},
|
||||||
|
'zh-Hant': {
|
||||||
|
translation: zhHant,
|
||||||
|
},
|
||||||
'ja-JP': {
|
'ja-JP': {
|
||||||
translation: jaJP,
|
translation: jaJP,
|
||||||
},
|
},
|
||||||
|
|||||||
330
web/src/i18n/locales/zh-Hant.ts
Normal file
330
web/src/i18n/locales/zh-Hant.ts
Normal file
@@ -0,0 +1,330 @@
|
|||||||
|
const zhHant = {
|
||||||
|
common: {
|
||||||
|
login: '登入',
|
||||||
|
logout: '登出',
|
||||||
|
email: '電子郵件',
|
||||||
|
password: '密碼',
|
||||||
|
welcome: '歡迎回到 LangBot 👋',
|
||||||
|
continueToLogin: '登入以繼續',
|
||||||
|
loginSuccess: '登入成功',
|
||||||
|
loginFailed: '登入失敗,請檢查電子郵件和密碼是否正確',
|
||||||
|
enterEmail: '輸入電子郵件地址',
|
||||||
|
enterPassword: '輸入密碼',
|
||||||
|
invalidEmail: '請輸入有效的電子郵件地址',
|
||||||
|
emptyPassword: '請輸入密碼',
|
||||||
|
language: '語言',
|
||||||
|
helpDocs: '輔助說明',
|
||||||
|
create: '建立',
|
||||||
|
edit: '編輯',
|
||||||
|
delete: '刪除',
|
||||||
|
add: '新增',
|
||||||
|
select: '請選擇',
|
||||||
|
cancel: '取消',
|
||||||
|
submit: '提交',
|
||||||
|
error: '錯誤',
|
||||||
|
success: '成功',
|
||||||
|
save: '儲存',
|
||||||
|
saving: '儲存中...',
|
||||||
|
confirm: '確認',
|
||||||
|
confirmDelete: '確認刪除',
|
||||||
|
deleteConfirmation: '您確定要刪除這個嗎?',
|
||||||
|
selectOption: '選擇一個選項',
|
||||||
|
required: '必填',
|
||||||
|
enable: '是否啟用',
|
||||||
|
name: '名稱',
|
||||||
|
description: '描述',
|
||||||
|
close: '關閉',
|
||||||
|
deleteSuccess: '刪除成功',
|
||||||
|
deleteError: '刪除失敗:',
|
||||||
|
addRound: '新增回合',
|
||||||
|
copySuccess: '複製成功',
|
||||||
|
test: '測試',
|
||||||
|
forgotPassword: '忘記密碼?',
|
||||||
|
loading: '載入中...',
|
||||||
|
},
|
||||||
|
notFound: {
|
||||||
|
title: '頁面不存在',
|
||||||
|
description:
|
||||||
|
'您要查詢的頁面似乎不存在。請檢查您輸入的 URL 是否正確,或返回首頁。',
|
||||||
|
back: '上一級',
|
||||||
|
home: '返回主頁',
|
||||||
|
help: '查看說明文件',
|
||||||
|
},
|
||||||
|
models: {
|
||||||
|
title: '模型設定',
|
||||||
|
description: '設定和管理可在流程線中使用的模型',
|
||||||
|
createModel: '建立模型',
|
||||||
|
editModel: '編輯模型',
|
||||||
|
getModelListError: '取得模型清單失敗:',
|
||||||
|
modelName: '模型名稱',
|
||||||
|
modelProvider: '模型供應商',
|
||||||
|
modelBaseURL: '基礎 URL',
|
||||||
|
modelAbilities: '模型能力',
|
||||||
|
saveSuccess: '儲存成功',
|
||||||
|
saveError: '儲存失敗:',
|
||||||
|
createSuccess: '建立成功',
|
||||||
|
createError: '建立失敗:',
|
||||||
|
deleteSuccess: '刪除成功',
|
||||||
|
deleteError: '刪除失敗:',
|
||||||
|
deleteConfirmation: '您確定要刪除這個模型嗎?',
|
||||||
|
modelNameRequired: '模型名稱不能為空',
|
||||||
|
modelProviderRequired: '模型供應商不能為空',
|
||||||
|
requestURLRequired: '請求URL不能為空',
|
||||||
|
apiKeyRequired: 'API Key不能為空',
|
||||||
|
keyNameRequired: '鍵名不能為空',
|
||||||
|
mustBeValidNumber: '必須是有效的數字',
|
||||||
|
mustBeTrueOrFalse: '必須是 true 或 false',
|
||||||
|
requestURL: '請求URL',
|
||||||
|
apiKey: 'API Key',
|
||||||
|
abilities: '能力',
|
||||||
|
selectModelAbilities: '選擇模型能力',
|
||||||
|
visionAbility: '視覺能力',
|
||||||
|
functionCallAbility: '函數呼叫',
|
||||||
|
extraParameters: '額外參數',
|
||||||
|
addParameter: '新增參數',
|
||||||
|
keyName: '鍵名',
|
||||||
|
type: '類型',
|
||||||
|
value: '值',
|
||||||
|
string: '字串',
|
||||||
|
number: '數字',
|
||||||
|
boolean: '布林值',
|
||||||
|
selectModelProvider: '選擇模型供應商',
|
||||||
|
modelProviderDescription: '請填寫供應商向您提供的模型名稱',
|
||||||
|
selectModel: '請選擇模型',
|
||||||
|
testSuccess: '測試成功',
|
||||||
|
testError: '測試失敗,請檢查模型設定',
|
||||||
|
llmModels: '對話模型',
|
||||||
|
},
|
||||||
|
bots: {
|
||||||
|
title: '機器人',
|
||||||
|
description: '建立和管理機器人,這是 LangBot 與各個平台連接的入口',
|
||||||
|
createBot: '建立機器人',
|
||||||
|
editBot: '編輯機器人',
|
||||||
|
getBotListError: '取得機器人清單失敗:',
|
||||||
|
botName: '機器人名稱',
|
||||||
|
botDescription: '機器人描述',
|
||||||
|
botNameRequired: '機器人名稱不能為空',
|
||||||
|
botDescriptionRequired: '機器人描述不能為空',
|
||||||
|
adapterRequired: '適配器不能為空',
|
||||||
|
defaultDescription: '一個機器人',
|
||||||
|
getBotConfigError: '取得機器人設定失敗:',
|
||||||
|
saveSuccess: '儲存成功',
|
||||||
|
saveError: '儲存失敗:',
|
||||||
|
createSuccess: '建立成功 請啟用或修改綁定流程線',
|
||||||
|
createError: '建立失敗:',
|
||||||
|
deleteSuccess: '刪除成功',
|
||||||
|
deleteError: '刪除失敗:',
|
||||||
|
deleteConfirmation: '您確定要刪除這個機器人嗎?',
|
||||||
|
platformAdapter: '平台/適配器選擇',
|
||||||
|
selectAdapter: '選擇適配器',
|
||||||
|
adapterConfig: '適配器設定',
|
||||||
|
bindPipeline: '綁定流程線',
|
||||||
|
selectPipeline: '選擇流程線',
|
||||||
|
botLogTitle: '機器人日誌',
|
||||||
|
enableAutoRefresh: '開啟自動重新整理',
|
||||||
|
session: '對話',
|
||||||
|
yesterday: '昨天',
|
||||||
|
earlier: '更久之前',
|
||||||
|
dateFormat: '{{month}}月{{day}}日',
|
||||||
|
setBotEnableError: '設定機器人啟用狀態失敗',
|
||||||
|
log: '日誌',
|
||||||
|
configuration: '設定',
|
||||||
|
logs: '日誌',
|
||||||
|
},
|
||||||
|
plugins: {
|
||||||
|
title: '外掛管理',
|
||||||
|
description: '安裝和設定用於擴展 LangBot 功能的外掛',
|
||||||
|
createPlugin: '建立外掛',
|
||||||
|
editPlugin: '編輯外掛',
|
||||||
|
installed: '已安裝',
|
||||||
|
marketplace: 'Marketplace',
|
||||||
|
arrange: '編排',
|
||||||
|
install: '安裝',
|
||||||
|
installFromGithub: '從 GitHub 安裝外掛',
|
||||||
|
onlySupportGithub: '目前僅支援從 GitHub 安裝',
|
||||||
|
enterGithubLink: '請輸入外掛的Github連結',
|
||||||
|
installing: '正在安裝外掛...',
|
||||||
|
installSuccess: '外掛安裝成功',
|
||||||
|
installFailed: '外掛安裝失敗:',
|
||||||
|
searchPlugin: '搜尋外掛',
|
||||||
|
sortBy: '排序方式',
|
||||||
|
mostStars: '最多星標',
|
||||||
|
recentlyAdded: '最近新增',
|
||||||
|
recentlyUpdated: '最近更新',
|
||||||
|
noMatchingPlugins: '沒有找到符合的外掛',
|
||||||
|
loading: '載入中...',
|
||||||
|
getPluginListError: '取得外掛清單失敗:',
|
||||||
|
pluginConfig: '外掛設定',
|
||||||
|
noPluginInstalled: '暫未安裝任何外掛',
|
||||||
|
pluginSort: '外掛排序',
|
||||||
|
pluginSortDescription:
|
||||||
|
'外掛順序會影響同一事件內的處理順序,請拖曳外掛卡片排序',
|
||||||
|
pluginSortSuccess: '外掛排序成功',
|
||||||
|
pluginSortError: '外掛排序失敗:',
|
||||||
|
pluginNoConfig: '外掛沒有設定項目。',
|
||||||
|
deleting: '刪除中...',
|
||||||
|
deletePlugin: '刪除外掛',
|
||||||
|
cancel: '取消',
|
||||||
|
saveConfig: '儲存設定',
|
||||||
|
saving: '儲存中...',
|
||||||
|
confirmDeletePlugin: '您確定要刪除外掛({{author}}/{{name}})嗎?',
|
||||||
|
confirmDelete: '確認刪除',
|
||||||
|
deleteError: '刪除失敗:',
|
||||||
|
close: '關閉',
|
||||||
|
deleteConfirm: '刪除確認',
|
||||||
|
modifyFailed: '修改失敗:',
|
||||||
|
eventCount: '事件:{{count}}',
|
||||||
|
toolCount: '工具:{{count}}',
|
||||||
|
starCount: '星標:{{count}}',
|
||||||
|
},
|
||||||
|
pipelines: {
|
||||||
|
title: '流程線',
|
||||||
|
description: '流程線定義了對訊息事件的處理流程,用於綁定到機器人',
|
||||||
|
createPipeline: '建立流程線',
|
||||||
|
editPipeline: '編輯流程線',
|
||||||
|
chat: '對話',
|
||||||
|
configuration: '設定',
|
||||||
|
debugChat: '對話除錯',
|
||||||
|
getPipelineListError: '取得流程線清單失敗:',
|
||||||
|
daysAgo: '天前',
|
||||||
|
today: '今天',
|
||||||
|
updateTime: '更新於',
|
||||||
|
defaultBadge: '預設',
|
||||||
|
sortBy: '排序方式',
|
||||||
|
newestCreated: '最新建立',
|
||||||
|
recentlyEdited: '最近編輯',
|
||||||
|
earliestEdited: '最早編輯',
|
||||||
|
basicInfo: '基本資訊',
|
||||||
|
aiCapabilities: 'AI 能力',
|
||||||
|
triggerConditions: '觸發條件',
|
||||||
|
safetyControls: '安全控制',
|
||||||
|
outputProcessing: '輸出處理',
|
||||||
|
nameRequired: '名稱不能為空',
|
||||||
|
descriptionRequired: '描述不能為空',
|
||||||
|
createSuccess: '建立成功 請編輯流程線詳細參數',
|
||||||
|
createError: '建立失敗:',
|
||||||
|
saveSuccess: '儲存成功',
|
||||||
|
saveError: '儲存失敗:',
|
||||||
|
deleteConfirmation:
|
||||||
|
'您確定要刪除這個流程線嗎?已綁定此流程線的機器人將無法使用。',
|
||||||
|
defaultPipelineCannotDelete: '預設流程線不可刪除',
|
||||||
|
deleteSuccess: '刪除成功',
|
||||||
|
deleteError: '刪除失敗:',
|
||||||
|
debugDialog: {
|
||||||
|
title: '流程線對話',
|
||||||
|
selectPipeline: '選擇流程線',
|
||||||
|
sessionType: '對話類型',
|
||||||
|
privateChat: '私聊',
|
||||||
|
groupChat: '群聊',
|
||||||
|
send: '傳送',
|
||||||
|
reset: '重設對話',
|
||||||
|
inputPlaceholder: '傳送 {{type}} 訊息...',
|
||||||
|
noMessages: '暫無訊息',
|
||||||
|
userMessage: '使用者',
|
||||||
|
botMessage: '機器人',
|
||||||
|
sendFailed: '傳送失敗',
|
||||||
|
resetSuccess: '對話已重設',
|
||||||
|
resetFailed: '重設失敗',
|
||||||
|
loadMessagesFailed: '載入訊息失敗',
|
||||||
|
loadPipelinesFailed: '載入流程線失敗',
|
||||||
|
atTips: '提及機器人',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
knowledge: {
|
||||||
|
title: '知識庫',
|
||||||
|
createKnowledgeBase: '建立知識庫',
|
||||||
|
editKnowledgeBase: '編輯知識庫',
|
||||||
|
selectKnowledgeBase: '選擇知識庫',
|
||||||
|
empty: '無',
|
||||||
|
editDocument: '文件',
|
||||||
|
description: '設定可用於提升模型回覆品質的知識庫',
|
||||||
|
metadata: '中繼資料',
|
||||||
|
documents: '文件',
|
||||||
|
kbNameRequired: '知識庫名稱不能為空',
|
||||||
|
kbDescriptionRequired: '知識庫描述不能為空',
|
||||||
|
embeddingModelUUIDRequired: '嵌入模型不能為空',
|
||||||
|
daysAgo: '天前',
|
||||||
|
today: '今天',
|
||||||
|
kbName: '知識庫名稱',
|
||||||
|
kbDescription: '知識庫描述',
|
||||||
|
defaultDescription: '一個知識庫',
|
||||||
|
embeddingModelUUID: '嵌入模型',
|
||||||
|
selectEmbeddingModel: '選擇嵌入模型',
|
||||||
|
embeddingModelDescription: '用於向量化文字,可在模型設定頁面設定',
|
||||||
|
updateTime: '更新於',
|
||||||
|
cannotChangeEmbeddingModel: '知識庫建立後不可修改嵌入模型',
|
||||||
|
updateKnowledgeBaseSuccess: '知識庫更新成功',
|
||||||
|
updateKnowledgeBaseFailed: '知識庫更新失敗',
|
||||||
|
documentsTab: {
|
||||||
|
name: '名稱',
|
||||||
|
status: '狀態',
|
||||||
|
noResults: '暫無文件',
|
||||||
|
dragAndDrop: '拖曳檔案到此處或點擊上傳',
|
||||||
|
uploading: '上傳中...',
|
||||||
|
supportedFormats: '支援 PDF、Word、TXT、Markdown 等文件格式',
|
||||||
|
uploadSuccess: '檔案上傳成功!',
|
||||||
|
uploadError: '檔案上傳失敗,請重試',
|
||||||
|
uploadingFile: '上傳檔案中...',
|
||||||
|
actions: '操作',
|
||||||
|
delete: '刪除檔案',
|
||||||
|
fileDeleteSuccess: '檔案刪除成功',
|
||||||
|
fileDeleteFailed: '檔案刪除失敗',
|
||||||
|
processing: '處理中',
|
||||||
|
completed: '完成',
|
||||||
|
failed: '失敗',
|
||||||
|
},
|
||||||
|
deleteKnowledgeBaseConfirmation:
|
||||||
|
'您確定要刪除這個知識庫嗎?此知識庫下的所有文件將被刪除。',
|
||||||
|
retrieve: '檢索測試',
|
||||||
|
retrieveTest: '檢索測試',
|
||||||
|
query: '查詢',
|
||||||
|
queryPlaceholder: '輸入查詢內容...',
|
||||||
|
distance: '距離',
|
||||||
|
content: '內容',
|
||||||
|
fileName: '檔案名稱',
|
||||||
|
noResults: '暫無結果',
|
||||||
|
retrieveError: '檢索失敗',
|
||||||
|
},
|
||||||
|
register: {
|
||||||
|
title: '初始化 LangBot 👋',
|
||||||
|
description: '這是您首次啟動 LangBot',
|
||||||
|
adminAccountNote: '您填寫的電子郵件和密碼將作為初始管理員帳號',
|
||||||
|
register: '註冊',
|
||||||
|
initSuccess: '初始化成功 請登入',
|
||||||
|
initFailed: '初始化失敗:',
|
||||||
|
},
|
||||||
|
resetPassword: {
|
||||||
|
title: '重設密碼 🔐',
|
||||||
|
description: '輸入恢復金鑰和新的密碼來重設您的帳戶密碼',
|
||||||
|
recoveryKey: '恢復金鑰',
|
||||||
|
recoveryKeyDescription:
|
||||||
|
'儲存在設定檔案`data/config.yaml`的`system.recovery_key`中',
|
||||||
|
newPassword: '新密碼',
|
||||||
|
enterRecoveryKey: '輸入恢復金鑰',
|
||||||
|
enterNewPassword: '輸入新密碼',
|
||||||
|
recoveryKeyRequired: '恢復金鑰不能為空',
|
||||||
|
newPasswordRequired: '新密碼不能為空',
|
||||||
|
resetPassword: '重設密碼',
|
||||||
|
resetting: '重設中...',
|
||||||
|
resetSuccess: '密碼重設成功,請登入',
|
||||||
|
resetFailed: '密碼重設失敗,請檢查電子郵件和恢復金鑰是否正確',
|
||||||
|
backToLogin: '返回登入',
|
||||||
|
},
|
||||||
|
embedding: {
|
||||||
|
description: '管理嵌入模型,用於向量化文字',
|
||||||
|
createModel: '建立嵌入模型',
|
||||||
|
editModel: '編輯嵌入模型',
|
||||||
|
getModelListError: '取得嵌入模型清單失敗:',
|
||||||
|
embeddingModels: '嵌入模型',
|
||||||
|
extraParametersDescription:
|
||||||
|
'將在請求時附加到請求體中,如 encoding_format, dimensions 等',
|
||||||
|
},
|
||||||
|
llm: {
|
||||||
|
llmModels: '對話模型',
|
||||||
|
description: '管理 LLM 模型,用於對話訊息產生',
|
||||||
|
extraParametersDescription:
|
||||||
|
'將在請求時附加到請求體中,如 max_tokens, temperature, top_p 等',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export default zhHant;
|
||||||
Reference in New Issue
Block a user