
* perf: check balance * md * lock way * i18n * docs * doc * i18n * update doc * feat: one link sync * feat: one link sync * feat: one link sync * feat: one link sync * feat: one link sync * feat: one link sync * feat: one link sync
7.4 KiB
title, description, icon, draft, toc, weight
title | description | icon | draft | toc | weight |
---|---|---|---|---|---|
分享链接鉴权 | FastGPT 分享链接鉴权 | share | false | true | 860 |
使用说明
分享链接鉴权设计的目的在于,将 FastGPT 的对话框安全的接入你现有的系统中。
免登录链接配置中,增加了凭证校验服务器
后,使用分享链接时会向服务器发起请求,校验链接是否可用,并在每次对话结束后,向服务器发送对话结果。下面以host
来表示凭证校验服务器
。服务器接口仅需返回是否校验成功即可,不需要返回其他数据,格式如下:
{
"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 发出的请求
curl --location --request POST '{{host}}/shareAuth/init' \
--header 'Content-Type: application/json' \
--data-raw '{
"token": "sintdolore"
}'
响应示例
{
"success": false,
"message": "分享链接无效",
}
对话前校验
FastGPT 发出的请求
curl --location --request POST '{{host}}/shareAuth/start' \
--header 'Content-Type: application/json' \
--data-raw '{
"token": "sintdolore",
"question": "用户问题",
}'
响应示例
{
"success": true
}
对话结果上报
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作为服务器为例,展示这 3 个接口的使用方式。
1. 创建3个Laf接口
{{< tabs tabTotal="3" >}} {{< tab tabName="/shareAuth/init" >}} {{< markdownify >}}
这个接口中,我们设置了token
必须等于fastgpt
才能通过校验。(实际生产中不建议固定写死)
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
才能通过校验。并且如果问题中包含了你
字,则会报错,用于模拟敏感校验。
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 >}}
结果上报接口可自行进行逻辑处理。
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&authToken=fastgpt
4. 测试效果
- 打开源链接或者
authToken
不等于fastgpt
的链接会提示身份错误。 - 发送内容中包含你字,会提示内容不合规。