跳到主要内容

OpenAI 响应 API

Langflow 包含一个与 OpenAI Responses API 兼容的端点。 它位于 POST /api/v1/responses

此端点允许您以极少的代码更改使用现有的 OpenAI 客户端库。 您只需要将 model 名称(例如 gpt-4)替换为您的 flow_id。 您可以在 API 访问 面板 的代码片段中或在工作流的 URL 中找到工作流 ID (Flow ID)。

前提条件

为了与 Langflow 的 OpenAI 响应 API 端点兼容,您的工作流和请求必须遵守以下要求:

  • 聊天输入 (Chat Input):您的工作流必须包含 Chat Input 组件。 不含此组件的工作流在传递给此端点时会返回错误。 组件类型 ChatInputChat Input 均被识别为聊天输入。
  • 工具 (Tools):尚不支持 tools 参数,如果提供则返回错误。
  • 模型名称 (Model Names):在您的请求中,model 字段必须包含有效的工作流 ID 或端点名称。
  • 身份验证:所有请求都需要在 x-api-key 标头中传递 API 密钥。 欲了解更多信息,请参阅 API 密钥和身份验证

OpenAI 客户端库的其他配置

此端点与 OpenAI 的 API 兼容,但在使用 OpenAI 客户端库时需要特殊配置。 Langflow 使用 x-api-key 标头进行身份验证,而 OpenAI 使用 Authorization: Bearer 标头。 使用 OpenAI 客户端库向 Langflow 发送请求时,必须配置自定义标头并包含 api_key 配置。 api_key 参数可以设置任何值,例如客户端示例中的 "dummy-api-key",因为实际的身份验证是通过 default_headers 配置处理的。

在以下示例中,请将 LANGFLOW_SERVER_URLLANGFLOW_API_KEYFLOW_ID 替换为您部署中的实际值。


_14
from openai import OpenAI
_14
_14
client = OpenAI(
_14
base_url="LANGFLOW_SERVER_URL/api/v1/",
_14
default_headers={"x-api-key": "LANGFLOW_API_KEY"},
_14
api_key="dummy-api-key" # OpenAI SDK 要求提供,但 Langflow 不使用
_14
)
_14
_14
response = client.responses.create(
_14
model="FLOW_ID",
_14
input="每个月的第二个星期三都会举行一次活动。2026 年的活动日期是哪些?",
_14
)
_14
_14
print(response.output_text)

响应示例

_14
以下是 2026 年每个月第二个星期三的活动日期:
_14
- 2026年1月14日
_14
- 2026年2月11日
_14
- 2026年3月11日
_14
- 2026年4月8日
_14
- 2026年5月13日
_14
- 2026年6月10日
_14
- 2026年7月8日
_14
- 2026年8月12日
_14
- 2026年9月9日
_14
- 2026年10月14日
_14
- 2026年11月11日
_14
- 2026年12月9日
_14
如果您需要其他格式或想要可下载的日历,请告诉我!

请求示例


_10
curl -X POST \
_10
"$LANGFLOW_SERVER_URL/api/v1/responses" \
_10
-H "x-api-key: $LANGFLOW_API_KEY" \
_10
-H "Content-Type: application/json" \
_10
-d '{
_10
"model": "$YOUR_FLOW_ID",
_10
"input": "你好,最近怎么样?",
_10
"stream": false
_10
}'

请求头 (Headers)

标头必填描述示例
x-api-key用于身份验证的 Langflow API 密钥"sk-..."
Content-Type指定 JSON 格式"application/json"
X-LANGFLOW-GLOBAL-VAR-*工作流的全级变量"X-LANGFLOW-GLOBAL-VAR-API_KEY: sk-..." 更多信息,请参阅在请求头中向工作流传递全局变量

请求体 (Request body)

字段类型必填默认值描述
modelstring-要执行的工作流 ID 或端点名称。
inputstring-要处理的输入文本。
streambooleanfalse是否流式传输响应。
backgroundbooleanfalse是否在后台处理。
toolslist[Any]null目前尚不支持工具。
previous_response_idstringnull上一次响应的 ID,用于继续对话。更多信息,请参阅使用响应 ID 和会话 ID 继续对话
includelist[string]null要包含的其他响应数据,例如 ['tool_call.results']。更多信息,请参阅检索工具调用结果

响应示例


