对话接口
介绍
该接口为最基础的对话API,根据用户输入生成AI智能体的响应结果,通过一个接口融入LinkAI的各项能力:
- 支持通过绑定 应用 或 工作流,使用其背后的 知识库 和 插件 等能力
 - 支持一键切换所有支持的 大模型
 - 支持 流式/非流式 输出,兼容 OpenAI 的接口结构
 - 支持 多模态输入/输出,可输入文字、图片;输出文字、图片、视频、文件
 
在线接口调试:API接口调试
接口定义
接口地址
POST https://api.link-ai.tech/v1/chat/completions
请求头
| 参数 | 取值 | 说明 | 
|---|---|---|
| Authorization | Bearer YOUR_API_KEY | 参考 接口鉴权说明 创建 API Key 并填入 | 
| Content-Type | application/json | 表明使用JSON格式请求 | 
请求体
| 参数 | 类型 | 是否必传 | 说明 | 
|---|---|---|---|
| messages | list<object> | 是 | 消息上下文列表,其中每个元素的结构为 {"role": "user", "content": "你好"}, role 字段支持填写 system, user, assistant 中的一个,content字段不能为空 | 
| app_code | string | 否 | 应用或工作流的 code。若不填则表示不绑定具体应用,将请求直接传递给模型 | 
| model | string | 否 | 模型编码,不传则使用应用的默认模型。所有可选模型见 模型列表 | 
| temperature | float | 否 | 温度,默认为应用中配置的温度。取值范围为 [0, 1],温度越高回复越具有创意和不确定性,温度越低则回复更严谨 | 
| top_p | int | 否 | 控制模型采样范围,默认值为 1 | 
| frequency_penalty | float | 否 | 频率惩罚项,该参数越大则更倾向于产生不同的内容,范围为 [-2, 2],默认值为 0 | 
| presence_penalty | float | 否 | 存在惩罚项,该参数越大则更倾向于产生不同的内容,范围为 [-2, 2],默认值为 0 | 
| stream | bool | 否 | 是否流式输出,默认值为 false | 
注意:
- 当通过 
app_code参数指定了应用时,将会默认使用 应用设定 作为系统提示词,使用应用中配置的 默认模型 作为model,使用 应用的温度 作为temperature的值 - 当通过 
app_code参数指定了工作流时,接口调用后将会从开始节点执行工作流,并将结束节点的输出通过接口返回 
请求示例:
{
    "app_code": "G7z6vKwp",
    "messages": [
        { "role": "user", "content": "你好" }
    ]
}
注意:app_code 需换成你自己创建应用的code、应用广场中公开应用的code,或不指定应用
响应结果
非流式响应
接口调用默认为非流式响应,会在所有内容生成完毕后一次性返回:
{
    "choices": [
        {
            "index": 0,
            "message": {
                "role": "assistant",
                "content": "你好,请问有什么可以帮助您的吗?"
            }
        }
    ],
    "usage": {
        "prompt_tokens": 9,
        "completion_tokens": 17,
        "total_tokens": 26
    }
}
注意:
choices.message.content中为AI的响应内容,usage部分 prompt_tokens、completion_tokens、total_tokens 分别表示请求的token数、响应的token数、全部消耗的token数,这三个费用相关字段直接使用模型返回的结果,平台不做处理。一次对话的token计算包含 请求 和 响应 中的总token数, 其中请求又包含 应用设定、历史对话、知识库内容、用户问题,这些几个部分的token长度限制都可以在 应用管理 中找到。
流式响应
流式调用需要将传入参数 stream 设置为 true,将会在模型不断生成内容的过程中实时返回,适用于网页、APP、小程序等调用端进行流式输出:
data: {"choices": [{"index": 0, "delta": {"content": "你好!"}, "finish_reason": null}], "session_id": null}
data: {"choices": [{"index": 0, "delta": {"content": "我能"}, "finish_reason": null}], "session_id": null}
data: {"choices": [{"index": 0, "delta": {"content": "为你"}, "finish_reason": null}], "session_id": null}
data: {"choices": [{"index": 0, "delta": {"content": "做些什么?"}, "finish_reason": null}], "session_id": null}
data: {"choices": [{"index": 0, "delta": {}, "finish_reason": "stop", "usage": {"prompt_tokens": 9, "completion_tokens": 6, "total_tokens": 15}}], "session_id": null}
data: [DONE]
注意:当输出为 "[DONE]" 时表示输出结束。
错误说明
当接口异常时会返回以下结构:
{
    "error": {
        "message": "Invalid request: user message content is empty",
        "type": "invalid_request_error"
    }
}
根据 HTTP状态码 (status code) 和错误信息 判断错误类型:
| HTTP状态码 | 描述 | 
|---|---|
| 400 | 请求格式错误 | 
| 401 | 接口鉴权失败,请检查 API Key 是否填写正确 | 
| 402 | 应用不存在,请检查 app_code 参数是否正确 | 
| 403 | 无访问权限,对于未公开应用,只有创建者账号才能调用 | 
| 406 | 账号积分额度不足 | 
| 409 | 内容审核不通过,问题、回答、检索的知识库中可能存在敏感词 | 
| 503 | 接口调用异常,联系客服处理 | 
模型列表
接口支持的所有模型列表如下:
| 模型编码 (model) | 上下文长度 | 说明 | 
|---|---|---|
| LinkAI-3.5 | 16K | openAI 3.5 模型 | 
| LinkAI-4o-mini | 128K | openAI 4o-mini模型 | 
| LinkAI-4o | 128K | openAI 4o模型 | 
| LinkAI-4-turbo | 128K | openAI 4-turbo模型 | 
| LinkAI-4 | 8K | openAI 4.0 模型 | 
| o1-mini | 128K | 在代码、数学等推理场景进行了优化 | 
| o1-preview | 128K | 在复杂推理场景上进行了优化 | 
| moonshot | 128K | Kimi模型,可自动切换不同上下文长度 | 
| claude-3-5-sonnet | 200K | Claude3.5模型 | 
| claude-3-haiku | 200K | Claude3 Haiku | 
| claude-3-sonnet | 200K | Claude3 Sonnet | 
| claude-3-opus | 200K | Claude3 Opus | 
| qwen-turbo | 8K | 通义千问 Turbo | 
| qwen-plus | 32K | 通义千问 Plus | 
| qwen-max | 8K | 通义千问 Max | 
| wenxin | 8K | 文心一言3.5 | 
| wenxin-4 | 8K | 文心一言4.0 | 
| doubao-pro-4K | 4K | 豆包4K模型 | 
| doubao-pro-32K | 32K | 豆包32K模型 | 
| doubao-pro-128K | 128K | 豆包128K模型 | 
| glm-4 | 4K | 智谱AI GLM-4 | 
| xunfei | 8K | 讯飞星火3.5 | 
| gemini | 32K | Google Gemini | 
| gemini-1.5-flash | 1000K | Gemini 1.5 Flash | 
| gemini-1.5-pro | 1000K | Gemini 1.5 Pro | 
将模型编码传入 model 参数即可使用,推荐不传 model 参数,使用应用配置的默认模型。各模型价格见 计费规则。
示例代码
文本对话
1.CURL请求
- 非流式输出
 - 流式输出
 
