This commit is contained in:
archer
2023-08-15 22:04:41 +08:00
parent d8cd2e9b45
commit e8ff91c455
16 changed files with 433 additions and 11 deletions

View File

@@ -1,4 +1,4 @@
# Sealos 快速部署 OneAPI
# 部署 OneAPI,实现多模型
无需魔法,部署即可使用

View File

@@ -22,7 +22,7 @@
### 系统提示词(可被外部输入覆盖)
防止在上下文数组的最前面role 为 system用于引导模型。具体用法参考各搜索引擎的教程~
放置在上下文数组的最前面role 为 system用于引导模型。具体用法参考各搜索引擎的教程~
### 限定词(可被外部输入覆盖)

View File

@@ -1 +1,51 @@
# 内容提取
- 可重复添加
- 有外部输入
- 手动配置
- 触发执行
- function_call 模块
- 核心模块
![](./imgs/extract1.png)
## 功能
从文本中提取结构化数据,通常是配合 HTTP 模块实现扩展。也可以做一些直接提取操作,例如:翻译。
## 参数说明
### 提取要求描述
顾名思义,给模型一个要目标,需要提取哪些内容。
**例子 1**
> 你是实验室预约助手,从对话中提取出姓名,预约时间,实验室号。当前时间 {{cTime}}
**例子 2**
> 你是谷歌搜索助手,从对话中提取出搜索关键词
**例子 3**
> 将我的问题直接翻译成英文,不要回答问题
### 历史记录
通常需要一些历史记录,才能更完整的提取用户问题。例如上图中需要提前名字、时间和实验室名,用户可能一开始只给了时间和实验室名,没有给自己的名字。再经过一轮缺失提示后,用户输入了姓名,此时需要结合上一次的记录才能完整的提取出 3 个内容。
### 目标字段
目标字段与提取的结果相对应,从上图可以看到,每增加一个字段,输出会增加一个对应的出口。
key: 字段的唯一标识,不可重复!
字段描述:描述该字段是关于什么的,例如:姓名、时间、搜索词等等。
必须:是否强制模型提取该字段,可能提取出来是空字符串。
## 输出介绍
- 字段完全提取:说明用户的问题中包含需要提取的所有内容。
- 提取字段缺失:与 “字段完全提取” 对立,有缺失提取的字段时触发。
- 完整提取结果: 一个 json 字符串,包含所有字段的提取结果。
- 目标字段提取结果:类型均为字符串。

View File

@@ -0,0 +1,69 @@
# 问题分类
- 可重复添加
- 有外部输入
- 手动配置
- 触发执行
- function_call 模块
![](./imgs/cq1.png)
## 功能
可以将用户的问题进行分类,分类后执行不同操作。在一些较模糊的场景中,分类效果不是很明显。
## 参数说明
### 系统提示词
被放置在对话最前面,可用于补充说明分类内容的定义。例如问题会被分为:
1. 打招呼
2. laf 常见问题
3. 其他问题
由于 laf 不是一个明确的东西,需要给它一个定义,此时提示词里可以填入 laf 的定义:
```
laf 是云开发平台,可以快速的开发应用
laf 是一个开源的 BaaS 开发平台Backend as a Service)
laf 是一个开箱即用的 serverless 开发平台
laf 是一个集「函数计算」、「数据库」、「对象存储」等于一身的一站式开发平台
laf 可以是开源版的腾讯云开发、开源版的 Google Firebase、开源版的 UniCloud
```
### 聊天记录
适当增加一些聊天记录,可以联系上下文进行分类。
### 用户问题
输入的内容。
### 分类内容
依然以这 3 个分类为例,可以看到最终组成的 function。其中返回值由系统随机生成不需要关心。
1. 打招呼
2. laf 常见问题
3. 其他问题
```js
const agentFunction = {
name: agentFunName,
description: '判断用户问题的类型属于哪方面,返回对应的枚举字段',
parameters: {
type: 'object',
properties: {
type: {
type: 'string',
description: `打招呼,返回: abclaf 常见问题返回vvv其他问题返回aaa`
enum: ["abc","vvv","aaa"]
}
},
required: ['type']
}
};
```
上面的 function 必然会返回 type = abcvvvaaa 其中一个值,从而实现分类判断。

View File

@@ -1 +1,95 @@
# HTTP 模块
- 可重复添加
- 有外部输入
- 手动配置
- 触发执行
- 核中核模块
![](./imgs/http1.png)
## 介绍
HTTP 模块会向对应的地址发送一个 POST 请求Body 中携带 json 类型的参数,具体的参数可自定义。并接收一个 json 响应值,字段也是自定义。如上图中,我们定义了一个入参:提取的字段(定义的 key 为 appointment类型为 string和一个出参提取结果定义的 key 为 response类型为 string
那么,这个请求的 curl 为:
```curl
curl --location --request POST 'https://xxxx.laf.dev/appointment-lab' \
--header 'Content-Type: application/json' \
--data-raw '{
"appointment":"{\"name\":\"小明\",\"time\":\"2023/08/16 15:00\",\"labname\":\"子良A323\"}"
}'
```
响应为:
```json
{
"response": "您已经有一个预约记录了,每人仅能同时预约一个实验室:\n 姓名:小明\n 时间: 2023/08/15 15:00\n 实验室: 子良A323\n "
}
```
**如果你不想额外的部署服务,可以使用 laf 快速的搭建接口,即写即发,无需部署**
[laf 在线地址](https://laf.dev/)
下面是一个请求例子:
```ts
import cloud from '@lafjs/cloud';
const db = cloud.database();
export default async function (ctx: FunctionContext) {
const { appointment } = ctx.body;
const { name, time, labname } = JSON.parse(appointment);
const missData = [];
if (!name) missData.push('你的姓名');
if (!time) missData.push('需要预约的时间');
if (!labname) missData.push('实验室名称');
if (missData.length > 0) {
return {
response: `请提供: ${missData.join('、')}`
};
}
const { data: record } = await db
.collection('LabAppointment')
.where({
name,
status: 'unStart'
})
.getOne();
if (record) {
return {
response: `您已经有一个预约记录了,每人仅能同时预约一个实验室:
姓名:${record.name}
时间: ${record.time}
实验室: ${record.labname}
`
};
}
await db.collection('LabAppointment').add({
name,
time,
labname,
status: 'unStart'
});
return {
response: `预约成功。
姓名:${name}
时间: ${time}
实验室: ${labname}
`
};
}
```
## 作用
基于 HTTP 模块,你可以做无限的扩展,可以操作数据库、执行联网搜索、发送邮箱等等。如果你有有趣的案例,欢迎 PR 到 [编排案例](/docs/category/examples)

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB