Langflow + Lark MCP 极速验证与 18087 平台融合开发文档

本指南基于您已成功部署的 Langflow 运行实例(运行于 http://113.249.114.125:18085/,内部容器/服务端口为 7860,使用 PostgreSQL 实例 langflow_dxmnxr 作为底层存储),详述如何将其与飞书 Lark OpenAPI MCP 服务以及 18087 管理平台进行深度集成,实现“对话建表 ──> Webhook 遥测 ──> P2L 逆向翻译 ──> DPO 偏好对齐反馈闭环”的全链路工程落地。

一、 系统全景拓扑与数据流(System Topology)

整个架构分为三层,数据在逻辑层(概念设计)与物理层(平台执行)之间进行双向循环:

┌────────────────────────────────────────────────────────────────────────┐
│                        1. 18087 管理平台 (控制呈现层)                     │
│  ┌───────────────────────┐   ┌──────────────────┐   ┌───────────────┐  │
│  │   Iframe 嵌入画布视图   │ ↔ │ 飞书凭证与代理日志 │ ↔ │ 偏好日志(DPO) │  │
│  └───────────────────────┘   └──────────────────┘   └───────────────┘  │
└────────────────────────────────────┬───────────────────────────────────┘
                                     │ (API 触发 / 凭证注入 / 事件监听)
                                     ▼
┌────────────────────────────────────────────────────────────────────────┐
│                        2. Langflow 可视化编排层 (逻辑层)                  │
│  ┌──────────────────────────────────────────────────────────────────┐  │
│  │ Chat Input ──> System Prompt ──> Agent Component ──> Chat Output │  │
│  │                                        │                         │  │
│  │ (通过内置 PostgreSQL 记录 Session 状态) │ (动态 Tweaks 注入)      │  │
│  └────────────────────────────────────────┼─────────────────────────┘  │
└───────────────────────────────────────────┼────────────────────────────┘
                                            │ (标准 JSON-RPC SSE 协议)
                                            ▼
┌────────────────────────────────────────────────────────────────────────┐
│                      3. Lark OpenAPI MCP 物理执行端                    │
│  ┌──────────────────────────────────────────────────────────────────┐  │
│  │  飞书官方 @larksuiteoapi/lark-mcp 运行实例                         │  │
│  │  - 开放 20+ 个核心 API 工具组 (多维表格、云文档、消息流)           │  │
│  └─────────────────────────────────┬────────────────────────────────┘  │
└────────────────────────────────────┼───────────────────────────────────┘
                                     │
                                     ▼ (飞书物理变更 Webhook 触发)
┌────────────────────────────────────────────────────────────────────────┐
│                  4. 18087 遥测中台 (P2L 逆向翻译 & 闭环反馈)              │
│  - 监听 `bitable.table.field.updated_v1` 事件                          │
│  - 计算 AST Diff:将飞书物理类型(如Type:2)翻译为逻辑类型(如DECIMAL)  │
│  - 将 (Rejected: 初始生成, Chosen: 用户微调) 写入 DPO 数据集,优化 Prompt│
└────────────────────────────────────────────────────────────────────────┘

二、 基础设施状态与连接准备

1. 本地 Langflow 环境确认(基于您的部署参数)

Web 访问地址: http://113.249.114.125:18085/

HTTP 内部端口: 7860 (容器/数据库映射服务端口)

状态持久化: 已绑定 PostgreSQL 数据库。

DB Name: langflow_dxmnxr

DB User: langflow_Tec2ti 这意味着用户的会话 Session、Flow 拓扑关系、自定义组件状态在系统重启后均不会丢失,18087 平台能够直接通过数据库底层调取历史构建日志。

2. 飞书开放平台应用权限配置

在 飞书开放平台 创建自建应用,并确保开通以下权限范围(Scope):

bitable:app (获取、写入多维表格信息)

bitable:table (进行数据表 DDL 操作、增删改字段)

bitable:field (读取和修改字段物理属性)

im:message (用于 Agent 向用户发送即时卡片通知,可选)

三、 Lark OpenAPI MCP Server 部署指引

飞书官方提供的 lark-mcp 可以通过 SSE(Server-Sent Events) 协议向宿主机外的 Langflow 暴露安全的网络调用端点。

1. 启动 MCP SSE 服务

在 18087 平台的宿主机或容器内,通过 PM2 或 systemd 守护进程运行以下 Node.js 启动指令:

# 使用 SSE 模式启动,并绑定至 0.0.0.0 的 3000 端口

npx -y @larksuiteoapi/lark-mcp mcp \

-a "cli_your_app_id_xxxxxx" \

-s "your_app_secret_yyyyyy" \

--mode sse \

--host 0.0.0.0 \

--port 3000 \

--token-mode tenant_access_token

2. 验证 MCP 连通性

在命令行或浏览器请求 MCP 状态,确保能返回合规的 SSE 握手信息:

curl -i http://localhost:3000/sse

预期返回 HTTP/1.1 200 OK 且内容类型为 text/event-stream。

四、 Langflow 画布可视化编排(精细化步骤)

在您已部署的 http://113.249.114.125:18085/ 后台,按以下指引配置:

1. 注册外部 MCP Tools

点击 Langflow 右上角 Avatar(头像) → Settings → MCP Servers。

点击 Add MCP Server。

Name: Feishu-Lark-MCP

Connection Mode: HTTP/SSE

URL: http://<Lark-MCP-宿主机IP>:3000/sse (若 Lark MCP 部署在同台机器,可填实际局域网/公网 IP)

保存。Langflow 将自动拉取飞书提供的所有 OpenAPI。此时在左侧组件库的 Tools 分类下会多出飞书专有的 API 节点组。

2. 构建 Canvas 拓扑连线

在空白画布上拖入并连接以下核心组件:

 [Chat Input] ──────> [ Prompt Template (System Prompt) ]
                                    │
                                    ▼
 [Chat Output] <───── [ Agent (Claude 3.5 / GPT-4o) ] ◄──── [ Feishu-Lark-MCP (Toolset) ]

Agent Component 配置:

Model: 选择对 Tool-calling(工具调用)支持度极佳的模型,如 claude-3-5-sonnet 或 gpt-4o。

System Prompt 设定:

你是一个企业级应用架构师 Agent。你的唯一任务是根据用户的需求,在飞书多维表格中建立对应的逻辑业务表。

【执行标准流程】:

1. 接收需求后,首先调用 `bitable.v1.app.create` 接口,创建一个新的飞书多维表格(App),并记录返回的 `app_token`。

2. 调用 `bitable.v1.app.table.create` 接口,在对应的 `app_token` 下创建物理表。

3. 针对提取出的每一个业务属性,调用 `bitable.v1.app.table.field.create` 创建对应的物理字段。

4. 禁止一次性将所有字段设为 STRING 物理类型。根据属性特征合理选择数字、日期、单选等物理类型。

五、 18087 平台深度集成与反向遥测闭环实现

http://113.249.102.8:18087 是您的控制中台。我们将在此平台上实现 Iframe 嵌入、事件监听(Webhook) 与 DPO 反馈数据集生成。

1. 18087 前端:双窗协同与控制面板

在 18087 平台的前端页面,采用左右分栏设计:

左侧: 飞书 App 绑定状态大盘、运行日志区。

右侧: 嵌入您已部署的 Langflow 画布,便于随时无缝微调。

<!-- 18087 前端 Iframe 集成代码 -->

<div class="flex h-screen w-full">

<div class="w-1/3 p-4 bg-gray-50 border-r border-gray-200 overflow-y-auto">

<h3 class="text-lg font-bold mb-4">飞书 Agent 连接控制台</h3>

<!-- 凭证管理表单 -->

<div class="mb-4">

<label class="block text-sm font-medium text-gray-700">飞书 App ID</label>

<input type="text" id="appId" class="mt-1 block w-full rounded-md border-gray-300 shadow-sm" value="cli_xxxx">

</div>

<button onclick="saveAndRestartMcp()" class="px-4 py-2 bg-blue-600 text-white rounded">

同步凭证并重启 MCP Server

</button>

</div>

<div class="w-2/3 h-full">

<!-- Iframe 嵌入已部署在 18085 端口的 Langflow 实例 -->

<iframe

src="[http://113.249.114.125:18085/flow/your-flow-uuid-here?embed=true](http://113.249.114.125:18085/flow/your-flow-uuid-here?embed=true)"

class="w-full h-full border-none"

></iframe>

</div>

</div>

2. 18087 后端:开发 P2L 逆向翻译网关

当用户在飞书界面微调表单(例如:用户在多维表格中把 AI 生成的“请假天数”从 文本 物理类型改为了 数字)时,飞书将向 18087 发送 Webhook。

我们在 18087 后端编写 Python 处理器,捕获该动作并逆向翻译为逻辑修改意图(P2L):

# 18087 平台后端核心服务:telemetry_gateway.py
import os
import json
from flask import Flask, request, jsonify

app = Flask(__name__)

# 模拟 18087 的 DPO 偏好内存/数据库存储
DPO_PREFERENCE_STORE = []

# 飞书物理类型映射表 (Physical -> Logical)
FEISHU_TYPE_MAP = {
    1: "TEXT",        # 文本
    2: "DECIMAL",     # 数字
    3: "SELECT",      # 单选
    4: "MULTI_SELECT",# 多选
    5: "DATE",        # 日期
    11: "USER",       # 成员

}

@app.route("/api/telemetry/feishu", methods=["POST"])

def feishu_webhook_handler():

"""

监听飞书多维表格物理变更事件

事件名:bitable.table.field.updated_v1

"""

data = request.json

# 飞书开放平台安全验证

if data.get("type") == "url_verification":

return jsonify({"challenge": data.get("challenge")})

header = data.get("header", {})

event_type = header.get("event_type")

if event_type == "bitable.table.field.updated_v1":

event_payload = data.get("event", {})

field_id = event_payload.get("field_id")

field_name = event_payload.get("field_name")

new_type = event_payload.get("new_type") # 飞书物理类型数字

# 1. 逆向翻译 (Physical -> Logical)
        logical_type = FEISHU_TYPE_MAP.get(new_type, "UNKNOWN")

print(f"📡 检测到用户物理微调: 字段【{field_name}】被修改为物理类型 {new_type} -> 逆向翻译为逻辑类型【{logical_type}】")

# 2. 记录 DPO 偏好对齐日志
        # Rejected (AI生成的初版,假设默认为文本 STRING) -> Chosen (用户手工纠偏后的真实逻辑类型)
        dpo_item = {

"prompt": f"生成应用中关于‘{field_name}’的字段定义",

"rejected": "{\"type\": \"STRING\", \"description\": \"默认文本输入\"}",

"chosen": f"{{\'type\': \'{logical_type}\', \'description\': \'用户界面微调对齐\'}}",

"field_name": field_name

}

DPO_PREFERENCE_STORE.append(dpo_item)

# 3. 反向对齐:动态刷新 Langflow Prompt
        sync_to_langflow_tweaks(field_name, logical_type)

return jsonify({"status": "success"})

def sync_to_langflow_tweaks(field_name, logical_type):

"""

更新动态变量,让 Langflow 下一次生成时,能立刻避开此次踩过的“坑”

"""

# 写入 Langflow Global Variable 或是本地 RAG 知识缓存
    print(f"🧠 已同步自适应经验至 Langflow Brain: 以后涉及‘{field_name}’时强制使用‘{logical_type}’。")

if __name__ == "__main__":

# 启动 18087 遥测中台

app.run(host="0.0.0.0", port=18087)

3. 构建 ML 闭环数据飞轮(DPO 偏好导出面板)

在 18087 平台,增加一个 “模型自演进大盘”,将 DPO_PREFERENCE_STORE 渲染为如下界面:

┌────────────────────────────────────────────────────────────────────────┐
│                        18087 AI 偏好对齐中心 (DPO Console)               │
├────────────────────────────────────────────────────────────────────────┤
│ 字段名称: [ 报销金额 ]                                                 │
│  ├── ❌ AI 原生生成 (Rejected):  { "type": "STRING" }                    │
│  └──  用户纠偏结果 (Chosen):    { "type": "DECIMAL" }                   │
│                                                                        │
│ 字段名称: [ 请假天数 ]                                                 │
│  ├── ❌ AI 原生生成 (Rejected):  { "type": "STRING" }                    │
│  └──  用户纠偏结果 (Chosen):    { "type": "DECIMAL" }                   │
├────────────────────────────────────────────────────────────────────────┤
│ [ 导出标准 DPO 语料 JSONL ]             [ 一键微调基座 LLM (Llama-Factory)] │
└────────────────────────────────────────────────────────────────────────┘

这个导出的标准 JSONL 数据集,可以直接无缝导入 HuggingFace TRL 或 LLaMA-Factory 中,实现底座大模型的偏好微调(DPO/RLHF)。伴随用户使用次数的增多,系统原生生成“报销金额”为 DECIMAL 的概率将无限趋近于 100%。

六、 调试与发布核对表(Production Checklists)

部署完本系统后,请依次核对以下三项,确保闭环完全畅通:

☐ 数据库双向持久化: 在 Langflow 中新建一个画布,在 PostgreSQL 终端中执行 SELECT * FROM flow;,确认流程图 JSON 已正确入库 langflow_dxmnxr。并且确保 Web 访问正常:http://113.249.114.125:18085/。

☐ MCP SSE 接口联通: Langflow Settings 里的 Feishu-Lark-MCP 显示为绿色 Connected 状态,Agent 在对话时能够拉起 bitable 开头的工具。

☐ 遥测事件回弹: 当在飞书多维表格中修改列属性时,18087 的端点 /api/telemetry/feishu 能够在控制台中打印出 UPDATE_PROPERTY 和对应的 AST Diff 翻译结果。