curl --request POST \
  --url https://api.link-ai.tech/v1/chat/completions \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
  "app_code": "",
  "messages": [
    {
      "role": "user",
      "content": "你是谁"
    }
  ]
}'
curl --request POST \
  --url https://api.link-ai.tech/v1/chat/completions \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
  "app_code": "",
  "messages": [
    {
      "role": "user",
      "content": "你是谁"
    }
  ],
  "stream": true
}'
注意:在 YOUR_API_KEY 处填入你创建的 API Key,在 app_code 中填入你创建的应用code。
2.Python代码请求
- 非流式输出
 - 流式输出
 
import requests
url = "https://api.link-ai.tech/v1/chat/completions"
headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer YOUR_API_KEY"
}
body = {
    "app_code": "",
    "messages": [
        {
            "role": "user",
            "content": "你好"
        }
    ]
}
res = requests.post(url, json=body, headers=headers)
if res.status_code == 200:
    reply_text = res.json().get("choices")[0]['message']['content']
    print(reply_text)
else:
    error = res.json().get("error")
    print(f"请求异常, 错误码={res.status_code}, 错误类型={error.get('type')}, 错误信息={error.get('message')}")
import json
import requests
url = "https://api.link-ai.tech/v1/chat/completions"
headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer YOUR_API_KEY"
}
body = {
    "app_code": "",
    "messages": [
        {
            "role": "user",
            "content": "写一个登录模块的设计文档"
        }
    ],
    "stream": True,
}
res = requests.post(url, json=body, headers=headers, stream=True)
for i in res.iter_lines():
    st = str(i, encoding="utf-8")
    st = st.replace("data: ", "", 1)
    if st:
        if st == "[DONE]":                  # 输出结束
            break
        chunk = json.loads(st)
        if not chunk.get("choices"):
            continue
        chunk_message = chunk["choices"][0]["delta"].get("content")
        if chunk_message:
            print(chunk_message, end="")    # 输出每一段数据
注意:
- 在 
YOUR_API_KEY处填入你创建的API Key,在app_code中填入你创建的应用code。 - 如果你使用的是 openai 的SDK,可以通过修改 
api_base配置快速完成键入,详见 OpenAI兼容 
3.更多语言和在线调试
其他编程语言的接入代码可以在 API调试页面 进行代码生成,同时支持在线进行接口调试。

图像识别
支持用户输入图片并根据图片进行问答,使用前提:
- 对于 应用接入:应用中需启用 "图像识别" 插件
 - 对于 工作流接入:工作流中需使用 "图像识别" 插件
 
curl https://api.link-ai.tech/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "app_code": "default",
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "type": "text",
            "text": "这张图是什么?"
          },
          {
            "type": "image_url",
            "image_url": {
              "url": "https://cdn.link-ai.tech/doc/vision-model-config.jpg"
            }
          }
        ]
      }
    ]
  }'
注意:
- 在 
YOUR_API_KEY处填入你创建的API Key,将app_code中的值替换为你创建的应用或工作流的code。 - 图片url需填写公开网络可访问的图片地址。
 
OpenAI兼容
该接口完全兼容 OpenAI的输入和输出格式,所以可以直接使用 OpenAI SDK 完成接入,只需设置 api_base 和 api_key 即可:
- 1.x 版本
 - 0.x 版本
 
client = OpenAI(
    base_url = "https://api.link-ai.tech/v1",
    api_key = "YOUR API KEY"
)
openai.api_base = "https://api.link-ai.tech/v1"
openai.api_key = "YOUR API KEY"
如果需要在使用 OpenAI SDK 的同时指定应用,可以将 app_code 参数使用 "-" 分隔符拼接在 api_key 参数的后面,例如 Link_tOCJYmHxxm55eA1xs-Kv2fXJcH2。