记忆对话接口
版本要求: 标准版 及以上
介绍
该接口为 带上下文记忆 的对话API,相比普通对话接口,用户无需自行维护上下文记忆并通过messages
参数传递,只需传入 用户问题和身份标识 即可,由系统按用户维度对上下文记忆进行维护。
支持的能力如下:
- 支持通过绑定 应用 或 工作流,使用其背后的 知识库 和 插件 等能力
- 支持根据应用或工作流中的 记忆轮次和时间 的配置对用户维度的记忆进行维护
- 支持一键切换所有支持的 大模型
- 支持 流式/非流式 输出
- 支持 多模态输入/输出,可输入文字;输出文字、图片、视频、文件
在线接口调试:API接口调试
接口定义
接口地址
POST https://api.link-ai.tech/v1/chat/memory/completions
请求头
参数 | 取值 | 说明 |
---|---|---|
Authorization | Bearer YOUR_API_KEY | 参考 接口鉴权说明 创建 API Key 并填入 |
Content-Type | application/json | 表明使用JSON格式请求 |
请求体
参数 | 类型 | 是否必传 | 说明 |
---|---|---|---|
question | string | 是 | 用户本轮输入的问题 |
session_id | string | 否 | 会话ID,每个session_id都有独立的上下文记忆存储。可传入对用户身份的标识,若该字段不填则系统会自动分配一个唯一标识,在响应中返回 |
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 |
image_url | string | 否 | 图片url地址,需要进行图像识别时可传入,支持jpg、jpeg、png格式 |
注意:
- 当通过
app_code
参数指定了应用时,可在应用管理页面中对 记忆轮次和保留时间 进行配置,同时会话记忆将按照 应用+会话ID 维度进行隔离存储,即同一个session_id
会在不同应用中有独立的上下文记忆:
- 当通过
app_code
参数指定了工作流时,系统将维护整个工作流的输入/输出记忆,可在大模型或应用节点中开启记忆并指定记忆的轮次:
请求示例:
{
"app_code": "G7z6vKwp",
"query": "你好",
"session_id": "123e4567-e89b-12d3-a456-426614174000"
}
注意:
app_code
:需换成你自己创建应用的code、应用广场中公开应用的codesession_id
:一般为对用户身份的唯一标识,例如可将业务系统中用户ID、手机号等信息加密后传入。若该字段不传,系统将自动生成一个唯一ID并在响应中返回,下次对话时可携带该字段。
响应结果
非流式响应
接口调用默认为非流式响应,会在所有内容生成完毕后一次性返回:
{
"session_id": "123e4567-e89b-12d3-a456-426614174000",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "你好,请问有什么可以帮助您的吗?"
}
}
],
"usage": {
"prompt_tokens": 9,
"completion_tokens": 17,
"total_tokens": 26
}
}
注意:
session_id
为会话ID,如果调用时指定了该字段,将会原样返回,如果未指定则会自动分配一个唯一ID,下次调用该接口时可以携带。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": "123e4567-e89b-12d3-a456-426614174000"}
data: {"choices": [{"index": 0, "delta": {"content": "我能"}, "finish_reason": null}], "session_id": "123e4567-e89b-12d3-a456-426614174000"}
data: {"choices": [{"index": 0, "delta": {"content": "为你"}, "finish_reason": null}], "session_id": "123e4567-e89b-12d3-a456-426614174000"}
data: {"choices": [{"index": 0, "delta": {"content": "做些什么?"}, "finish_reason": null}], "session_id": "123e4567-e89b-12d3-a456-426614174000"}
data: {"choices": [{"index": 0, "delta": {}, "finish_reason": "stop", "usage": {"prompt_tokens": 9, "completion_tokens": 6, "total_tokens": 15}}], "session_id": "123e4567-e89b-12d3-a456-426614174000"}
data: [DONE]
注意:当输出为 "[DONE]" 时表示输出结束,其中每一行数据都会携带 session_id
字段。
错误说明
当接口异常时会返回以下结构:
{
"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 | 账号积分额度不足 |
408 | 无API访问权限,该API支持标准版及以上版本调用 |
409 | 内容审核不通过,问题、回答、检索的知识库中可能存在敏感词 |
503 | 接口调用异常,联系客服处理 |
示例代码
文本对话
1.CURL请求
- 非流式输出
- 流式输出
curl --request POST \
--url https://api.link-ai.tech/v1/chat/memory/completions \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"app_code": "",
"question": "你是谁",
"session_id": "123e4567-e89b-12d3-a456-426614174000"
}'
curl --request POST \
--url https://api.link-ai.tech/v1/chat/memory/completions \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"app_code": "",
"question": "你是谁",
"session_id": "123e4567-e89b-12d3-a456-426614174000",
"stream": true
}'
注意:在 YOUR_API_KEY
处填入你创建的 API Key
,在 app_code
中填入你创建的应用code。
2.Python代码请求
- 非流式输出
- 流式输出
import requests
url = "https://api.link-ai.tech/v1/chat/memory/completions"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_KEY"
}
body = {
"app_code": "",
"question": "你好"
}
res = requests.post(url, json=body, headers=headers)
if res.status_code == 200:
res_json = res.json()
reply_text = res_json.get("choices")[0]['message']['content']
session_id = res_json.get("session_id")
print(f"session_id={session_id}, reply={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/memory/completions"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_KEY"
}
body = {
"app_code": "",
"question": "写一个登录模块的设计文档",
"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。
3.更多语言和在线调试
其他编程语言的接入代码可以在 API调试页面 进行代码生成,同时支持在线进行接口调试。
图像识别
支持用户输入图片并根据图片进行问答,使用前提:
- 对于 应用接入:应用中需启用 "图像识别" 插件
- 对于 工作流接入:工作流中需使用 "图像识别" 插件
curl --request POST \
--url https://api.link-ai.tech/v1/chat/memory/completions \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"app_code": "",
"question": "这张图中是什么?",
"session_id": "123e4567-e89b-12d3-a456-426614174000",
"image_url": "https://cdn.link-ai.tech/doc/vision-model-config.jpg"
}'
注意:
- 在
YOUR_API_KEY
处填入你创建的API Key
,将app_code
中的值替换为你创建的应用或工作流的code。 - 图片url需填写公开网络可访问的图片地址