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 翻译结果。

评论一下吧
取消回复