_35
{
_35
"id": "e5e8ef8a-7efd-4090-a110-6aca082bceb7",
_35
"object": "response",
_35
"created_at": 1756837941,
_35
"status": "completed",
_35
"model": "ced2ec91-f325-4bf0-8754-f3198c2b1563",
_35
"output": [
_35
{
_35
"type": "message",
_35
"id": "msg_e5e8ef8a-7efd-4090-a110-6aca082bceb7",
_35
"status": "completed",
_35
"role": "assistant",
_35
"content": [
_35
{
_35
"type": "output_text",
_35
"text": "你好!我在这里,随时准备提供帮助。今天我能为你做些什么?",
_35
"annotations": []
_35
}
_35
]
_35
}
_35
],
_35
"parallel_tool_calls": true,
_35
"previous_response_id": null,
_35
"reasoning": {"effort": null, "summary": null},
_35
"store": true,
_35
"temperature": 1.0,
_35
"text": {"format": {"type": "text"}},
_35
"tool_choice": "auto",
_35
"tools": [],
_35
"top_p": 1.0,
_35
"truncation": "disabled",
_35
"usage": null,
_35
"user": null,
_35
"metadata": {}
_35
}

响应体 (Response body)

响应包含 Langflow 动态设置的字段和使用 OpenAI 兼容默认值的字段。

上面显示的 OpenAI 兼容默认值目前是固定的,无法通过请求修改。 包含它们是为了保持 API 兼容性并提供一致的响应格式。

对于您的请求,您只需设置动态字段。 此处记录默认值是为了完整性并展示完整的响应结构。

由 Langflow 动态设置的字段:

字段类型描述
idstring唯一的响应标识符。
created_atint响应创建的 Unix 时间戳。
modelstring执行的工作流 ID。
outputlist[dict]输出项数组(消息、工具调用等)。
previous_response_idstring如果继续对话,则是上一个响应的 ID。
具有 OpenAI 兼容默认值的字段
字段类型默认值描述
objectstring"response"始终为 "response"
statusstring"completed"响应状态:"completed""in_progress""failed"
errordictnull错误详情(如果有)。
incomplete_detailsdictnull未完成响应的详情(如果有)。
instructionsstringnull响应指令(如果有)。
max_output_tokensintnull最大输出 token 数(如果有)。
parallel_tool_callsbooleantrue是否启用并行工具调用。
reasoningdict{"effort": null, "summary": null}包含努力程度和摘要的推理信息。
storebooleantrue响应是否存储。
temperaturefloat1.0温度设置。
textdict{"format": {"type": "text"}}文本格式配置。
tool_choicestring"auto"工具选择设置。
toolslist[dict][]可用工具。
top_pfloat1.0Top-p 设置。
truncationstring"disabled"截断设置。
usagedictnull使用情况统计(如果有)。
userstringnull用户标识符(如果有)。
metadatadict{}其他元数据。

流式请求示例

当您在请求中设置 "stream": true 时,API 会返回一个流,其中每个块包含响应生成时的一小部分。这提供了实时体验,用户可以逐字看到 AI 的输出,类似于 ChatGPT 的打字效果。


_10
curl -X POST \
_10
"$LANGFLOW_SERVER_URL/api/v1/responses" \
_10
-H "x-api-key: $LANGFLOW_API_KEY" \
_10
-H "Content-Type: application/json" \
_10
-d '{
_10
"model": "$FLOW_ID",
_10
"input": "给我讲一个关于机器人的故事",
_10
"stream": true
_10
}'

结果

_10
{
_10
"id": "f7fcea36-f128-41c4-9ac1-e683137375d5",
_10
"object": "response.chunk",
_10
"created": 1756838094,
_10
"model": "ced2ec91-f325-4bf0-8754-f3198c2b1563",
_10
"delta": {
_10
"content": "Once"
_10
},
_10
"status": null
_10
}

流式响应体

字段类型描述
idstring唯一的响应标识符。
objectstring始终为 "response.chunk"
createdint块创建的 Unix 时间戳。
modelstring执行的工作流 ID。
deltadict新的内容块。
statusstring响应状态:"completed""in_progress""failed"(可选)。

流将继续,直到出现带有 "status": "completed" 的最终块,表示响应已完成。

最终完成块

_10
{
_10
"id": "f7fcea36-f128-41c4-9ac1-e683137375d5",
_10
"object": "response.chunk",
_10
"created": 1756838094,
_10
"model": "ced2ec91-f325-4bf0-8754-f3198c2b1563",
_10
"delta": {},
_10
"status": "completed"
_10
}

使用响应 ID 和会话 ID 继续对话

对话连续性允许您在多个 API 调用之间保持上下文,从而实现工作流的多轮对话。这对于构建用户可以进行持续对话的聊天应用程序至关重要。

当您发起请求时,API 会返回一个带有 id 字段的响应。您可以在下一个请求中将此 id 用作 previous_response_id,以从上次中断的地方继续对话。

第一条消息:


_10
curl -X POST \
_10
"http://$LANGFLOW_SERVER_URL/api/v1/responses" \
_10
-H "x-api-key: $LANGFLOW_API_KEY" \
_10
-H "Content-Type: application/json" \
_10
-d '{
_10
"model": "$FLOW_ID",
_10
"input": "你好,我叫 Alice"
_10
}'

