mirror of
https://github.com/labring/FastGPT.git
synced 2025-10-18 09:24:03 +00:00
fix: doc preview action;update doc (#5383)
* fix: doc preview action * update doc * dpc
This commit is contained in:
@@ -19,12 +19,12 @@ import { Alert } from '@/components/docs/Alert';
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"message": "错误提示",
|
||||
"msg": "同message, 错误提示",
|
||||
"data": {
|
||||
"uid": "用户唯一凭证"
|
||||
}
|
||||
"success": true,
|
||||
"message": "错误提示",
|
||||
"msg": "同message, 错误提示",
|
||||
"data": {
|
||||
"uid": "用户唯一凭证"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
@@ -37,21 +37,20 @@ import { Alert } from '@/components/docs/Alert';
|
||||

|
||||
|
||||
## 配置教程
|
||||
|
||||
### 1. 配置身份校验地址
|
||||
|
||||

|
||||
|
||||
配置校验地址后,在每次分享链接使用时,都会向对应的地址发起校验和上报请求。
|
||||
|
||||
<Alert icon="🤖" >
|
||||
这里仅需配置根地址,无需具体到完整请求路径。
|
||||
</Alert>
|
||||
<Alert icon="🤖">这里仅需配置根地址,无需具体到完整请求路径。</Alert>
|
||||
|
||||
### 2. 分享链接中增加额外 query
|
||||
|
||||
在分享链接的地址中,增加一个额外的参数: authToken。例如:
|
||||
|
||||
原始的链接:`https://share.tryfastgpt.ai/chat/share?shareId=648aaf5ae121349a16d62192`
|
||||
原始的链接:`https://share.tryfastgpt.ai/chat/share?shareId=648aaf5ae121349a16d62192`
|
||||
|
||||
完整链接: `https://share.tryfastgpt.ai/chat/share?shareId=648aaf5ae121349a16d62192&authToken=userid12345`
|
||||
|
||||
@@ -62,7 +61,6 @@ import { Alert } from '@/components/docs/Alert';
|
||||
<Tabs items={['请求示例','鉴权成功','鉴权失败']}>
|
||||
<Tab value="请求示例" >
|
||||
|
||||
|
||||
```bash
|
||||
curl --location --request POST '{{host}}/shareAuth/init' \
|
||||
--header 'Content-Type: application/json' \
|
||||
@@ -71,48 +69,40 @@ curl --location --request POST '{{host}}/shareAuth/init' \
|
||||
}'
|
||||
```
|
||||
|
||||
|
||||
</Tab>
|
||||
|
||||
<Tab value="鉴权成功" >
|
||||
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"uid": "用户唯一凭证"
|
||||
}
|
||||
"success": true,
|
||||
"data": {
|
||||
"uid": "用户唯一凭证"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
系统会拉取该分享链接下,uid 为 username123 的对话记录。
|
||||
|
||||
|
||||
</Tab>
|
||||
|
||||
<Tab value="鉴权失败" >
|
||||
|
||||
|
||||
```json
|
||||
{
|
||||
"success": false,
|
||||
"message": "身份错误",
|
||||
"success": false,
|
||||
"message": "身份错误"
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
|
||||
|
||||
### 4. 编写对话前校验接口
|
||||
|
||||
<Tabs items={['请求示例','鉴权成功','鉴权失败']}>
|
||||
<Tab value="请求示例" >
|
||||
|
||||
|
||||
```bash
|
||||
curl --location --request POST '{{host}}/shareAuth/start' \
|
||||
--header 'Content-Type: application/json' \
|
||||
@@ -122,42 +112,37 @@ curl --location --request POST '{{host}}/shareAuth/start' \
|
||||
}'
|
||||
```
|
||||
|
||||
|
||||
</Tab>
|
||||
|
||||
<Tab value="鉴权成功" >
|
||||
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"uid": "用户唯一凭证"
|
||||
}
|
||||
"success": true,
|
||||
"data": {
|
||||
"uid": "用户唯一凭证"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
</Tab>
|
||||
|
||||
<Tab value="鉴权失败" >
|
||||
|
||||
|
||||
```json
|
||||
{
|
||||
"success": false,
|
||||
"message": "身份验证失败",
|
||||
"success": false,
|
||||
"message": "身份验证失败"
|
||||
}
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"success": false,
|
||||
"message": "存在违规词",
|
||||
"success": false,
|
||||
"message": "存在违规词"
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
@@ -165,7 +150,7 @@ curl --location --request POST '{{host}}/shareAuth/start' \
|
||||
|
||||
该接口无规定返回值。
|
||||
|
||||
响应值与[chat 接口格式相同](/docs/development/openapi/chat/#响应),仅多了一个`token`。
|
||||
响应值与[chat 接口格式相同](/docs/introduction/development/openapi/intro/#响应),仅多了一个`token`。
|
||||
|
||||
重点关注:`totalPoints`(总消耗AI积分),`token`(Token消耗总数)
|
||||
|
||||
@@ -236,8 +221,8 @@ curl --location --request POST '{{host}}/shareAuth/finish' \
|
||||
"runningTime": 1.32
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
|
||||
|
||||
}'
|
||||
```
|
||||
|
||||
@@ -245,47 +230,47 @@ curl --location --request POST '{{host}}/shareAuth/finish' \
|
||||
|
||||
```ts
|
||||
type ResponseType = {
|
||||
moduleType: FlowNodeTypeEnum; // 模块类型
|
||||
moduleName: string; // 模块名
|
||||
moduleLogo?: string; // logo
|
||||
runningTime?: number; // 运行时间
|
||||
query?: string; // 用户问题/检索词
|
||||
textOutput?: string; // 文本输出
|
||||
moduleType: FlowNodeTypeEnum; // 模块类型
|
||||
moduleName: string; // 模块名
|
||||
moduleLogo?: string; // logo
|
||||
runningTime?: number; // 运行时间
|
||||
query?: string; // 用户问题/检索词
|
||||
textOutput?: string; // 文本输出
|
||||
|
||||
tokens?: number; // 上下文总Tokens
|
||||
model?: string; // 使用到的模型
|
||||
contextTotalLen?: number; // 上下文总长度
|
||||
totalPoints?: number; // 总消耗AI积分
|
||||
tokens?: number; // 上下文总Tokens
|
||||
model?: string; // 使用到的模型
|
||||
contextTotalLen?: number; // 上下文总长度
|
||||
totalPoints?: number; // 总消耗AI积分
|
||||
|
||||
temperature?: number; // 温度
|
||||
maxToken?: number; // 模型的最大token
|
||||
quoteList?: SearchDataResponseItemType[]; // 引用列表
|
||||
historyPreview?: ChatItemType[]; // 上下文预览(历史记录会被裁剪)
|
||||
temperature?: number; // 温度
|
||||
maxToken?: number; // 模型的最大token
|
||||
quoteList?: SearchDataResponseItemType[]; // 引用列表
|
||||
historyPreview?: ChatItemType[]; // 上下文预览(历史记录会被裁剪)
|
||||
|
||||
similarity?: number; // 最低相关度
|
||||
limit?: number; // 引用上限token
|
||||
searchMode?: `${DatasetSearchModeEnum}`; // 搜索模式
|
||||
searchUsingReRank?: boolean; // 是否使用rerank
|
||||
extensionModel?: string; // 问题扩展模型
|
||||
extensionResult?: string; // 问题扩展结果
|
||||
extensionTokens?: number; // 问题扩展总字符长度
|
||||
similarity?: number; // 最低相关度
|
||||
limit?: number; // 引用上限token
|
||||
searchMode?: `${DatasetSearchModeEnum}`; // 搜索模式
|
||||
searchUsingReRank?: boolean; // 是否使用rerank
|
||||
extensionModel?: string; // 问题扩展模型
|
||||
extensionResult?: string; // 问题扩展结果
|
||||
extensionTokens?: number; // 问题扩展总字符长度
|
||||
|
||||
cqList?: ClassifyQuestionAgentItemType[]; // 分类问题列表
|
||||
cqResult?: string; // 分类问题结果
|
||||
cqList?: ClassifyQuestionAgentItemType[]; // 分类问题列表
|
||||
cqResult?: string; // 分类问题结果
|
||||
|
||||
extractDescription?: string; // 内容提取描述
|
||||
extractResult?: Record<string, any>; // 内容提取结果
|
||||
extractDescription?: string; // 内容提取描述
|
||||
extractResult?: Record<string, any>; // 内容提取结果
|
||||
|
||||
params?: Record<string, any>; // HTTP模块params
|
||||
body?: Record<string, any>; // HTTP模块body
|
||||
headers?: Record<string, any>; // HTTP模块headers
|
||||
httpResult?: Record<string, any>; // HTTP模块结果
|
||||
params?: Record<string, any>; // HTTP模块params
|
||||
body?: Record<string, any>; // HTTP模块body
|
||||
headers?: Record<string, any>; // HTTP模块headers
|
||||
httpResult?: Record<string, any>; // HTTP模块结果
|
||||
|
||||
pluginOutput?: Record<string, any>; // 插件输出
|
||||
pluginDetail?: ChatHistoryItemResType[]; // 插件详情
|
||||
pluginOutput?: Record<string, any>; // 插件输出
|
||||
pluginDetail?: ChatHistoryItemResType[]; // 插件详情
|
||||
|
||||
isElseResult?: boolean; // 判断器结果
|
||||
}
|
||||
isElseResult?: boolean; // 判断器结果
|
||||
};
|
||||
```
|
||||
|
||||
## 实践案例
|
||||
@@ -296,87 +281,75 @@ type ResponseType = {
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
<Tabs items={['/shareAuth/init','/shareAuth/start','/shareAuth/finish']}>
|
||||
<Tab value="/shareAuth/init" >
|
||||
|
||||
|
||||
这个接口中,我们设置了`token`必须等于`fastgpt`才能通过校验。(实际生产中不建议固定写死)
|
||||
|
||||
```ts
|
||||
import cloud from '@lafjs/cloud'
|
||||
import cloud from '@lafjs/cloud';
|
||||
|
||||
export default async function (ctx: FunctionContext) {
|
||||
const { token } = ctx.body
|
||||
|
||||
// 此处省略 token 解码过程
|
||||
const { token } = ctx.body;
|
||||
|
||||
// 此处省略 token 解码过程
|
||||
if (token === 'fastgpt') {
|
||||
return { success: true, data: { uid: "user1" } }
|
||||
return { success: true, data: { uid: 'user1' } };
|
||||
}
|
||||
|
||||
return { success: false,message:"身份错误" }
|
||||
return { success: false, message: '身份错误' };
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
|
||||
</Tab>
|
||||
|
||||
<Tab value="/shareAuth/start" >
|
||||
|
||||
|
||||
这个接口中,我们设置了`token`必须等于`fastgpt`才能通过校验。并且如果问题中包含了`你`字,则会报错,用于模拟敏感校验。
|
||||
|
||||
```ts
|
||||
import cloud from '@lafjs/cloud'
|
||||
import cloud from '@lafjs/cloud';
|
||||
|
||||
export default async function (ctx: FunctionContext) {
|
||||
const { token, question } = ctx.body
|
||||
const { token, question } = ctx.body;
|
||||
|
||||
// 此处省略 token 解码过程
|
||||
// 此处省略 token 解码过程
|
||||
if (token !== 'fastgpt') {
|
||||
return { success: false, message: "身份错误" }
|
||||
|
||||
return { success: false, message: '身份错误' };
|
||||
}
|
||||
|
||||
if(question.includes("你")){
|
||||
return { success: false, message: "内容不合规" }
|
||||
if (question.includes('你')) {
|
||||
return { success: false, message: '内容不合规' };
|
||||
}
|
||||
|
||||
return { success: true, data: { uid: "user1" } }
|
||||
return { success: true, data: { uid: 'user1' } };
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
|
||||
</Tab>
|
||||
|
||||
<Tab value="/shareAuth/finish" >
|
||||
|
||||
|
||||
结果上报接口可自行进行逻辑处理。
|
||||
|
||||
```ts
|
||||
import cloud from '@lafjs/cloud'
|
||||
import cloud from '@lafjs/cloud';
|
||||
|
||||
export default async function (ctx: FunctionContext) {
|
||||
const { token, responseData } = ctx.body
|
||||
|
||||
const total = responseData.reduce((sum,item) => sum + item.price,0)
|
||||
const amount = total / 100000
|
||||
const { token, responseData } = ctx.body;
|
||||
|
||||
const total = responseData.reduce((sum, item) => sum + item.price, 0);
|
||||
const amount = total / 100000;
|
||||
|
||||
// 省略数据库操作
|
||||
|
||||
return { }
|
||||
return {};
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
|
||||
### 2. 配置校验地址
|
||||
|
||||
我们随便复制3个地址中一个接口: `https://d8dns0.laf.dev/shareAuth/finish`, 去除`/shareAuth/finish`后填入`身份校验`:`https://d8dns0.laf.dev`
|
||||
@@ -394,7 +367,6 @@ export default async function (ctx: FunctionContext) {
|
||||
1. 打开源链接或者`authToken`不等于`fastgpt`的链接会提示身份错误。
|
||||
2. 发送内容中包含你字,会提示内容不合规。
|
||||
|
||||
|
||||
## 使用场景
|
||||
|
||||
这个鉴权方式通常是帮助你直接嵌入`分享链接`到你的应用中,在你的应用打开分享链接前,应做`authToken`的拼接后再打开。
|
||||
|
Reference in New Issue
Block a user