diff --git a/README_ja.md b/README_ja.md
index e169cd9f9..1a2684ab4 100644
--- a/README_ja.md
+++ b/README_ja.md
@@ -10,7 +10,7 @@
日本語
-FastGPT は、LLM 上に構築された知識ベースの Q&A システムで、すぐに使えるデータ処理とモデル呼び出し機能を提供し、Flow の可視化を通じてワークフローのオーケストレーションを可能にします!
+FastGPT は、LLM 上 に 構築 された 知識 ベースの Q&A システムで、すぐに 使 えるデータ 処理 とモデル 呼 び 出 し 機能 を 提供 し、Flow の 可視化 を 通 じてワークフローのオーケストレーションを 可能 にします!
@@ -34,7 +34,7 @@ FastGPT は、LLM 上に構築された知識ベースの Q&A システムで、
https://github.com/labring/FastGPT/assets/15308462/7d3a38df-eb0e-4388-9250-2409bd33f6d4
-## 🛸 クラウドサービスの利用
+## 🛸 クラウドサービスの 利用
[fastgpt.run](https://fastgpt.run/)
| | |
@@ -44,64 +44,64 @@ https://github.com/labring/FastGPT/assets/15308462/7d3a38df-eb0e-4388-9250-2409b
## 💡 機能
-1. パワフルなビジュアルワークフロー: AI アプリケーションを簡単に作成
+1. パワフルなビジュアルワークフロー:AI アプリケーションを 簡単 に 作成
- - [x] デッキのシンプルモード - マニュアルアレンジ不要
- - [x] ユーザ対話事前ガイダンス
- - [x] グローバル変数
- - [x] ナレッジベース検索
- - [x] 複数の LLM モデルによる対話
- - [x] テキストマジック - 構造化データへの変換
- - [x] HTTP による拡張
- - [ ] on-the-fly HTTP モジュールのための埋め込みLaf
- - [x] 次の対話ステップへの指示
- - [x] ソースファイル参照の追跡
+ - [x] デッキのシンプルモード - マニュアルアレンジ 不要
+ - [x] ユーザ 対話事前 ガイダンス
+ - [x] グローバル 変数
+ - [x] ナレッジベース 検索
+ - [x] 複数 の LLM モデルによる 対話
+ - [x] テキストマジック - 構造化 データへの 変換
+ - [x] HTTP による 拡張
+ - [ ] on-the-fly HTTP モジュールのための 埋 め 込 みLaf
+ - [x] 次 の 対話 ステップへの 指示
+ - [x] ソースファイル 参照 の 追跡
- [ ] カスタムファイルリーダー
- - [ ] モジュールをプラグインにパッケージして再利用する
+ - [ ] モジュールをプラグインにパッケージして 再利用 する
-2. 広範なナレッジベースの前処理
+2. 広範 なナレッジベースの 前処理
- - [x] 複数のナレッジベースの再利用と混合
- - [x] チャンクの変更と削除を追跡
- - [x] 手動入力、直接分割、QA 分割インポートをサポート
+ - [x] 複数 のナレッジベースの 再利用 と 混合
+ - [x] チャンクの 変更 と 削除 を 追跡
+ - [x] 手動入力、直接分割、QA 分割 インポートをサポート
- [x] URL フェッチとバッチ CSV インポートをサポート
- - [x] ナレッジベースにユニークなベクトルモデルを設定可能
- - [x] オリジナルファイルの保存
- - [ ] ファイル学習エージェント
+ - [x] ナレッジベースにユニークなベクトルモデルを 設定可能
+ - [x] オリジナルファイルの 保存
+ - [ ] ファイル 学習 エージェント
-3. 複数の効果測定チャンネル
+3. 複数 の 効果測定 チャンネル
- - [x] シングルポイントナレッジベース検索テスト
- - [x] 対話中のフィードバック参照と修正・削除機能
- - [x] 完全なコンテキストの提示
- - [ ] 完全なモジュール中間値提示
+ - [x] シングルポイントナレッジベース 検索 テスト
+ - [x] 対話中 のフィードバック 参照 と 修正 ・ 削除機能
+ - [x] 完全 なコンテキストの 提示
+ - [ ] 完全 なモジュール 中間値提示
4. OpenAPI
- - [x] 補完インターフェイス(GPT インターフェイスに合わせる)
+ - [x] 補完 インターフェイス (GPT インターフェイスに 合 わせる)
- [ ] ナレッジベース CRUD
-5. オペレーション機能
+5. オペレーション 機能
- - [x] ログイン不要の共有ウィンドウ
- - [x] Iframe によるワンクリック埋め込み
- - [ ] 対話記録への統一されたアクセス
+ - [x] ログイン 不要 の 共有 ウィンドウ
+ - [x] Iframe によるワンクリック 埋 め 込 み
+ - [ ] 対話記録 への 統一 されたアクセス
## 👨💻 開発
-プロジェクトの技術スタック: NextJs + TS + ChakraUI + Mongo + Postgres (Vector プラグイン)
+プロジェクトの 技術 スタック:NextJs + TS + ChakraUI + Mongo + Postgres (Vector プラグイン)
- **⚡ デプロイ**
[](https://cloud.sealos.io/?openapp=system-fastdeploy%3FtemplateName%3Dfastgpt)
- デプロイ後、データベースをセットアップするので、2~4分待ってください。基本設定を使っているので、最初は少し遅いかもしれません。
+ デプロイ 後、データベースをセットアップするので、2~4分待 ってください。基本設定 を 使 っているので、最初 は 少 し 遅 いかもしれません。
-- [ローカル開発入門](https://doc.fastgpt.run/docs/development)
+- [ローカル 開発入門](https://doc.fastgpt.run/docs/development)
- [FastGPT のデプロイ](https://doc.fastgpt.run/docs/installation)
-- [システム設定ガイド](https://doc.fastgpt.run/docs/installation/reference)
-- [複数モデルの設定](https://doc.fastgpt.run/docs/installation/reference/models)
-- [バージョン更新とアップグレード](https://doc.fastgpt.run/docs/installation/upgrading)
+- [システム 設定 ガイド](https://doc.fastgpt.run/docs/installation/reference)
+- [複数 モデルの 設定](https://doc.fastgpt.run/docs/installation/reference/models)
+- [バージョン 更新 とアップグレード](https://doc.fastgpt.run/docs/installation/upgrading)
@@ -112,23 +112,23 @@ https://github.com/labring/FastGPT/assets/15308462/7d3a38df-eb0e-4388-9250-2409b
| ------------------------------------------------- | ---------------------------------------------- |
|  |  | -->
-## 👀 その他
+## 👀 その 他
- [FastGPT FAQ](https://kjqvjse66l.feishu.cn/docx/HtrgdT0pkonP4kxGx8qcu6XDnGh)
-- [Docker 導入チュートリアル動画](https://www.bilibili.com/video/BV1jo4y147fT/)
-- [公式アカウント統合ビデオチュートリアル](https://www.bilibili.com/video/BV1xh4y1t7fy/)
+- [Docker 導入 チュートリアル 動画](https://www.bilibili.com/video/BV1jo4y147fT/)
+- [公式 アカウント 統合 ビデオチュートリアル](https://www.bilibili.com/video/BV1xh4y1t7fy/)
- [FastGPT ナレッジベースデモ](https://www.bilibili.com/video/BV1Wo4y1p7i1/)
-## 💪 関連プロジェクト
+## 💪 関連 プロジェクト
-- [Laf: サードパーティ製アプリケーションに 3 分でクイックアクセス](https://github.com/labring/laf)
-- [Sealos: クラスタアプリケーションの迅速な展開](https://github.com/labring/sealos)
-- [One API: マルチモデル管理、Azure、Wenxin Yiyuan などをサポートします。](https://github.com/songquanpeng/one-api)
-- [TuShan: 5 分でバックエンド管理システムを構築](https://github.com/msgbyte/tushan)
+- [Laf:サードパーティ 製 アプリケーションに 3 分 でクイックアクセス](https://github.com/labring/laf)
+- [Sealos:クラスタアプリケーションの 迅速 な 展開](https://github.com/labring/sealos)
+- [One API:マルチモデル 管理、Azure、Wenxin Yiyuan などをサポートします。](https://github.com/songquanpeng/one-api)
+- [TuShan:5 分 でバックエンド 管理 システムを 構築](https://github.com/msgbyte/tushan)
## 🤝 サードパーティエコシステム
-- [luolinAI: すぐに使える企業向け WeChat ボット](https://github.com/luolin-ai/FastGPT-Enterprise-WeChatbot)
+- [luolinAI:すぐに 使 える 企業向 け WeChat ボット](https://github.com/luolin-ai/FastGPT-Enterprise-WeChatbot)
## 🌟 Star History
diff --git a/docSite/.zhlintrc b/docSite/.zhlintrc
index 6a01ab669..b97a85ef4 100644
--- a/docSite/.zhlintrc
+++ b/docSite/.zhlintrc
@@ -1,6 +1,6 @@
{
- "preset": "default",
- "rules": {
- "adjustedFullWidthPunctuation": ""
- }
-}
\ No newline at end of file
+ "preset": "default",
+ "rules": {
+ "adjustedFullWidthPunctuation": ""
+ }
+ }
\ No newline at end of file
diff --git a/docSite/assets/imgs/fastgpt-api-baseurl.png b/docSite/assets/imgs/fastgpt-api-baseurl.png
new file mode 100644
index 000000000..bc2b3196f
Binary files /dev/null and b/docSite/assets/imgs/fastgpt-api-baseurl.png differ
diff --git a/docSite/assets/imgs/share-auth1.jpg b/docSite/assets/imgs/share-auth1.jpg
new file mode 100644
index 000000000..e67919bc8
Binary files /dev/null and b/docSite/assets/imgs/share-auth1.jpg differ
diff --git a/docSite/assets/imgs/share-auth2.png b/docSite/assets/imgs/share-auth2.png
new file mode 100644
index 000000000..d3958227a
Binary files /dev/null and b/docSite/assets/imgs/share-auth2.png differ
diff --git a/docSite/assets/imgs/share-setlink.jpg b/docSite/assets/imgs/share-setlink.jpg
new file mode 100644
index 000000000..94d76616c
Binary files /dev/null and b/docSite/assets/imgs/share-setlink.jpg differ
diff --git a/docSite/content/docs/development/intro.md b/docSite/content/docs/development/intro.md
index ae6fd93d2..a7465671a 100644
--- a/docSite/content/docs/development/intro.md
+++ b/docSite/content/docs/development/intro.md
@@ -54,11 +54,11 @@ git clone git@github.com:/FastGPT.git
**环境变量**
-复制.env.template 文件,在同级目录下生成一个.env.local 文件,修改.env.local 里内容才是有效的变量。变量说明见 .env.template
+复制`.env.template`文件,在同级目录下生成一个`.env.local` 文件,修改`.env.local` 里内容才是有效的变量。变量说明见 .env.template
**config 配置文件**
-复制 data/config.json 文件,生成一个 data/config.local.json 配置文件,具体配置参数说明,可参考 [config 配置说明](/docs/development/configuration)
+复制 `data/config.json` 文件,生成一个 `data/config.local.json` 配置文件,具体配置参数说明,可参考 [config 配置说明](/docs/development/configuration)
**注意:json 配置文件不能包含注释,介绍中为了方便看才加入的注释**
diff --git a/docSite/content/docs/development/openApi.md b/docSite/content/docs/development/openApi.md
deleted file mode 100644
index 8b49041f5..000000000
--- a/docSite/content/docs/development/openApi.md
+++ /dev/null
@@ -1,546 +0,0 @@
----
-title: 'OpenAPI 使用(API Key 使用)'
-description: 'FastGPT OpenAPI 文档'
-icon: 'api'
-draft: false
-toc: true
-weight: 512
----
-
-# 基本配置
-```
-baseUrl: "https://fastgpt.run/api"
-headers: {
- Authorization: "Bearer apikey"
-}
-```
-
-# 如何获取 API Key
-
-FastGPT 的 API Key 有 2 类,一类是全局通用的 key;一类是携带了 AppId 也就是有应用标记的 key。
-
-| 通用key | 应用特定 key |
-| --------------------- | --------------------- |
-|  |  |
-
-# 接口
-
-## 发起对话
-
-{{% alert icon="🤖 " context="success" %}}
-该接口 API Key 需使用应用特定的 key,否则会报错。
-
-有些包的 BaseUrl 需要添加 `v1` 路径,有些不需要,建议都试一下。
-{{% /alert %}}
-
-
-对话接口兼容`GPT`的接口!如果你的项目使用的是标准的`GPT`官方接口,可以直接通过修改 `BaseUrl` 和 `Authorization` 来访问 FastGpt 应用。
-
-请求参数说明
-- headers.Authorization: Bearer apikey
-- chatId: string | undefined 。
- - 为 undefined 时(不传入),不使用 FastGpt 提供的上下文功能,完全通过传入的 messages 构建上下文。 不会将你的记录存储到数据库中,你也无法在记录汇总中查阅到。
- - 为非空字符串时,意味着使用 chatId 进行对话,自动从 FastGpt 数据库取历史记录,并使用 messages 数组最后一个内容作为用户问题。(请自行确保 chatId 唯一,长度不限制)
-- messages: 结构与 [GPT接口](https://platform.openai.com/docs/api-reference/chat/object) 完全一致。
-- detail: 是否返回详细值(模块状态,响应的完整结果),`stream模式`下会通过event进行区分,`非stream模式`结果保存在responseData中。
-- variables: 变量内容,一个对象,会替换`{{key}}`变量。在`HTTP`模块中会发给接口,可作为身份凭证等标识。
-
-**请求示例:**
-
-```bash
-curl --location --request POST 'https://fastgpt.run/api/v1/chat/completions' \
---header 'Authorization: Bearer apikey' \
---header 'Content-Type: application/json' \
---data-raw '{
- "chatId":"111",
- "stream":false,
- "detail": false,
- "variables": {
- "cTime": "2022/2/2 22:22"
- },
- "messages": [
- {
- "content": "导演是谁",
- "role": "user"
- }
- ]
-}'
-```
-
-
-{{< tabs tabTotal="3" >}}
-{{< tab tabName="detail=false 响应" >}}
-{{< markdownify >}}
-
-```bash
-data: {"id":"","object":"","created":0,"choices":[{"delta":{"content":""},"index":0,"finish_reason":null}]}
-
-data: {"id":"","object":"","created":0,"choices":[{"delta":{"content":"电"},"index":0,"finish_reason":null}]}
-
-data: {"id":"","object":"","created":0,"choices":[{"delta":{"content":"影"},"index":0,"finish_reason":null}]}
-
-data: {"id":"","object":"","created":0,"choices":[{"delta":{"content":"《"},"index":0,"finish_reason":null}]}
-```
-
-{{< /markdownify >}}
-{{< /tab >}}
-
-{{< tab tabName="detail=true 响应" >}}
-{{< markdownify >}}
-
-```bash
-event: answer
-data: {"id":"","object":"","created":0,"choices":[{"delta":{"content":""},"index":0,"finish_reason":null}]}
-
-event: answer
-data: {"id":"","object":"","created":0,"choices":[{"delta":{"content":"电"},"index":0,"finish_reason":null}]}
-
-event: answer
-data: {"id":"","object":"","created":0,"choices":[{"delta":{"content":"影"},"index":0,"finish_reason":null}]}
-
-event: answer
-data: {"id":"","object":"","created":0,"choices":[{"delta":{"content":"《"},"index":0,"finish_reason":null}]}
-
-event: answer
-data: {"id":"","object":"","created":0,"choices":[{"delta":{"content":"铃"},"index":0,"finish_reason":null}]}
-
-event: answer
-data: {"id":"","object":"","created":0,"choices":[{"delta":{"content":"芽"},"index":0,"finish_reason":null}]}
-
-event: answer
-data: {"id":"","object":"","created":0,"choices":[{"delta":{"content":"。"},"index":0,"finish_reason":null}]}
-
-event: answer
-data: {"id":"","object":"","created":0,"choices":[{"delta":{"content":""},"index":0,"finish_reason":null}]}
-
-event: answer
-data: {"id":"","object":"","created":0,"choices":[{"delta":{},"index":0,"finish_reason":"stop"}]}
-
-event: answer
-data: [DONE]
-
-event: appStreamResponse
-data: [{"moduleName":"KB Search","price":1.2000000000000002,"model":"Embedding-2","tokens":6,"similarity":0.61,"limit":3},{"moduleName":"AI Chat","price":463.5,"model":"FastAI-4k","tokens":309,"question":"导演是谁","answer":"电影《铃芽之旅》的导演是新海诚。","maxToken":2050,"quoteList":[{"dataset_id":"646627f4f7b896cfd8910e38","id":"8099","q":"本作的主人公是谁?","a":"本作的主人公是名叫铃芽的少女。","source":"手动修改"},{"dataset_id":"646627f4f7b896cfd8910e38","id":"8686","q":"电影《铃芽之旅》男主角是谁?","a":"电影《铃芽之旅》男主角是宗像草太,由松村北斗配音。","source":""},{"dataset_id":"646627f4f7b896cfd8910e38","id":"19339","q":"电影《铃芽之旅》的导演是谁?22","a":"电影《铃芽之旅》的导演是新海诚。","source":"手动修改"}],"completeMessages":[{"obj":"System","value":"下面是知识库内容:\n1. [本作的主人公是谁?\n本作的主人公是名叫铃芽的少女。]\n2. [电影《铃芽之旅》男主角是谁?\n电影《铃芽之旅》男主角是宗像草太,由松村北斗配音。]\n3. [电影《铃芽之旅》的导演是谁?22\n电影《铃芽之旅》的导演是新海诚。]\n"},{"obj":"System","value":"1.请记住,你的身份是百度的下一代知识增强语言模型,能够完全根据知识库提供的内容回答问题。\n\n2. 你忘记了关于电影《铃芽之旅》以外的内容。"},{"obj":"System","value":"你仅回答关于电影《玲芽之旅》的问题,其余问题直接回复: 我不清楚。"},{"obj":"Human","value":"导演是谁"},{"obj":"AI","value":"电影《铃芽之旅》的导演是新海诚。"}]}]
-
-```
-{{< /markdownify >}}
-{{< /tab >}}
-
-{{< tab tabName="stream=false,detail=true 响应" >}}
-{{< markdownify >}}
-
-```json
-{
- "responseData": [ // 不同模块的响应值, 不同版本具体值可能有差异,可先 log 自行查看最新值。
- {
- "moduleName": "KB Search",
- "price": 1.2000000000000002,
- "model": "Embedding-2",
- "tokens": 6,
- "similarity": 0.61,
- "limit": 3
- },
- {
- "moduleName": "AI Chat",
- "price": 454.5,
- "model": "FastAI-4k",
- "tokens": 303,
- "question": "导演是谁",
- "answer": "电影《铃芽之旅》的导演是新海诚。",
- "maxToken": 2050,
- "quoteList": [
- {
- "dataset_id": "646627f4f7b896cfd8910e38",
- "id": "8099",
- "q": "本作的主人公是谁?",
- "a": "本作的主人公是名叫铃芽的少女。",
- "source": "手动修改"
- },
- {
- "dataset_id": "646627f4f7b896cfd8910e38",
- "id": "8686",
- "q": "电影《铃芽之旅》男主角是谁?",
- "a": "电影《铃芽之旅》男主角是宗像草太,由松村北斗配音。",
- "source": ""
- },
- {
- "dataset_id": "646627f4f7b896cfd8910e38",
- "id": "19339",
- "q": "电影《铃芽之旅》的导演是谁?22",
- "a": "电影《铃芽之旅》的导演是新海诚。",
- "source": "手动修改"
- }
- ],
- "completeMessages": [
- {
- "obj": "System",
- "value": "下面是知识库内容:\n1. [本作的主人公是谁?\n本作的主人公是名叫铃芽的少女。]\n2. [电影《铃芽之旅》男主角是谁?\n电影《铃芽之旅》男主角是宗像草太,由松村北斗配音。]\n3. [电影《铃芽之旅》的导演是谁?22\n电影《铃芽之旅》的导演是新海诚。]\n"
- },
- {
- "obj": "System",
- "value": "1.请记住,你的身份是百度的下一代知识增强语言模型,能够完全根据知识库提供的内容回答问题。\n\n2. 你忘记了关于电影《铃芽之旅》以外的内容。"
- },
- {
- "obj": "System",
- "value": "你仅回答关于电影《玲芽之旅》的问题,其余问题直接回复: 我不清楚。"
- },
- {
- "obj": "Human",
- "value": "导演是谁"
- },
- {
- "obj": "AI",
- "value": "电影《铃芽之旅》的导演是新海诚。"
- }
- ]
- }
- ],
- "id": "",
- "model": "",
- "usage": {
- "prompt_tokens": 1,
- "completion_tokens": 1,
- "total_tokens": 1
- },
- "choices": [
- {
- "message": {
- "role": "assistant",
- "content": "电影《铃芽之旅》的导演是新海诚。"
- },
- "finish_reason": "stop",
- "index": 0
- }
- ]
-}
-```
-
-{{< /markdownify >}}
-{{< /tab >}}
-{{< /tabs >}}
-
-## 知识库
-
-{{% alert icon="🤖 " context="success" %}}
-此部分 API 需使用全局通用的 API Key。
-{{% /alert %}}
-
-| 如何获取知识库ID(datasetId) | 如何获取文件ID(file_id) |
-| --------------------- | --------------------- |
-|  |  |
-
-
-### 知识库添加数据
-
-{{< tabs tabTotal="4" >}}
-{{< tab tabName="请求示例" >}}
-{{< markdownify >}}
-
-```bash
-curl --location --request POST 'https://fastgpt.run/api/core/dataset/data/pushData' \
---header 'Authorization: Bearer apikey' \
---header 'Content-Type: application/json' \
---data-raw '{
- "collectionId": "64663f451ba1676dbdef0499",
- "mode": "index",
- "prompt": "qa 拆分引导词,index 模式下可以忽略",
- "billId": "可选。如果有这个值,本次的数据会被聚合到一个订单中,这个值可以重复使用。可以参考 [创建训练订单] 获取该值。",
- "data": [
- {
- "a": "test",
- "q": "1111",
- "file_id": "关联的文件ID/URL/manual/mark",
- "source": "来源名称",
- },
- {
- "a": "test2",
- "q": "22222"
- }
- ]
-}'
-```
-
-{{< /markdownify >}}
-{{< /tab >}}
-
-{{< tab tabName="参数说明" >}}
-{{< markdownify >}}
-
-```json
-{
- "collectionId": "文件的ID,参考上面的第二张图",
- "mode": "index | qa ", // index 模式: 直接将 q 转成向量存起来,a 直接入库。qa 模式: 只关注 data 里的 q,将 q 丢给大模型,让其根据 prompt 拆分成 qa 问答对。
- "prompt": "拆分提示词,需严格按照模板,建议不要传入。",
- "data": [
- {
- "q": "生成索引的内容,index 模式下最大 tokens 为3000,建议不超过 1000",
- "a": "预期回答/补充",
- "file_id": "如果推送数据到手动录入,这里可以留空; 如果希望关联到某个文件中,需要填写对应文件的ID; 如果希望加入到手动标注中,可设置为: mark",
- },
- {
- "q": "生成索引的内容,qa 模式下最大 tokens 为10000,建议 8000 左右",
- "a": "预期回答/补充"
- }
- ]
-}
-```
-
-{{< /markdownify >}}
-{{< /tab >}}
-
-{{< tab tabName="响应例子" >}}
-{{< markdownify >}}
-
-```json
-{
- "code": 200,
- "statusText": "",
- "data": {
- "insertLen": 1, // 最终插入成功的数量
- "overToken": [], // 超出 token 的
- "fileIdInvalid": [ // file_id 无效的
- {
- "a": "飞飞dsaf飞",
- "q": "测试是32否收到",
- "file_id": "32dwe"
- }
- ],
- "error": [] // 其他错误
- }
-}
-```
-
-{{< /markdownify >}}
-{{< /tab >}}
-
-{{< tab tabName="QA Prompt 模板" >}}
-{{< markdownify >}}
-
-{{theme}} 里的内容可以换成数据的主题。默认为:它们可能包含多个主题内容
-
-```
-我会给你一段文本,{{theme}},学习它们,并整理学习成果,要求为:
-1. 提出最多 25 个问题。
-2. 给出每个问题的答案。
-3. 答案要详细完整,答案可以包含普通文字、链接、代码、表格、公示、媒体链接等 markdown 元素。
-4. 按格式返回多个问题和答案:
-
-Q1: 问题。
-A1: 答案。
-Q2:
-A2:
-……
-
-我的文本:"""{{text}}"""
-```
-
-{{< /markdownify >}}
-{{< /tab >}}
-
-{{< /tabs >}}
-
-
-### 搜索测试
-
-{{< tabs tabTotal="2" >}}
-{{< tab tabName="请求示例" >}}
-{{< markdownify >}}
-
-```bash
-curl --location --request POST 'https://fastgpt.run/api/core/dataset/searchTest' \
---header 'Authorization: Bearer apiKey' \
---header 'Content-Type: application/json' \
---data-raw '{
- "datasetId": "知识库的ID",
- "text": "导演是谁"
-}'
-```
-
-{{< /markdownify >}}
-{{< /tab >}}
-
-{{< tab tabName="响应示例" >}}
-{{< markdownify >}}
-
-返回 top12 结果
-
-```bash
-{
- "code": 200,
- "statusText": "",
- "data": [
- {
- "id": "5613327",
- "q": "该人有获奖情况吗?",
- "a": "该人获得过2020/07全国大学生服务外包大赛国家一等奖和2021/05国家创新创业计划立项的获奖情况。",
- "source": "余金隆简历.pdf",
- "score": 0.41556452839298963
- },
- ......
- ]
-}
-```
-
-{{< /markdownify >}}
-{{< /tab >}}
-
-{{< /tabs >}}
-
-## 订单
-
-### 创建训练订单
-
-**请求示例**
-
-```bash
-curl --location --request POST 'https://fastgpt.run/api/support/wallet/bill/createTrainingBill' \
---header 'Authorization: Bearer {{apikey}}' \
---header 'Content-Type: application/json' \
---data-raw ''
-```
-
-**响应结果**
-
-data 为 billId,可用于 api 添加数据时进行账单聚合。
-
-```json
-{
- "code": 200,
- "statusText": "",
- "message": "",
- "data": "65112ab717c32018f4156361"
-}
-```
-
-## 免登录分享链接校验(内测中)
-
-免登录链接配置中,增加了`凭证校验服务器`后,使用分享链接时会向服务器发起请求,校验链接是否可用,并在每次对话结束后,向服务器发送对话结果。下面以`host`来表示`凭证校验服务器`。服务器接口仅需返回是否校验成功即可,不需要返回其他数据,格式如下:
-
-```json
-{
- "success": true,
- "message": "错误提示"
-}
-```
-
-
-
-### 分享链接中增加额外 query
-
-增加一个 query: authToken。例如:
-
-原始的链接:https://fastgpt.run/chat/share?shareId=648aaf5ae121349a16d62192
-完整链接: https://fastgpt.run/chat/share?shareId=648aaf5ae121349a16d62192&authToken=userid12345
-
-发出校验请求时候,会在`body`中携带 token={{authToken}} 的参数。
-
-### 初始化校验
-
-**FastGPT 发出的请求**
-
-```bash
-curl --location --request POST '{{host}}/shareAuth/init' \
---header 'Content-Type: application/json' \
---data-raw '{
- "token": "sintdolore"
-}'
-```
-
-### 对话前校验
-
-**FastGPT 发出的请求**
-
-```bash
-curl --location --request POST '{{host}}/shareAuth/start' \
---header 'Content-Type: application/json' \
---data-raw '{
- "token": "sintdolore",
- "question": "用户问题",
-}'
-```
-
-### 对话结果上报
-
-**FastGPT 发出的请求**
-
-```bash
-curl --location --request POST '{{host}}/shareAuth/finish' \
---header 'Content-Type: application/json' \
---data-raw '{
- "token": "sint dolore",
- "responseData": [
- {
- "moduleName": "KB Search",
- "price": 1.2000000000000002,
- "model": "Embedding-2",
- "tokens": 6,
- "similarity": 0.61,
- "limit": 3
- },
- {
- "moduleName": "AI Chat",
- "price": 454.5,
- "model": "FastAI-4k",
- "tokens": 303,
- "question": "导演是谁",
- "answer": "电影《铃芽之旅》的导演是新海诚。",
- "maxToken": 2050,
- "quoteList": [
- {
- "dataset_id": "646627f4f7b896cfd8910e38",
- "id": "8099",
- "q": "本作的主人公是谁?",
- "a": "本作的主人公是名叫铃芽的少女。",
- "source": "手动修改"
- },
- {
- "dataset_id": "646627f4f7b896cfd8910e38",
- "id": "8686",
- "q": "电影《铃芽之旅》男主角是谁?",
- "a": "电影《铃芽之旅》男主角是宗像草太,由松村北斗配音。",
- "source": ""
- },
- {
- "dataset_id": "646627f4f7b896cfd8910e38",
- "id": "19339",
- "q": "电影《铃芽之旅》的导演是谁?22",
- "a": "电影《铃芽之旅》的导演是新海诚。",
- "source": "手动修改"
- }
- ],
- "completeMessages": [
- {
- "obj": "System",
- "value": "下面是知识库内容:\n1. [本作的主人公是谁?\n本作的主人公是名叫铃芽的少女。]\n2. [电影《铃芽之旅》男主角是谁?\n电影《铃芽之旅》男主角是宗像草太,由松村北斗配音。]\n3. [电影《铃芽之旅》的导演是谁?22\n电影《铃芽之旅》的导演是新海诚。]\n"
- },
- {
- "obj": "System",
- "value": "1.请记住,你的身份是百度的下一代知识增强语言模型,能够完全根据知识库提供的内容回答问题。\n\n2. 你忘记了关于电影《铃芽之旅》以外的内容。"
- },
- {
- "obj": "System",
- "value": "你仅回答关于电影《玲芽之旅》的问题,其余问题直接回复: 我不清楚。"
- },
- {
- "obj": "Human",
- "value": "导演是谁"
- },
- {
- "obj": "AI",
- "value": "电影《铃芽之旅》的导演是新海诚。"
- }
- ]
- }
- ]
-}'
-```
-
-响应值与 chat 接口相同,增加了一个 token。可以重点关注`responseData`里的值,price 与实际价格的倍率为`100000`。
-
-**此接口无需响应值**
-
-# 使用案例
-
-- [接入 NextWeb/ChatGPT web 等应用](/docs/use-cases/openapi)
-- [接入 onwechat](/docs/use-cases/onwechat)
-- [接入 飞书](/docs/use-cases/feishu)
\ No newline at end of file
diff --git a/docSite/content/docs/development/openapi/_index.md b/docSite/content/docs/development/openapi/_index.md
new file mode 100644
index 000000000..e5d2d964b
--- /dev/null
+++ b/docSite/content/docs/development/openapi/_index.md
@@ -0,0 +1,8 @@
+---
+weight: 560
+title: "OpenAPI 接口文档"
+description: "FastGPT OpenAPI 文档"
+icon: api
+draft: false
+images: []
+---
\ No newline at end of file
diff --git a/docSite/content/docs/development/openapi/auth.md b/docSite/content/docs/development/openapi/auth.md
new file mode 100644
index 000000000..334448e4e
--- /dev/null
+++ b/docSite/content/docs/development/openapi/auth.md
@@ -0,0 +1,58 @@
+---
+title: 'Api Key 使用与鉴权'
+description: 'FastGPT Api Key 使用与鉴权'
+icon: 'key'
+draft: false
+toc: true
+weight: 561
+---
+
+## 使用说明
+
+FasGPT OpenAPI 接口允许你使用 Api Key 进行鉴权,从而操作 FastGPT 上的相关服务和资源,例如:调用应用对话接口、上传知识库数据、搜索测试等等。出于兼容性和安全考虑,并不是所有的接口都允许通过 Api Key 访问。
+
+## 如何查看 BaseURL
+
+**注意:BaseURL 不是接口地址,而是所有接口的根地址,直接请求 BaseURL 是没有用的。**
+
+
+
+## 如何获取 Api Key
+
+FastGPT 的 API Key **有 2 类**,一类是全局通用的 key (无法直接调用应用对话);一类是携带了 AppId 也就是有应用标记的 key (可直接调用应用对话)。
+
+我们建议,仅操作应用或者对话的相关接口使用 `应用特定key`,其他接口使用 `通用key`。
+
+| 通用key | 应用特定 key |
+| --------------------- | --------------------- |
+|  |  |
+
+## 基本配置
+
+OpenAPI 中,所有的接口都通过 Header.Authorization 进行鉴权。
+
+```
+baseUrl: "https://fastgpt.run/api"
+headers: {
+ Authorization: "Bearer {{apikey}}"
+}
+```
+
+**发起应用对话示例**
+
+```sh
+curl --location --request POST 'https://fastgpt.run/api/v1/chat/completions' \
+--header 'Authorization: Bearer fastgpt-xxxxxx' \
+--header 'Content-Type: application/json' \
+--data-raw '{
+ "chatId": "111",
+ "stream": false,
+ "detail": false,
+ "messages": [
+ {
+ "content": "导演是谁",
+ "role": "user"
+ }
+ ]
+}'
+```
\ No newline at end of file
diff --git a/docSite/content/docs/development/openapi/chat.md b/docSite/content/docs/development/openapi/chat.md
new file mode 100644
index 000000000..440d5f73f
--- /dev/null
+++ b/docSite/content/docs/development/openapi/chat.md
@@ -0,0 +1,254 @@
+---
+title: '对话接口'
+description: 'FastGPT OpenAPI 对话接口'
+icon: 'chat'
+draft: false
+toc: true
+weight: 562
+---
+
+## 发起对话
+
+{{% alert icon="🤖 " context="success" %}}
+该接口的 API Key 需使用`应用特定的 key`,否则会报错。
+
+有些包调用时,`BaseUrl`需要添加`v1`路径,有些不需要,如果出现404情况,可补充`v1`重试。
+{{% /alert %}}
+
+
+**对话接口兼容`GPT`的接口!如果你的项目使用的是标准的`GPT`官方接口,可以直接通过修改`BaseUrl`和 `Authorization`来访问 FastGpt 应用。**
+
+## 请求
+
+{{< tabs tabTotal="2" >}}
+{{< tab tabName="请求示例" >}}
+{{< markdownify >}}
+
+```bash
+curl --location --request POST 'https://fastgpt.run/api/v1/chat/completions' \
+--header 'Authorization: Bearer fastgpt-xxxxxx' \
+--header 'Content-Type: application/json' \
+--data-raw '{
+ "chatId": "abcd",
+ "stream": false,
+ "detail": false,
+ "variables": {
+ "uid": "asdfadsfasfd2323",
+ "name": "张三"
+ },
+ "messages": [
+ {
+ "content": "导演是谁",
+ "role": "user"
+ }
+ ]
+}'
+```
+
+{{< /markdownify >}}
+{{< /tab >}}
+
+{{< tab tabName="detail=true 响应" >}}
+{{< markdownify >}}
+
+{{% alert context="info" %}}
+- headers.Authorization: Bearer {{apikey}}
+- chatId: string | undefined 。
+ - 为 `undefined` 时(不传入),不使用 FastGpt 提供的上下文功能,完全通过传入的 messages 构建上下文。 不会将你的记录存储到数据库中,你也无法在记录汇总中查阅到。
+ - 为`非空字符串`时,意味着使用 chatId 进行对话,自动从 FastGpt 数据库取历史记录,并使用 messages 数组最后一个内容作为用户问题。请自行确保 chatId 唯一,长度小于250,通常可以是自己系统的对话框ID。
+- messages: 结构与 [GPT接口](https://platform.openai.com/docs/api-reference/chat/object) 完全一致。
+- detail: 是否返回中间值(模块状态,响应的完整结果等),`stream模式`下会通过`event`进行区分,`非stream模式`结果保存在`responseData`中。
+- variables: 模块变量,一个对象,会替换模块中,输入框内容里的`{{key}}`
+{{% /alert %}}
+
+
+
+{{< /markdownify >}}
+{{< /tab >}}
+{{< /tabs >}}
+
+## 响应
+
+{{< tabs tabTotal="4" >}}
+{{< tab tabName="detail=false,stream=false 响应" >}}
+{{< markdownify >}}
+
+```json
+{
+ "id": "adsfasf",
+ "model": "",
+ "usage": {
+ "prompt_tokens": 1,
+ "completion_tokens": 1,
+ "total_tokens": 1
+ },
+ "choices": [
+ {
+ "message": {
+ "role": "assistant",
+ "content": "电影《铃芽之旅》的导演是新海诚。"
+ },
+ "finish_reason": "stop",
+ "index": 0
+ }
+ ]
+}
+```
+
+{{< /markdownify >}}
+{{< /tab >}}
+
+{{< tab tabName="detail=false,stream=true 响应" >}}
+{{< markdownify >}}
+
+
+```bash
+data: {"id":"","object":"","created":0,"choices":[{"delta":{"content":""},"index":0,"finish_reason":null}]}
+
+data: {"id":"","object":"","created":0,"choices":[{"delta":{"content":"电"},"index":0,"finish_reason":null}]}
+
+data: {"id":"","object":"","created":0,"choices":[{"delta":{"content":"影"},"index":0,"finish_reason":null}]}
+
+data: {"id":"","object":"","created":0,"choices":[{"delta":{"content":"《"},"index":0,"finish_reason":null}]}
+```
+{{< /markdownify >}}
+{{< /tab >}}
+
+{{< tab tabName="detail=true,stream=false 响应" >}}
+{{< markdownify >}}
+
+```json
+{
+ "responseData": [ // 不同模块的响应值, 不同版本具体值可能有差异,可先 log 自行查看最新值。
+ {
+ "moduleName": "Dataset Search",
+ "price": 1.2000000000000002,
+ "model": "Embedding-2",
+ "tokens": 6,
+ "similarity": 0.61,
+ "limit": 3
+ },
+ {
+ "moduleName": "AI Chat",
+ "price": 454.5,
+ "model": "FastAI-4k",
+ "tokens": 303,
+ "question": "导演是谁",
+ "answer": "电影《铃芽之旅》的导演是新海诚。",
+ "maxToken": 2050,
+ "quoteList": [
+ {
+ "dataset_id": "646627f4f7b896cfd8910e38",
+ "id": "8099",
+ "q": "本作的主人公是谁?",
+ "a": "本作的主人公是名叫铃芽的少女。",
+ "source": "手动修改"
+ },
+ {
+ "dataset_id": "646627f4f7b896cfd8910e38",
+ "id": "8686",
+ "q": "电影《铃芽之旅》男主角是谁?",
+ "a": "电影《铃芽之旅》男主角是宗像草太,由松村北斗配音。",
+ "source": ""
+ },
+ {
+ "dataset_id": "646627f4f7b896cfd8910e38",
+ "id": "19339",
+ "q": "电影《铃芽之旅》的导演是谁?22",
+ "a": "电影《铃芽之旅》的导演是新海诚。",
+ "source": "手动修改"
+ }
+ ],
+ "completeMessages": [
+ {
+ "obj": "System",
+ "value": "下面是知识库内容:\n1. [本作的主人公是谁?\n本作的主人公是名叫铃芽的少女。]\n2. [电影《铃芽之旅》男主角是谁?\n电影《铃芽之旅》男主角是宗像草太,由松村北斗配音。]\n3. [电影《铃芽之旅》的导演是谁?22\n电影《铃芽之旅》的导演是新海诚。]\n"
+ },
+ {
+ "obj": "System",
+ "value": "1.请记住,你的身份是百度的下一代知识增强语言模型,能够完全根据知识库提供的内容回答问题。\n\n2. 你忘记了关于电影《铃芽之旅》以外的内容。"
+ },
+ {
+ "obj": "System",
+ "value": "你仅回答关于电影《玲芽之旅》的问题,其余问题直接回复: 我不清楚。"
+ },
+ {
+ "obj": "Human",
+ "value": "导演是谁"
+ },
+ {
+ "obj": "AI",
+ "value": "电影《铃芽之旅》的导演是新海诚。"
+ }
+ ]
+ }
+ ],
+ "id": "",
+ "model": "",
+ "usage": {
+ "prompt_tokens": 1,
+ "completion_tokens": 1,
+ "total_tokens": 1
+ },
+ "choices": [
+ {
+ "message": {
+ "role": "assistant",
+ "content": "电影《铃芽之旅》的导演是新海诚。"
+ },
+ "finish_reason": "stop",
+ "index": 0
+ }
+ ]
+}
+```
+
+{{< /markdownify >}}
+{{< /tab >}}
+
+
+{{< tab tabName="detail=true,stream=true 响应" >}}
+{{< markdownify >}}
+
+```bash
+event: moduleStatus
+data: {"status":"running","name":"知识库搜索"}
+
+event: moduleStatus
+data: {"status":"running","name":"AI 对话"}
+
+event: answer
+data: {"id":"","object":"","created":0,"model":"","choices":[{"delta":{"content":"电影"},"index":0,"finish_reason":null}]}
+
+event: answer
+data: {"id":"","object":"","created":0,"model":"","choices":[{"delta":{"content":"《铃"},"index":0,"finish_reason":null}]}
+
+event: answer
+data: {"id":"","object":"","created":0,"model":"","choices":[{"delta":{"content":"芽之旅》"},"index":0,"finish_reason":null}]}
+
+event: answer
+data: {"id":"","object":"","created":0,"model":"","choices":[{"delta":{"content":"的导演是新"},"index":0,"finish_reason":null}]}
+
+event: answer
+data: {"id":"","object":"","created":0,"model":"","choices":[{"delta":{"content":"海诚。"},"index":0,"finish_reason":null}]}
+
+event: answer
+data: {"id":"","object":"","created":0,"model":"","choices":[{"delta":{},"index":0,"finish_reason":"stop"}]}
+
+event: answer
+data: [DONE]
+
+event: appStreamResponse
+data: [{"moduleName":"知识库搜索","moduleType":"datasetSearchNode","runningTime":1.78},{"question":"导演是谁","quoteList":[{"id":"654f2e49b64caef1d9431e8b","q":"电影《铃芽之旅》的导演是谁?","a":"电影《铃芽之旅》的导演是新海诚!","indexes":[{"type":"qa","dataId":"3515487","text":"电影《铃芽之旅》的导演是谁?","_id":"654f2e49b64caef1d9431e8c","defaultIndex":true}],"datasetId":"646627f4f7b896cfd8910e38","collectionId":"653279b16cd42ab509e766e8","sourceName":"data (81).csv","sourceId":"64fd3b6423aa1307b65896f6","score":0.8935586214065552},{"id":"6552e14c50f4a2a8e632af11","q":"导演是谁?","a":"电影《铃芽之旅》的导演是新海诚。","indexes":[{"defaultIndex":true,"type":"qa","dataId":"3644565","text":"导演是谁?\n电影《铃芽之旅》的导演是新海诚。","_id":"6552e14dde5cc7ba3954e417"}],"datasetId":"646627f4f7b896cfd8910e38","collectionId":"653279b16cd42ab509e766e8","sourceName":"data (81).csv","sourceId":"64fd3b6423aa1307b65896f6","score":0.8890955448150635},{"id":"654f34a0b64caef1d946337e","q":"本作的主人公是谁?","a":"本作的主人公是名叫铃芽的少女。","indexes":[{"type":"qa","dataId":"3515541","text":"本作的主人公是谁?","_id":"654f34a0b64caef1d946337f","defaultIndex":true}],"datasetId":"646627f4f7b896cfd8910e38","collectionId":"653279b16cd42ab509e766e8","sourceName":"data (81).csv","sourceId":"64fd3b6423aa1307b65896f6","score":0.8738770484924316},{"id":"654f3002b64caef1d944207a","q":"电影《铃芽之旅》男主角是谁?","a":"电影《铃芽之旅》男主角是宗像草太,由松村北斗配音。","indexes":[{"type":"qa","dataId":"3515538","text":"电影《铃芽之旅》男主角是谁?","_id":"654f3002b64caef1d944207b","defaultIndex":true}],"datasetId":"646627f4f7b896cfd8910e38","collectionId":"653279b16cd42ab509e766e8","sourceName":"data (81).csv","sourceId":"64fd3b6423aa1307b65896f6","score":0.8607980012893677},{"id":"654f2fc8b64caef1d943fd46","q":"电影《铃芽之旅》的编剧是谁?","a":"新海诚是本片的编剧。","indexes":[{"defaultIndex":true,"type":"qa","dataId":"3515550","text":"电影《铃芽之旅》的编剧是谁?22","_id":"654f2fc8b64caef1d943fd47"}],"datasetId":"646627f4f7b896cfd8910e38","collectionId":"653279b16cd42ab509e766e8","sourceName":"data (81).csv","sourceId":"64fd3b6423aa1307b65896f6","score":0.8468944430351257}],"moduleName":"AI 对话","moduleType":"chatNode","runningTime":1.86}]
+```
+
+{{< /markdownify >}}
+{{< /tab >}}
+{{< /tabs >}}
+
+
+## 使用案例
+
+- [接入 NextWeb/ChatGPT web 等应用](/docs/use-cases/openapi)
+- [接入 onwechat](/docs/use-cases/onwechat)
+- [接入 飞书](/docs/use-cases/feishu)
\ No newline at end of file
diff --git a/docSite/content/docs/development/openapi/dataset.md b/docSite/content/docs/development/openapi/dataset.md
new file mode 100644
index 000000000..66a12f106
--- /dev/null
+++ b/docSite/content/docs/development/openapi/dataset.md
@@ -0,0 +1,214 @@
+---
+title: '知识库接口'
+description: 'FastGPT OpenAPI 知识库接口'
+icon: 'dataset'
+draft: false
+toc: true
+weight: 563
+---
+
+| 如何获取知识库ID(datasetId) | 如何获取文件集合ID(collection_id) |
+| --------------------- | --------------------- |
+|  |  |
+
+
+
+## 创建训练订单
+
+**请求示例**
+
+```bash
+curl --location --request POST 'https://fastgpt.run/api/support/wallet/bill/createTrainingBill' \
+--header 'Authorization: Bearer {{apikey}}' \
+--header 'Content-Type: application/json' \
+--data-raw ''
+```
+
+**响应结果**
+
+data 为 billId,可用于添加知识库数据时进行账单聚合。
+
+```json
+{
+ "code": 200,
+ "statusText": "",
+ "message": "",
+ "data": "65112ab717c32018f4156361"
+}
+```
+
+## 知识库添加数据
+
+{{< tabs tabTotal="4" >}}
+{{< tab tabName="请求示例" >}}
+{{< markdownify >}}
+
+```bash
+curl --location --request POST 'https://fastgpt.run/api/core/dataset/data/pushData' \
+--header 'Authorization: Bearer apikey' \
+--header 'Content-Type: application/json' \
+--data-raw '{
+ "collectionId": "64663f451ba1676dbdef0499",
+ "mode": "chunk",
+ "prompt": "可选。qa 拆分引导词,chunk 模式下忽略",
+ "billId": "可选。如果有这个值,本次的数据会被聚合到一个订单中,这个值可以重复使用。可以参考 [创建训练订单] 获取该值。",
+ "data": [
+ {
+ "q": "你是谁?",
+ "a": "我是FastGPT助手"
+ },
+ {
+ "q": "你会什么?",
+ "a": "我什么都会",
+ "indexes": [{
+ "type":"custom",
+ "text":"你好"
+ }]
+ }
+ ]
+}'
+```
+
+{{< /markdownify >}}
+{{< /tab >}}
+
+{{< tab tabName="参数说明" >}}
+{{< markdownify >}}
+
+需要先了解 FastGPT 的多路索引概念:
+
+在 FastGPT 中,你可以为一组数据创建多个索引,如果不指定索引,则系统会自动取对应的 chunk 作为索引。例如前面的请求示例中:
+
+`q:你是谁?a:我是FastGPT助手` 它的`indexes`属性为空,意味着不自定义索引,而是使用默认的索引(你是谁?\n我是FastGPT助手)。
+
+在第二组数据中`q:你会什么?a:我什么都会`指定了一个`你好`的索引,因此这组数据的索引为`你好`。
+
+```json
+{
+ "collectionId": "文件集合的ID,参考上面的第二张图",
+ "mode": "chunk | qa ", // chunk 模式: 可自定义索引。qa 模型:无法自定义索引,会自动取 data 中的 q 作为数据,让模型自动生成问答对和索引。
+ "prompt": "QA 拆分提示词,需严格按照模板,建议不要传入。",
+ "data": [
+ {
+ "q": "生成索引的内容,index 模式下最大 tokens 为3000,建议不超过 1000",
+ "a": "预期回答/补充",
+ "indexes": "自定义索引",
+ },
+ {
+ "q": "xxx",
+ "a": "xxxx"
+ }
+ ],
+
+}
+```
+
+{{< /markdownify >}}
+{{< /tab >}}
+
+{{< tab tabName="响应例子" >}}
+{{< markdownify >}}
+
+```json
+{
+ "code": 200,
+ "statusText": "",
+ "data": {
+ "insertLen": 1, // 最终插入成功的数量
+ "overToken": [], // 超出 token 的
+
+ "repeat": [], // 重复的数量
+ "error": [] // 其他错误
+ }
+}
+```
+
+{{< /markdownify >}}
+{{< /tab >}}
+
+{{< tab tabName="QA Prompt 模板" >}}
+{{< markdownify >}}
+
+{{theme}} 里的内容可以换成数据的主题。默认为:它们可能包含多个主题内容
+
+```
+我会给你一段文本,{{theme}},学习它们,并整理学习成果,要求为:
+1. 提出最多 25 个问题。
+2. 给出每个问题的答案。
+3. 答案要详细完整,答案可以包含普通文字、链接、代码、表格、公示、媒体链接等 markdown 元素。
+4. 按格式返回多个问题和答案:
+
+Q1: 问题。
+A1: 答案。
+Q2:
+A2:
+……
+
+我的文本:"""{{text}}"""
+```
+
+{{< /markdownify >}}
+{{< /tab >}}
+
+{{< /tabs >}}
+
+
+## 搜索测试
+
+{{< tabs tabTotal="2" >}}
+{{< tab tabName="请求示例" >}}
+{{< markdownify >}}
+
+```bash
+curl --location --request POST 'https://fastgpt.run/api/core/dataset/searchTest' \
+--header 'Authorization: Bearer fastgpt-xxxxx' \
+--header 'Content-Type: application/json' \
+--data-raw '{
+ "datasetId": "知识库的ID",
+ "text": "导演是谁",
+ "rarank": true,
+ "limit": 20
+}'
+```
+
+{{< /markdownify >}}
+{{< /tab >}}
+
+{{< tab tabName="响应示例" >}}
+{{< markdownify >}}
+
+返回 top limit 结果
+
+```bash
+{
+ "code": 200,
+ "statusText": "",
+ "data": [
+ {
+ "id": "65599c54a5c814fb803363cb",
+ "q": "你是谁",
+ "a": "我是FastGPT助手",
+ "indexes": [
+ {
+ "defaultIndex": true,
+ "type": "qa",
+ "dataId": "3645952",
+ "text": "你是谁\n我是FastGPT助手",
+ "_id": "65599c5588271af95b019862"
+ }
+ ],
+ "datasetId": "6554684f7f9ed18a39a4d15c",
+ "collectionId": "6556cd795e4b663e770bb66d",
+ "sourceName": "GBT 15104-2021 装饰单板贴面人造板.pdf",
+ "sourceId": "6556cd775e4b663e770bb65c",
+ "score": 0.8050316572189331
+ },
+ ......
+ ]
+}
+```
+
+{{< /markdownify >}}
+{{< /tab >}}
+
+{{< /tabs >}}
diff --git a/docSite/content/docs/development/openapi/share.md b/docSite/content/docs/development/openapi/share.md
new file mode 100644
index 000000000..56e085b90
--- /dev/null
+++ b/docSite/content/docs/development/openapi/share.md
@@ -0,0 +1,257 @@
+---
+title: '分享链接鉴权'
+description: 'FastGPT 分享链接鉴权'
+icon: 'share'
+draft: false
+toc: true
+weight: 564
+---
+
+## 使用说明
+
+分享链接鉴权设计的目的在于,将 FastGPT 的对话框安全的接入你现有的系统中。
+
+免登录链接配置中,增加了`凭证校验服务器`后,使用分享链接时会向服务器发起请求,校验链接是否可用,并在每次对话结束后,向服务器发送对话结果。下面以`host`来表示`凭证校验服务器`。服务器接口仅需返回是否校验成功即可,不需要返回其他数据,格式如下:
+
+```json
+{
+ "success": true,
+ "message": "错误提示",
+ "msg": "同message, 错误提示"
+}
+```
+
+
+
+## 配置校验地址和校验token
+
+### 1. 配置校验地址的`BaseURL`、
+
+
+
+配置校验地址后,在每次分享链接使用时,都会向对应的地址发起校验和上报请求。
+
+### 2. 分享链接中增加额外 query
+
+在分享链接的地址中,增加一个额外的参数: authToken。例如:
+
+原始的链接:https://fastgpt.run/chat/share?shareId=648aaf5ae121349a16d62192
+完整链接: https://fastgpt.run/chat/share?shareId=648aaf5ae121349a16d62192&authToken=userid12345
+
+这个`token`通常是你系统生成的,在发出校验请求时,FastGPT 会在`body`中携带 token={{authToken}} 的参数。
+
+## 聊天初始化校验
+
+**FastGPT 发出的请求**
+
+```bash
+curl --location --request POST '{{host}}/shareAuth/init' \
+--header 'Content-Type: application/json' \
+--data-raw '{
+ "token": "sintdolore"
+}'
+```
+
+**响应示例**
+
+```json
+{
+ "success": false,
+ "message": "分享链接无效",
+}
+```
+
+## 对话前校验
+
+**FastGPT 发出的请求**
+
+```bash
+curl --location --request POST '{{host}}/shareAuth/start' \
+--header 'Content-Type: application/json' \
+--data-raw '{
+ "token": "sintdolore",
+ "question": "用户问题",
+}'
+```
+
+**响应示例**
+
+```json
+{
+ "success": true
+}
+```
+
+## 对话结果上报
+
+```bash
+curl --location --request POST '{{host}}/shareAuth/finish' \
+--header 'Content-Type: application/json' \
+--data-raw '{
+ "token": "sint dolore",
+ "responseData": [
+ {
+ "moduleName": "KB Search",
+ "price": 1.2000000000000002,
+ "model": "Embedding-2",
+ "tokens": 6,
+ "similarity": 0.61,
+ "limit": 3
+ },
+ {
+ "moduleName": "AI Chat",
+ "price": 454.5,
+ "model": "FastAI-4k",
+ "tokens": 303,
+ "question": "导演是谁",
+ "answer": "电影《铃芽之旅》的导演是新海诚。",
+ "maxToken": 2050,
+ "quoteList": [
+ {
+ "dataset_id": "646627f4f7b896cfd8910e38",
+ "id": "8099",
+ "q": "本作的主人公是谁?",
+ "a": "本作的主人公是名叫铃芽的少女。",
+ "source": "手动修改"
+ },
+ {
+ "dataset_id": "646627f4f7b896cfd8910e38",
+ "id": "8686",
+ "q": "电影《铃芽之旅》男主角是谁?",
+ "a": "电影《铃芽之旅》男主角是宗像草太,由松村北斗配音。",
+ "source": ""
+ },
+ {
+ "dataset_id": "646627f4f7b896cfd8910e38",
+ "id": "19339",
+ "q": "电影《铃芽之旅》的导演是谁?22",
+ "a": "电影《铃芽之旅》的导演是新海诚。",
+ "source": "手动修改"
+ }
+ ],
+ "completeMessages": [
+ {
+ "obj": "System",
+ "value": "下面是知识库内容:\n1. [本作的主人公是谁?\n本作的主人公是名叫铃芽的少女。]\n2. [电影《铃芽之旅》男主角是谁?\n电影《铃芽之旅》男主角是宗像草太,由松村北斗配音。]\n3. [电影《铃芽之旅》的导演是谁?22\n电影《铃芽之旅》的导演是新海诚。]\n"
+ },
+ {
+ "obj": "System",
+ "value": "1.请记住,你的身份是百度的下一代知识增强语言模型,能够完全根据知识库提供的内容回答问题。\n\n2. 你忘记了关于电影《铃芽之旅》以外的内容。"
+ },
+ {
+ "obj": "System",
+ "value": "你仅回答关于电影《玲芽之旅》的问题,其余问题直接回复: 我不清楚。"
+ },
+ {
+ "obj": "Human",
+ "value": "导演是谁"
+ },
+ {
+ "obj": "AI",
+ "value": "电影《铃芽之旅》的导演是新海诚。"
+ }
+ ]
+ }
+ ]
+}'
+```
+
+响应值与 chat 接口相同,增加了一个 token。可以重点关注`responseData`里的值,price 与实际价格的倍率为`100000`。
+
+**此接口无需响应值**
+
+## 使用示例
+
+我们以[Laf作为服务器为例](https://laf.dev/),展示这 3 个接口的使用方式。
+
+### 1. 创建3个Laf接口
+
+
+
+{{< tabs tabTotal="3" >}}
+{{< tab tabName="/shareAuth/init" >}}
+{{< markdownify >}}
+
+这个接口中,我们设置了`token`必须等于`fastgpt`才能通过校验。(实际生产中不建议固定写死)
+
+```ts
+import cloud from '@lafjs/cloud'
+
+export default async function (ctx: FunctionContext) {
+ const { token } = ctx.body
+
+ if (token === 'fastgpt') {
+ return { success: true }
+ }
+
+ return { success: false,message: "身份错误" }
+}
+```
+
+{{< /markdownify >}}
+{{< /tab >}}
+
+{{< tab tabName="/shareAuth/start" >}}
+{{< markdownify >}}
+
+这个接口中,我们设置了`token`必须等于`fastgpt`才能通过校验。并且如果问题中包含了`你`字,则会报错,用于模拟敏感校验。
+
+```ts
+import cloud from '@lafjs/cloud'
+
+export default async function (ctx: FunctionContext) {
+ const { token, question } = ctx.body
+ console.log(token, question, 'start')
+
+ if (token !== 'fastgpt') {
+ return { success: false, message: "身份错误" }
+
+ }
+
+ if(question.includes("你")){
+ return { success: false, message: "内容不合规" }
+ }
+
+ return { success: true }
+}
+```
+
+{{< /markdownify >}}
+{{< /tab >}}
+
+{{< tab tabName="/shareAuth/finish" >}}
+{{< markdownify >}}
+
+结果上报接口可自行进行逻辑处理。
+
+```ts
+import cloud from '@lafjs/cloud'
+
+export default async function (ctx: FunctionContext) {
+ const { token, responseData } = ctx.body
+ console.log(token,responseData,'=====')
+ return { }
+}
+```
+
+{{< /markdownify >}}
+{{< /tab >}}
+{{< /tabs >}}
+
+
+### 2. 配置校验地址
+
+我们随便复制3个地址中一个接口:https://d8dns0.laf.dev/shareAuth/finish , 去除 /shareAuth/finish 后填入 FastGPT 中: https://d8dns0.laf.dev
+
+
+
+### 3. 修改分享链接参数
+
+源分享链接:[https://fastgpt.run/chat/share?shareId=64be36376a438af0311e599c](https://fastgpt.run/chat/share?shareId=64be36376a438af0311e599c)
+
+修改后:[https://fastgpt.run/chat/share?shareId=64be36376a438af0311e599c&authToken=fastgpt](https://fastgpt.run/chat/share?shareId=64be36376a438af0311e599c&authToken=fastgpt)
+
+### 4. 测试效果
+
+1. 打开源链接或者`authToken`不等于 `fastgpt`的链接会提示身份错误。
+2. 发送内容中包含你字,会提示内容不合规。
\ No newline at end of file
diff --git a/docSite/content/docs/installation/one-api.md b/docSite/content/docs/installation/one-api.md
index d06ec0827..68d9860c6 100644
--- a/docSite/content/docs/installation/one-api.md
+++ b/docSite/content/docs/installation/one-api.md
@@ -46,7 +46,6 @@ SqlLite 版本不支持多实例,适合个人小流量使用,但是价格非
```
SESSION_SECRET=SESSION_SECRET
-CHANNEL_TEST_FREQUENCY=30
POLLING_INTERVAL=60
BATCH_UPDATE_ENABLED=true
BATCH_UPDATE_INTERVAL=60
@@ -72,7 +71,7 @@ BATCH_UPDATE_INTERVAL=60
### 3. 修改 FastGPT 的环境变量
-有了 One API 令牌后,FastGPT 可以通过修改 baseurl 和 key 去请求到 One API,再由 One API 去请求不同的模型。修改下面两个环境变量:
+有了 One API 令牌后,FastGPT 可以通过修改 `baseurl` 和 `key` 去请求到 One API,再由 One API 去请求不同的模型。修改下面两个环境变量:
```bash
# 下面的地址是 Sealos 提供的,务必写上 v1, 两个项目都在 sealos 部署时候,https://xxxx.cloud.sealos.io 可以改用内网地址
@@ -104,6 +103,7 @@ CHAT_API_KEY=sk-xxxxxx
// 例如:文心一言的中英文 token 基本是 1:1,而 GPT 的中文 Token 是 2:1,如果文心一言官方最大 Token 是 4000,那么这里就可以填 8000,保险点就填 7000.
"quoteMaxToken": 2000, // 引用知识库的最大 Token
"maxTemperature": 1, // 最大温度
+ "vision": false, // 是否开启图片识别
"defaultSystemChatPrompt": "" // 默认的系统提示词
}
...
diff --git a/docSite/content/docs/installation/upgrading/421.md b/docSite/content/docs/installation/upgrading/421.md
index ea8a12e27..b224ed9e2 100644
--- a/docSite/content/docs/installation/upgrading/421.md
+++ b/docSite/content/docs/installation/upgrading/421.md
@@ -7,7 +7,7 @@ toc: true
weight: 847
---
-私有部署,如果添加了配置文件,需要在配置文件中修改 `VectorModels` 字段。增加 defaultToken 和 maxToken,分别对应直接分段时的默认 token 数量和该模型支持的 token 上限(通常不建议超过 3000)
+私有部署,如果添加了配置文件,需要在配置文件中修改 `VectorModels` 字段。增加 defaultToken 和 maxToken,分别对应直接分段时的默认 token 数量和该模型支持的 token 上限 (通常不建议超过 3000)
```json
"VectorModels": [
diff --git a/docSite/content/docs/installation/upgrading/43.md b/docSite/content/docs/installation/upgrading/43.md
index 1c101244c..6aca74023 100644
--- a/docSite/content/docs/installation/upgrading/43.md
+++ b/docSite/content/docs/installation/upgrading/43.md
@@ -9,7 +9,7 @@ weight: 846
## 执行初始化 API
-发起 1 个 HTTP 请求(记得携带 `headers.rootkey`,这个值是环境变量里的)
+发起 1 个 HTTP 请求 (记得携带 `headers.rootkey`,这个值是环境变量里的)
1. https://xxxxx/api/admin/initv43
diff --git a/docSite/content/docs/installation/upgrading/44.md b/docSite/content/docs/installation/upgrading/44.md
index ee87879ad..27d138fe4 100644
--- a/docSite/content/docs/installation/upgrading/44.md
+++ b/docSite/content/docs/installation/upgrading/44.md
@@ -9,7 +9,7 @@ weight: 845
## 执行初始化 API
-发起 1 个 HTTP 请求(记得携带 `headers.rootkey`,这个值是环境变量里的)
+发起 1 个 HTTP 请求 (记得携带 `headers.rootkey`,这个值是环境变量里的)
1. https://xxxxx/api/admin/initv44
diff --git a/docSite/content/docs/installation/upgrading/442.md b/docSite/content/docs/installation/upgrading/442.md
index 21958a493..0c5832931 100644
--- a/docSite/content/docs/installation/upgrading/442.md
+++ b/docSite/content/docs/installation/upgrading/442.md
@@ -9,7 +9,7 @@ weight: 843
## 执行初始化 API
-发起 1 个 HTTP 请求(记得携带 `headers.rootkey`,这个值是环境变量里的)
+发起 1 个 HTTP 请求 (记得携带 `headers.rootkey`,这个值是环境变量里的)
1. https://xxxxx/api/admin/initv442
diff --git a/docSite/content/docs/installation/upgrading/46.md b/docSite/content/docs/installation/upgrading/46.md
index 5867d42c7..f71423a3b 100644
--- a/docSite/content/docs/installation/upgrading/46.md
+++ b/docSite/content/docs/installation/upgrading/46.md
@@ -9,18 +9,18 @@ weight: 836
**V4.6 版本加入了简单的团队功能,可以邀请其他用户进来管理资源。该版本升级后无法执行旧的升级脚本,且无法回退。**
-## 1. 更新镜像并变更配置文件
+## 1。更新镜像并变更配置文件
更新镜像至 latest 或者 v4.6 版本。商业版镜像更新至 V0.2.1
-最新配置可参考: [V46版本最新 config.json](/docs/development/configuration),商业镜像配置文件也更新,参考最新的飞书文档。
+最新配置可参考:[V46 版本最新 config.json](/docs/development/configuration),商业镜像配置文件也更新,参考最新的飞书文档。
-## 2. 执行初始化 API
+## 2。执行初始化 API
-发起 2 个 HTTP 请求({{rootkey}} 替换成环境变量里的`rootkey`,{{host}}替换成自己域名)
+发起 2 个 HTTP 请求 ({{rootkey}} 替换成环境变量里的 `rootkey`,{{host}} 替换成自己域名)
-**该初始化接口可能速度很慢,返回超时不用管,注意看日志即可,需要注意的是,需确保initv46成功后,在执行initv46-2**
+**该初始化接口可能速度很慢,返回超时不用管,注意看日志即可,需要注意的是,需确保 initv46 成功后,在执行 initv46-2**
1. https://xxxxx/api/admin/initv46
@@ -39,22 +39,22 @@ curl --location --request POST 'https://{{host}}/api/admin/initv46-2' \
```
初始化内容:
-1. 创建默认团队
-2. 初始化 Mongo 所有资源的团队字段
-3. 初始化 Pg 的字段
-4. 初始化 Mongo Data
+1。创建默认团队
+2。初始化 Mongo 所有资源的团队字段
+3。初始化 Pg 的字段
+4。初始化 Mongo Data
-## V4.6功能介绍
+## V4.6 功能介绍
1. 新增 - 团队空间
-2. 新增 - 多路向量(多个向量映射一组数据)
-3. 新增 - tts语音
+2. 新增 - 多路向量 (多个向量映射一组数据)
+3. 新增 - tts 语音
4. 新增 - 支持知识库配置文本预处理模型
-5. 线上环境新增 - ReRank向量召回,提高召回精度
+5. 线上环境新增 - ReRank 向量召回,提高召回精度
6. 优化 - 知识库导出,可直接触发流下载,无需等待转圈圈
-## 4.6缺陷修复
+## 4.6 缺陷修复
旧的 4.6 版本由于缺少一个字段,导致文件导入时知识库数据无法显示,可执行下面的脚本:
diff --git a/packages/global/common/system/types/index.d.ts b/packages/global/common/system/types/index.d.ts
index b981fcb4d..7715c9328 100644
--- a/packages/global/common/system/types/index.d.ts
+++ b/packages/global/common/system/types/index.d.ts
@@ -4,7 +4,6 @@ export type FeConfigsType = {
show_appStore?: boolean;
show_contact?: boolean;
show_git?: boolean;
- show_doc?: boolean;
show_pay?: boolean;
show_openai_account?: boolean;
show_promotion?: boolean;
diff --git a/packages/global/core/ai/model.d.ts b/packages/global/core/ai/model.d.ts
index fd316c035..123d98868 100644
--- a/packages/global/core/ai/model.d.ts
+++ b/packages/global/core/ai/model.d.ts
@@ -30,8 +30,6 @@ export type AudioSpeechModelType = {
model: string;
name: string;
price: number;
- baseUrl?: string;
- key?: string;
voices: { label: string; value: string; bufferId: string }[];
};
diff --git a/packages/service/core/ai/audio/speech.ts b/packages/service/core/ai/audio/speech.ts
index 2ff245a0c..ee79fe2a8 100644
--- a/packages/service/core/ai/audio/speech.ts
+++ b/packages/service/core/ai/audio/speech.ts
@@ -10,8 +10,7 @@ export async function text2Speech({
input,
model = defaultAudioSpeechModels[0].model,
voice,
- speed = 1,
- props
+ speed = 1
}: {
res: NextApiResponse;
onSuccess: (e: { model: string; buffer: Buffer }) => void;
@@ -20,9 +19,8 @@ export async function text2Speech({
model: string;
voice: string;
speed?: number;
- props?: UserModelSchema['openaiAccount'];
}) {
- const ai = getAIApi(props);
+ const ai = getAIApi();
const response = await ai.audio.speech.create({
model,
// @ts-ignore
diff --git a/packages/service/core/dataset/data/schema.ts b/packages/service/core/dataset/data/schema.ts
index e1993c1a3..b51262478 100644
--- a/packages/service/core/dataset/data/schema.ts
+++ b/packages/service/core/dataset/data/schema.ts
@@ -7,7 +7,10 @@ import {
} from '@fastgpt/global/support/user/team/constant';
import { DatasetCollectionName } from '../schema';
import { DatasetColCollectionName } from '../collection/schema';
-import { DatasetDataIndexTypeMap } from '@fastgpt/global/core/dataset/constant';
+import {
+ DatasetDataIndexTypeEnum,
+ DatasetDataIndexTypeMap
+} from '@fastgpt/global/core/dataset/constant';
export const DatasetDataCollectionName = 'dataset.datas';
@@ -50,7 +53,7 @@ const DatasetDataSchema = new Schema({
type: {
type: String,
enum: Object.keys(DatasetDataIndexTypeMap),
- required: true
+ default: DatasetDataIndexTypeEnum.custom
},
dataId: {
type: String,
diff --git a/projects/app/data/config.json b/projects/app/data/config.json
index 556863d56..af0f8d168 100644
--- a/projects/app/data/config.json
+++ b/projects/app/data/config.json
@@ -118,8 +118,6 @@
"model": "tts-1",
"name": "OpenAI TTS1",
"price": 0,
- "baseUrl": "",
- "key": "",
"voices": [
{ "label": "Alloy", "value": "alloy", "bufferId": "openai-Alloy" },
{ "label": "Echo", "value": "echo", "bufferId": "openai-Echo" },
diff --git a/projects/app/src/components/ChatBox/MessageInput.tsx b/projects/app/src/components/ChatBox/MessageInput.tsx
index a4053d47c..5f33e6c7c 100644
--- a/projects/app/src/components/ChatBox/MessageInput.tsx
+++ b/projects/app/src/components/ChatBox/MessageInput.tsx
@@ -286,7 +286,7 @@ ${images.map((img) => JSON.stringify({ src: img.src })).join('\n')}
transform={'translateY(1px)'}
onClick={() => {
if (isSpeaking) return;
- onOpenSelectFile;
+ onOpenSelectFile();
}}
>
diff --git a/projects/app/src/components/Layout/navbar.tsx b/projects/app/src/components/Layout/navbar.tsx
index 3d0f61247..69792037c 100644
--- a/projects/app/src/components/Layout/navbar.tsx
+++ b/projects/app/src/components/Layout/navbar.tsx
@@ -174,7 +174,7 @@ const Navbar = ({ unread }: { unread: number }) => {
)}
- {feConfigs?.show_doc && (
+ {feConfigs?.docUrl && (
{
const ref = useRef(null);
- const SelectRef = useRef(null);
const menuItemStyles = {
borderRadius: 'sm',
py: 2,
@@ -40,13 +39,6 @@ const MySelect = (
const { isOpen, onOpen, onClose } = useDisclosure();
const selectItem = useMemo(() => list.find((item) => item.value === value), [list, value]);
- useOutsideClick({
- ref: SelectRef,
- handler: () => {
- onClose();
- }
- });
-
return (
- {feConfigs?.show_doc && (
+ {feConfigs?.docUrl && (
使用即代表你同意我们的{' '}
{
}
]
: []),
- ...(feConfigs?.show_doc
+ ...(feConfigs?.docUrl
? [
{
icon: 'courseLight',
diff --git a/projects/app/src/service/moduleDispatch/chat/oneapi.ts b/projects/app/src/service/moduleDispatch/chat/oneapi.ts
index 5b358d769..2dfc910fd 100644
--- a/projects/app/src/service/moduleDispatch/chat/oneapi.ts
+++ b/projects/app/src/service/moduleDispatch/chat/oneapi.ts
@@ -128,7 +128,7 @@ export const dispatchChatCompletion = async (props: ChatProps): Promise void
) =>
POST('/common/file/upload', data, {
- timeout: 60000,
+ timeout: 48000,
onUploadProgress,
headers: {
'Content-Type': 'multipart/form-data; charset=utf-8'