结果

_23
{
_23
"id": "c45f4ac8-772b-4675-8551-c560b1afd590",
_23
"object": "response",
_23
"created_at": 1756839042,
_23
"status": "completed",
_23
"model": "ced2ec91-f325-4bf0-8754-f3198c2b1563",
_23
"output": [
_23
{
_23
"type": "message",
_23
"id": "msg_c45f4ac8-772b-4675-8551-c560b1afd590",
_23
"status": "completed",
_23
"role": "assistant",
_23
"content": [
_23
{
_23
"type": "output_text",
_23
"text": "你好,Alice!今天我能为你做些什么?",
_23
"annotations": []
_23
}
_23
]
_23
}
_23
],
_23
"previous_response_id": null
_23
}

后续消息:


_10
curl -X POST \
_10
"http://$LANGFLOW_SERVER_URL/api/v1/responses" \
_10
-H "x-api-key: $LANGFLOW_API_KEY" \
_10
-H "Content-Type: application/json" \
_10
-d '{
_10
"model": "ced2ec91-f325-4bf0-8754-f3198c2b1563",
_10
"input": "我叫什么名字?",
_10
"previous_response_id": "c45f4ac8-772b-4675-8551-c560b1afd590"
_10
}'

结果

_23
{
_23
"id": "c45f4ac8-772b-4675-8551-c560b1afd590",
_23
"object": "response",
_23
"created_at": 1756839043,
_23
"status": "completed",
_23
"model": "ced2ec91-f325-4bf0-8754-f3198c2b1563",
_23
"output": [
_23
{
_23
"type": "message",
_23
"id": "msg_c45f4ac8-772b-4675-8551-c560b1afd590",
_23
"status": "completed",
_23
"role": "assistant",
_23
"content": [
_23
{
_23
"type": "output_text",
_23
"text": "你的名字是 Alice。今天我能为你做些什么?",
_23
"annotations": []
_23
}
_23
]
_23
}
_23
],
_23
"previous_response_id": "c45f4ac8-772b-4675-8551-c560b1afd590"
_23
}

或者,您可以为 previous_response_id 使用您自己的会话 ID 值:


_10
curl -X POST \
_10
"http://$LANGFLOW_SERVER_URL/api/v1/responses" \
_10
-H "x-api-key: $LANGFLOW_API_KEY" \
_10
-H "Content-Type: application/json" \
_10
-d '{
_10
"model": "ced2ec91-f325-4bf0-8754-f3198c2b1563",
_10
"input": "我叫什么名字?",
_10
"previous_response_id": "session-alice-1756839048"
_10
}'

结果

此示例使用与其他 previous_response_id 示例相同的工作流,但在指定的会话中尚未向 LLM 介绍 Alice:


_23
{
_23
"id": "session-alice-1756839048",
_23
"object": "response",
_23
"created_at": 1756839048,
_23
"status": "completed",
_23
"model": "ced2ec91-f325-4bf0-8754-f3198c2b1563",
_23
"output": [
_23
{
_23
"type": "message",
_23
"id": "msg_session-alice-1756839048",
_23
"status": "completed",
_23
"role": "assistant",
_23
"content": [
_23
{
_23
"type": "output_text",
_23
"text": "除非你告诉我,否则我无法知道你的名字。如果你愿意,可以分享你的名字,我会在这段对话中记住它!",
_23
"annotations": []
_23
}
_23
]
_23
}
_23
],
_23
"previous_response_id": "session-alice-1756839048"
_23
}

检索工具调用结果

当您向 /api/v1/responses 端点发送请求以运行包含工具或函数调用的工作流时,可以通过在请求有效负载中添加 "include": ["tool_call.results"] 来检索原始工具执行详情。

如果不包含 include 参数,工具调用将返回基本的函数调用信息,但不会返回原始工具结果。 例如:


_10
{
_10
"id": "fc_1",
_10
"type": "function_call",
_10
"status": "completed",
_10
"name": "evaluate_expression",
_10
"arguments": "{\"expression\": \"15*23\"}"
_10
},

要获取每次工具执行的原始 results,请在请求有效负载中添加 include: ["tool_call.results"]


_10
curl -X POST \
_10
"http://$LANGFLOW_SERVER_URL/api/v1/responses" \
_10
-H "Content-Type: application/json" \
_10
-H "x-api-key: $LANGFLOW_API_KEY" \
_10
-d '{
_10
"model": "FLOW_ID",
_10
"input": "计算 23 * 15 并告诉我结果",
_10
"stream": false,
_10
"include": ["tool_call.results"]
_10
}'

响应现在包含工具调用的结果。 例如:


