LLM
LLM 转换插件
描述
利用大型语言模型 (LLM) 的强大功能来处理数据,方法是将数据发送到 LLM 并接收生成的结果。利用 LLM 的功能来标记、清理、丰富数据、执行数据推理等。
属性
名称 | 类型 | 是否必须 | 默认值 |
---|---|---|---|
model_provider | enum | yes | |
output_data_type | enum | no | String |
output_column_name | string | no | llm_output |
prompt | string | yes | |
inference_columns | list | no | |
model | string | yes | |
api_key | string | yes | |
api_path | string | no | |
custom_config | map | no | |
custom_response_parse | string | no | |
custom_request_headers | map | no | |
custom_request_body | map | no |
model_provider
要使用的模型提供者。可用选项为: OPENAI、DOUBAO、KIMIAI、MICROSOFT, CUSTOM
tips: 如果使用 Microsoft, 请确保 api_path 配置不能为空
output_data_type
输出数据的数据类型。可用选项为: STRING,INT,BIGINT,DOUBLE,BOOLEAN. 默认值为 STRING。
output_column_name
自定义输出数据字段名称。自定义字段名称与现有字段名称相同时,将替换为llm_output
。
prompt
发送到 LLM 的提示。此参数定义 LLM 将如何处理和返回数据,例如:
从源读取的数据是这样的表格:
name | age |
---|---|
Jia Fan | 20 |
Hailin Wang | 20 |
Eric | 20 |
Guangdong Liu | 20 |
我们可以使用以下提示:
Determine whether someone is Chinese or American by their name
这将返回:
name | age | llm_output |
---|---|---|
Jia Fan | 20 | Chinese |
Hailin Wang | 20 | Chinese |
Eric | 20 | American |
Guangdong Liu | 20 | Chinese |
inference_columns
inference_columns
选项允许您指定应该将输入数据中的哪些列用作LLM的输入。默认情况下,所有列都将用作输入。
For example:
transform {
LLM {
model_provider = OPENAI
model = gpt-4o-mini
api_key = sk-xxx
inference_columns = ["name", "age"]
prompt = "Determine whether someone is Chinese or American by their name"
}
}
model
要使用的模型。不同的模型提供者有不同的模型。例如,OpenAI 模型可以是 gpt-4o-mini
。
如果使用 OpenAI 模型,请参考 https://platform.openai.com/docs/models/model-endpoint-compatibility 文档的/v1/chat/completions
端点。
api_key
用于模型提供者的 API 密钥。 如果使用 OpenAI 模型,请参考 https://platform.openai.com/docs/api-reference/api-keys 文档的如何获取 API 密钥。
api_path
用于模型提供者的 API 路径。在大多数情况下,您不需要更改此配置。如果使用 API 代理的服务,您可能需要将其配置为代理的 API 地址。
custom_config
custom_config
选项允许您为模型提供额外的自定义配置。这是一个 Map,您可以在其中定义特定模型可能需要的各种设置。
custom_response_parse
custom_response_parse
选项允许您指定如何解析模型的响应。您可以使用 JsonPath
从响应中提取所需的特定数据。例如,使用 $.choices[*].message.content
提取如下json中的 content
字段
值。JsonPath 的使用请参考 JsonPath 快速入门
{
"id": "chatcmpl-9s4hoBNGV0d9Mudkhvgzg64DAWPnx",
"object": "chat.completion",
"created": 1722674828,
"model": "gpt-4o-mini",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "[\"Chinese\"]"
},
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 107,
"completion_tokens": 3,
"total_tokens": 110
},
"system_fingerprint": "fp_0f03d4f0ee",
"code": 0,
"msg": "ok"
}
custom_request_headers
custom_request_headers
选项允许您定义应包含在发送到模型 API 的请求中的自定义头信息。如果 API
需要标准头信息之外的额外头信息,例如授权令牌、内容类型等,这个选项会非常有用。
custom_request_body
custom_request_body
选项支持占位符:
${model}
:用于模型名称的占位符。${input}
:用于确定输入值的占位符,同时根据 body value 的类型定义请求体请求类型。例如:"${input}"
-> "input"。${prompt}
:用于 LLM 模型提示的占位符。
common options [string]
转换插件的常见参数, 请参考 Transform Plugin 了解详情
tips
大模型API接口通常会有速率限制,可以配合Seatunnel的限速配置,已确保任务顺利运行。 Seatunnel限速配置,请参考speed-limit了解详情
示例 OPENAI
通过 LLM 确定用户所在的国家。
env {
parallelism = 1
job.mode = "BATCH"
read_limit.rows_per_second = 10
}
source {
FakeSource {
row.num = 5
schema = {
fields {
id = "int"
name = "string"
}
}
rows = [
{fields = [1, "Jia Fan"], kind = INSERT}
{fields = [2, "Hailin Wang"], kind = INSERT}
{fields = [3, "Tomas"], kind = INSERT}
{fields = [4, "Eric"], kind = INSERT}
{fields = [5, "Guangdong Liu"], kind = INSERT}
]
}
}
transform {
LLM {
model_provider = OPENAI
model = gpt-4o-mini
api_key = sk-xxx
prompt = "Determine whether someone is Chinese or American by their name"
}
}
sink {
console {
}
}
示例 KIMIAI
通过 LLM 判断人名是否中国历史上的帝王
env {
parallelism = 1
job.mode = "BATCH"
read_limit.rows_per_second = 10
}
source {
FakeSource {
row.num = 5
schema = {
fields {
id = "int"
name = "string"
}
}
rows = [
{fields = [1, "诸葛亮"], kind = INSERT}
{fields = [2, "李世民"], kind = INSERT}
{fields = [3, "孙悟空"], kind = INSERT}
{fields = [4, "朱元璋"], kind = INSERT}
{fields = [5, "乔治·华盛顿"], kind = INSERT}
]
}
}
transform {
LLM {
model_provider = KIMIAI
model = moonshot-v1-8k
api_key = sk-xxx
prompt = "判断是否是中国历史上的帝王"
output_data_type = boolean
}
}
sink {
console {
}
}
Customize the LLM model
env {
job.mode = "BATCH"
}
source {
FakeSource {
row.num = 5
schema = {
fields {
id = "int"
name = "string"
}
}
rows = [
{fields = [1, "Jia Fan"], kind = INSERT}
{fields = [2, "Hailin Wang"], kind = INSERT}
{fields = [3, "Tomas"], kind = INSERT}
{fields = [4, "Eric"], kind = INSERT}
{fields = [5, "Guangdong Liu"], kind = INSERT}
]
result_table_name = "fake"
}
}
transform {
LLM {
source_table_name = "fake"
model_provider = CUSTOM
model = gpt-4o-mini
api_key = sk-xxx
prompt = "Determine whether someone is Chinese or American by their name"
openai.api_path = "http://mockserver:1080/v1/chat/completions"
custom_config={
custom_response_parse = "$.choices[*].message.content"
custom_request_headers = {
Content-Type = "application/json"
Authorization = "Bearer xxxxxxxx"
}
custom_request_body ={
model = "${model}"
messages = [
{
role = "system"
content = "${prompt}"
},
{
role = "user"
content = "${input}"
}]
}
}
result_table_name = "llm_output"
}
}
sink {
Assert {
source_table_name = "llm_output"
rules =
{
field_rules = [
{
field_name = llm_output
field_type = string
field_value = [
{
rule_type = NOT_NULL
}
]
}
]
}
}
}