_10
{
_10
"id": "evaluate_expression_1",
_10
"type": "tool_call",
_10
"tool_name": "evaluate_expression",
_10
"queries": ["15*23"],
_10
"results": {"result": "345"}
_10
}

结果

_58
{
_58
"id": "a6e5511e-71f8-457a-88d2-7d8c6ea34e36",
_58
"object": "response",
_58
"created_at": 1756835379,
_58
"status": "completed",
_58
"error": null,
_58
"incomplete_details": null,
_58
"instructions": null,
_58
"max_output_tokens": null,
_58
"model": "ced2ec91-f325-4bf0-8754-f3198c2b1563",
_58
"output": [
_58
{
_58
"id": "evaluate_expression_1",
_58
"queries": [
_58
"15*23"
_58
],
_58
"status": "completed",
_58
"tool_name": "evaluate_expression",
_58
"type": "tool_call",
_58
"results": {
_58
"result": "345"
_58
}
_58
},
_58
{
_58
"type": "message",
_58
"id": "msg_a6e5511e-71f8-457a-88d2-7d8c6ea34e36",
_58
"status": "completed",
_58
"role": "assistant",
_58
"content": [
_58
{
_58
"type": "output_text",
_58
"text": "23 * 15 的结果是 345。",
_58
"annotations": []
_58
}
_58
]
_58
}
_58
],
_58
"parallel_tool_calls": true,
_58
"previous_response_id": null,
_58
"reasoning": {
_58
"effort": null,
_58
"summary": null
_58
},
_58
"store": true,
_58
"temperature": 1.0,
_58
"text": {
_58
"format": {
_58
"type": "text"
_58
}
_58
},
_58
"tool_choice": "auto",
_58
"tools": [],
_58
"top_p": 1.0,
_58
"truncation": "disabled",
_58
"usage": null,
_58
"user": null,
_58
"metadata": {}
_58
}

在请求头中向工作流传递全局变量

全局变量允许您向工作流传递动态值,这些值可供该工作流运行中的组件使用。 这对于传递 API 密钥、用户 ID 或任何其他可能在请求之间更改的配置非常有用。

/responses 端点接受格式为 X-LANGFLOW-GLOBAL-VAR-{VARIABLE_NAME} 的自定义 HTTP 标头作为全局变量。 变量仅在此特定请求执行期间可用,不会持久保存。 变量名称会自动转换为大写。

此示例演示了传递 OPENAI_API_KEY 变量(Langflow 会自动从环境变量中检测到的变量),以及两个自定义变量 USER_IDENVIRONMENT。这些变量不必在 Langflow 的全局变量部分创建 —— 您可以以 X-LANGFLOW-GLOBAL-VAR-{VARIABLE_NAME} 标头格式传递任何变量名称。


_11
curl -X POST \
_11
"$LANGFLOW_SERVER_URL/api/v1/responses" \
_11
-H "x-api-key: $LANGFLOW_API_KEY" \
_11
-H "Content-Type: application/json" \
_11
-H "X-LANGFLOW-GLOBAL-VAR-OPENAI_API_KEY: sk-..." \
_11
-H "X-LANGFLOW-GLOBAL-VAR-USER_ID: user123" \
_11
-H "X-LANGFLOW-GLOBAL-VAR-ENVIRONMENT: production" \
_11
-d '{
_11
"model": "your-flow-id",
_11
"input": "你好"
_11
}'

结果

_23
{
_23
"id": "4a4d2f24-bb45-4a55-a499-0191305264be",
_23
"object": "response",
_23
"created_at": 1756839935,
_23
"status": "completed",
_23
"model": "ced2ec91-f325-4bf0-8754-f3198c2b1563",
_23
"output": [
_23
{
_23
"type": "message",
_23
"id": "msg_4a4d2f24-bb45-4a55-a499-0191305264be",
_23
"status": "completed",
_23
"role": "assistant",
_23
"content": [
_23
{
_23
"type": "output_text",
_23
"text": "你好!今天我能为你做些什么?",
_23
"annotations": []
_23
}
_23
]
_23
}
_23
],
_23
"previous_response_id": null
_23
}

无论数据库中是否存在变量,通过 X-LANGFLOW-GLOBAL-VAR-{VARIABLE_NAME} 传递的变量始终可用于您的工作流。

如果您的工作流组件引用了请求头或 Langflow 数据库中未提供的变量,则默认情况下工作流会失败。 为了避免这种情况,您可以将 FALLBACK_TO_ENV_VARS 环境变量设置为 true,这允许工作流在未另行指定的情况下使用 .env 文件中的值。

在上面的示例中,如果请求头中未提供 OPENAI_API_KEY,它将回退到数据库变量。 如果启用了 FALLBACK_TO_ENV_VARSUSER_IDENVIRONMENT 将回退到环境变量。 否则,工作流失败。

Search