LangGraph 实战:基于外部数据库条件触发工作流执行

摘要:LangGraph 作为基于图结构的工作流编排框架,其"状态驱动"特性使其能够灵活适配外部数据源触发场景。本文聚焦"外部数据库查询结果符合条件时触发工作流"这一核心实战需求,系统阐述实现原理、分步落地流程、可直接复用的完整代码示例,并针对生产环境的稳定性、可扩展性需求提供进阶优化方案,帮助开发者快速掌握 LangGraph 与外部数据库的集成技巧,高效实现自动化、智能化的工作流触发与执行。

引言

在 LangGraph 实际开发中,"基于外部数据触发工作流"是高频实战场景,典型如数据库核心业务指标达标、新数据入库、查询结果匹配业务规则时,需自动启动工作流以实现业务闭环。本文以 MySQL、PostgreSQL 等主流数据库为适配对象,按"核心原理、分步实现、完整示例、进阶优化"四大模块,系统性拆解实现路径,所有代码可直接复用,兼顾入门友好性与生产实用性,助力各类开发者快速落地相关需求。LangGraph 的核心优势的在于通过「状态、节点、边」三大组件构建灵活图状工作流,其触发逻辑本质为"状态驱动"------外部数据库查询结果作为核心状态数据,经条件边校验后,按需触发后续业务流程或兜底逻辑。

一、核心原理(关键认知,必看)

要实现数据库条件触发工作流,需首先明确 LangGraph 三大核心组件在该场景下的具体作用,这是后续开发的基础,可有效规避"状态更新异常""路由跳转错误"等常见问题:

  1. 状态(State):作为整个工作流的"单一事实来源",主要用于存储数据库查询结果、条件判断结果、错误信息等关键数据,为所有节点和边提供统一的数据调用基准。为保障数据一致性与可追溯性,通常采用 TypedDict 定义结构化状态,明确每个字段的数据类型,避免运行时出现键名错误或类型不匹配问题。
  2. 节点(Nodes):作为工作流的核心执行单元,对应具体的业务逻辑函数。在本场景中,需重点实现4个关键节点,各节点职责清晰、协同联动:
  3. 数据库查询节点:负责建立与外部数据库的连接、执行预设查询语句,将查询结果按照"不可变更新"原则更新至状态(不直接修改原状态,仅返回状态更新字典);
  4. 条件判断节点:读取状态中的数据库查询结果,校验其是否符合预设触发条件,输出"符合"或"不符合"的标识,为边的路由决策提供依据(该节点可合并至边的路由函数中,拆分实现更便于后期维护与逻辑复用);
  5. 目标工作流节点:当条件校验通过时,执行核心业务逻辑,如数据同步、接口调用、消息推送、模型调用等;
  6. 异常/重试节点:当条件未满足或数据库查询失败时,执行兜底逻辑,包括重试查询、流程终止、异常告警等,提升工作流的健壮性与容错能力。
  7. 边(Edges):用于控制工作流的路由方向,核心采用「条件边(Conditional Edges)」------根据状态中存储的数据库查询结果或条件判断结果,动态决策下一步执行逻辑:若符合触发条件,则跳转至目标工作流节点;若未符合,则执行重试、终止或其他分支逻辑。

补充说明:LangGraph 的工作流执行基于"超步(superstep)"驱动机制,节点接收状态更新后变为活跃状态并执行对应逻辑,边的路由规则决定下一个超步的执行节点,直至所有节点变为非活跃状态,整个工作流终止。数据库条件触发的核心逻辑,就是通过"查询节点更新状态→条件边校验状态→触发后续节点执行"的完整链路,实现工作流的按需启动与推进。

二、实现步骤(通用流程,适配所有数据库)

本文以"查询 MySQL 数据库中监控表的指定数值,当数值大于预设阈值(如100)时,触发后续核心业务工作流"为例,分5步完成实现。对于 PostgreSQL、SQLite 等其他主流数据库,仅需替换数据库连接逻辑,即可直接复用整套实现方案。

步骤1:环境准备(安装依赖)

首先安装所需依赖库,包括 LangGraph 核心框架、数据库连接库(MySQL 选用 pymysql)及环境变量管理库(避免硬编码敏感信息,提升系统安全性),执行如下命令:

bash 复制代码
pip install langgraph pymysql python-dotenv

步骤2:定义工作流状态(State)

采用 TypedDict 定义结构化工作流状态,明确需存储的核心数据字段,确保所有节点遵循统一的数据契约,避免后续开发中出现数据混乱。本次定义3个核心字段,后续可根据业务需求扩展:

python 复制代码
from typing_extensions import TypedDict
from typing import Optional

# 定义工作流状态:存储数据库查询结果、条件判断结果、错误信息
class WorkflowState(TypedDict):
    db_query_result: Optional[float]  # 存储数据库查询到的数值结果
    is_condition_met: Optional[bool]  # 标记查询结果是否符合触发条件
    error_msg: Optional[str]          # 存储可能的错误信息(如数据库连接失败)

步骤3:实现核心节点(核心开发环节)

节点本质是接收当前状态、执行具体逻辑并返回状态更新字典的 Python 函数,需严格遵循 LangGraph 的"不可变更新"原则(不直接修改原状态)。以下逐一实现4个核心节点:

节点1:数据库查询节点(query_database)

该节点的核心职责是建立与外部数据库的连接、执行查询语句,处理连接异常、查询异常等场景,并将查询结果更新至工作流状态。需重点注意:数据库账号密码需通过环境变量管理,查询完成后必须关闭数据库连接,避免资源泄露。

python 复制代码
import pymysql
from dotenv import load_dotenv
import os

# 加载环境变量(避免硬编码数据库账号密码,提升安全性)
load_dotenv()

def query_database(state: WorkflowState) -> dict:
    """
    数据库查询节点:连接外部MySQL数据库,执行查询操作,返回状态更新字典
    """
    try:
        # 1. 建立数据库连接(替换为自身数据库配置,建议通过环境变量存储)
        conn = pymysql.connect(
            host=os.getenv("DB_HOST"),
            user=os.getenv("DB_USER"),
            password=os.getenv("DB_PASSWORD"),
            database=os.getenv("DB_NAME"),
            port=int(os.getenv("DB_PORT", 3306))
        )
        cursor = conn.cursor()
        
        # 2. 执行查询语句(示例:查询监控表的目标数值,可替换为实际业务SQL)
        query_sql = "SELECT target_value FROM monitor_table WHERE id = 1"  # 自定义SQL
        cursor.execute(query_sql)
        result = cursor.fetchone()  # 获取查询结果(假设返回单个数值)
        
        # 3. 处理查询结果,更新工作流状态
        if result:
            db_value = float(result[0])  # 根据实际字段类型调整数据类型
            return {
                "db_query_result": db_value,
                "error_msg": None
            }
        else:
            return {
                "db_query_result": None,
                "error_msg": "数据库查询结果为空"
            }
    
    except Exception as e:
        # 处理异常(如数据库连接失败、SQL语法错误等),更新错误信息至状态
        return {
            "db_query_result": None,
            "error_msg": f"数据库查询失败:{str(e)}"
        }
    finally:
        # 关闭数据库连接,避免资源泄露(关键步骤,不可遗漏)
        if 'conn' in locals() and conn.open:
            conn.close()
节点2:条件判断节点(judge_condition)

该节点负责读取状态中的数据库查询结果与错误信息,校验查询结果是否符合预设触发条件。本次示例条件为"查询结果大于100",实际开发中可根据业务需求,灵活替换为数值范围、字符串匹配、多条件组合等任意校验规则。

python 复制代码
def judge_condition(state: WorkflowState) -> dict:
    """
    条件判断节点:校验数据库查询结果是否符合预设触发条件
    示例条件:查询结果 > 100(可根据业务需求灵活调整)
    """
    db_value = state["db_query_result"]
    error_msg = state["error_msg"]
    
    # 若存在错误(如查询失败、结果为空),直接标记条件未满足
    if error_msg or db_value is None:
        return {"is_condition_met": False}
    
    # 自定义触发条件(核心逻辑,建议从配置文件读取阈值,便于后期调整)
    trigger_threshold = 100  # 触发阈值
    is_met = db_value > trigger_threshold
    
    # 返回状态更新(仅更新条件判断结果)
    return {"is_condition_met": is_met}
节点3:目标工作流节点(execute_workflow)

当条件校验通过时,该节点将执行核心业务逻辑。本次仅提供日志输出示例,实际开发中可灵活替换为数据同步、接口调用、消息推送、大模型调用等任意业务场景的实现逻辑。

python 复制代码
def execute_workflow(state: WorkflowState) -> dict:
    """
    目标工作流节点:条件满足时执行的核心业务逻辑
    """
    db_value = state["db_query_result"]
    print(f"✅ 数据库查询结果 {db_value} 符合触发条件,启动核心工作流...")
    # 此处替换为实际业务逻辑(示例:数据同步、接口调用、消息推送等)
    # 示例:模拟数据处理与通知逻辑
    # process_data(db_value)  # 数据处理函数
    # send_notification(f"核心指标达标:{db_value},已启动工作流")  # 消息通知函数
    return {"error_msg": None}  # 无异常,返回空错误信息
节点4:异常/重试节点(handle_failure)

当条件未满足或数据库查询失败时,该节点将执行兜底处理逻辑,提升工作流的健壮性。后续进阶优化章节将详细扩展重试机制,此处先实现基础的异常提示与状态返回逻辑。

python 复制代码
def handle_failure(state: WorkflowState) -> dict:
    """
    异常/重试节点:条件未满足或查询失败时的兜底处理逻辑
    """
    error_msg = state["error_msg"]
    db_value = state["db_query_result"]
    
    if error_msg:
        print(f"❌ 数据库查询异常:{error_msg},将执行终止或重试逻辑")
        # 可扩展异常告警逻辑:send_alert(f"数据库查询异常:{error_msg}")
    else:
        print(f"❌ 数据库查询结果 {db_value} 未达到触发条件,将执行终止或重试逻辑")
    
    # 重试逻辑将在后续进阶优化章节详细实现
    return {"error_msg": error_msg}

步骤4:构建 LangGraph 工作流(绑定节点与路由)

采用 StateGraph 构建图状工作流,注册所有核心节点,通过"普通边"与"条件边"绑定节点间的路由关系,明确工作流的执行顺序与触发逻辑,最终编译生成可执行的工作流实例。

python 复制代码
from langgraph.graph import StateGraph, START, END

# 1. 初始化状态图(传入状态定义,固化数据契约)
graph = StateGraph(WorkflowState)

# 2. 注册所有核心节点(节点ID唯一,便于路由绑定与调试)
graph.add_node("query_db", query_database)          # 数据库查询节点
graph.add_node("judge_condition", judge_condition)  # 条件判断节点
graph.add_node("execute_workflow", execute_workflow)# 目标工作流节点
graph.add_node("handle_failure", handle_failure)    # 异常处理节点

# 3. 绑定路由边(核心:通过条件边实现触发逻辑)
# 3.1 入口边:从起始节点(START)进入数据库查询节点(工作流入口)
graph.add_edge(START, "query_db")

# 3.2 普通边:数据库查询完成后,固定进入条件判断节点
graph.add_edge("query_db", "judge_condition")

# 3.3 条件边:根据条件判断结果,动态跳转至目标节点或异常节点
# 路由函数:读取状态中的条件判断结果,返回目标节点ID
def condition_router(state: WorkflowState):
    return "execute_workflow" if state["is_condition_met"] else "handle_failure"

# 添加条件边(源节点:条件判断节点,路由函数:condition_router)
graph.add_conditional_edges("judge_condition", condition_router)

# 3.4 结束边:目标工作流、异常处理完成后,终止工作流
graph.add_edge("execute_workflow", END)
graph.add_edge("handle_failure", END)

# 4. 编译工作流(生成可执行实例,可配置缓存提升执行性能)
workflow = graph.compile()

步骤5:运行工作流,验证触发逻辑

运行编译后的工作流实例,LangGraph 将自动按照预设路由顺序执行各节点逻辑,根据数据库查询结果动态触发后续流程。运行完成后输出最终状态快照,便于调试与问题排查。

python 复制代码
if __name__ == "__main__":
    # 运行工作流(初始状态为空,可根据需求传入初始参数)
    result = workflow.invoke({})
    
    # 输出工作流执行结果(状态最终快照,用于调试与问题排查)
    print("\n工作流执行完成,最终状态快照:")
    print(f"数据库查询结果:{result['db_query_result']}")
    print(f"条件是否满足:{result['is_condition_met']}")
    print(f"错误信息:{result['error_msg']}")

三、完整示例(可直接运行,复制即用)

整合上述所有步骤的代码,搭配环境变量配置文件(.env),即可直接运行验证。只需替换数据库配置与查询 SQL,即可快速适配自身业务场景,大幅提升开发效率。

1. .env 环境变量配置(避免硬编码,提升安全性)

在项目根目录创建 .env 文件,填写自身数据库配置信息,示例如下:

ini 复制代码
# .env 文件内容
DB_HOST=localhost  # 数据库地址(本地环境为localhost,线上环境为服务器地址)
DB_USER=root       # 数据库用户名
DB_PASSWORD=123456 # 数据库密码
DB_NAME=test_db    # 数据库名称
DB_PORT=3306       # 数据库端口(MySQL默认端口为3306)

2. 完整代码整合

复制以下代码,保存为 langgraph_db_trigger.py 文件,运行即可验证触发逻辑:

python 复制代码
from typing_extensions import TypedDict
from typing import Optional
import pymysql
from dotenv import load_dotenv
import os
from langgraph.graph import StateGraph, START, END

# 步骤1:定义工作流状态
class WorkflowState(TypedDict):
    db_query_result: Optional[float]
    is_condition_met: Optional[bool]
    error_msg: Optional[str]

# 步骤2:加载环境变量
load_dotenv()

# 步骤3:实现核心节点
def query_database(state: WorkflowState) -> dict:
    try:
        conn = pymysql.connect(
            host=os.getenv("DB_HOST"),
            user=os.getenv("DB_USER"),
            password=os.getenv("DB_PASSWORD"),
            database=os.getenv("DB_NAME"),
            port=int(os.getenv("DB_PORT", 3306))
        )
        cursor = conn.cursor()
        query_sql = "SELECT target_value FROM monitor_table WHERE id = 1"
        cursor.execute(query_sql)
        result = cursor.fetchone()
        if result:
            return {
                "db_query_result": float(result[0]),
                "error_msg": None
            }
        else:
            return {
                "db_query_result": None,
                "error_msg": "数据库查询结果为空"
            }
    except Exception as e:
        return {
            "db_query_result": None,
            "error_msg": f"数据库查询失败:{str(e)}"
        }
    finally:
        if 'conn' in locals() and conn.open:
            conn.close()

def judge_condition(state: WorkflowState) -> dict:
    db_value = state["db_query_result"]
    error_msg = state["error_msg"]
    if error_msg or db_value is None:
        return {"is_condition_met": False}
    trigger_threshold = 100
    return {"is_condition_met": db_value > trigger_threshold}

def execute_workflow(state: WorkflowState) -> dict:
    db_value = state["db_query_result"]
    print(f"✅ 数据库查询结果 {db_value} 符合触发条件,启动核心工作流...")
    # 替换为实际业务逻辑
    return {"error_msg": None}

def handle_failure(state: WorkflowState) -> dict:
    error_msg = state["error_msg"]
    db_value = state["db_query_result"]
    if error_msg:
        print(f"❌ 数据库查询异常:{error_msg},将执行终止或重试逻辑")
    else:
        print(f"❌ 数据库查询结果 {db_value} 未达到触发条件,将执行终止或重试逻辑")
    return {"error_msg": error_msg}

# 步骤4:构建并编译工作流
graph = StateGraph(WorkflowState)
graph.add_node("query_db", query_database)
graph.add_node("judge_condition", judge_condition)
graph.add_node("execute_workflow", execute_workflow)
graph.add_node("handle_failure", handle_failure)

graph.add_edge(START, "query_db")
graph.add_edge("query_db", "judge_condition")

def condition_router(state: WorkflowState):
    return "execute_workflow" if state["is_condition_met"] else "handle_failure"

graph.add_conditional_edges("judge_condition", condition_router)
graph.add_edge("execute_workflow", END)
graph.add_edge("handle_failure", END)

workflow = graph.compile()

# 步骤5:运行工作流
if __name__ == "__main__":
    result = workflow.invoke({})
    print("\n工作流执行完成,最终状态快照:")
    print(f"数据库查询结果:{result['db_query_result']}")
    print(f"条件是否满足:{result['is_condition_met']}")
    print(f"错误信息:{result['error_msg']}")

四、进阶优化(适配生产环境,必做)

上述基础示例可满足简单测试场景,在生产环境中,需针对"稳定性、可扩展性、执行性能"三大核心需求进行优化,结合 LangGraph 高级特性,实现更健壮、更高效的工作流触发逻辑。以下为4个核心优化方向,可直接集成至基础实现中。

1. 循环重试机制(避免单次失败导致流程终止)

实际生产场景中,数据库查询可能因网络波动、数据库临时故障等偶发因素导致失败,或查询结果暂时未达到触发条件。添加循环重试机制,设置最大重试次数与重试间隔,可有效规避偶发因素影响,提升工作流稳定性。

python 复制代码
from time import sleep

# 优化1:更新状态定义,新增重试计数字段
class WorkflowState(TypedDict):
    db_query_result: Optional[float]
    is_condition_met: Optional[bool]
    error_msg: Optional[str]
    retry_count: int  # 新增:重试计数,记录当前重试次数

# 优化2:初始化状态,设置初始重试次数为0
initial_state = {"retry_count": 0}

# 优化3:修改异常处理节点,添加重试逻辑
def handle_failure(state: WorkflowState) -> dict:
    retry_count = state["retry_count"]
    max_retry = 3  # 最大重试次数,建议配置化管理
    if retry_count < max_retry:
        print(f"🔄 第 {retry_count+1} 次重试,间隔3秒后执行...")
        sleep(3)  # 重试间隔,避免频繁查询给数据库造成压力
        return {"retry_count": retry_count + 1, "error_msg": None}
    else:
        print(f"❌ 已达到最大重试次数({max_retry}次),工作流终止")
        # 可扩展异常告警逻辑:send_alert("已达到最大重试次数,工作流终止")
        return {"error_msg": "达到最大重试次数,数据库查询失败"}

# 优化4:修改路由函数,重试时跳转回数据库查询节点
def condition_router(state: WorkflowState):
    if state["is_condition_met"]:
        return "execute_workflow"
    else:
        # 未满足条件且未达最大重试次数,跳转回查询节点重试
        if state["retry_count"] < 3:
            return "query_db"
        else:
            return "handle_failure"

# 优化5:运行工作流时,传入初始状态
if __name__ == "__main__":
    result = workflow.invoke(initial_state)

2. 定时触发检查(实现数据库持续监控)

若业务需求为持续监控数据库(如每5分钟检查一次核心指标,达标则触发工作流),可结合 schedule 库实现定时任务,循环调用工作流,实现无人值守的自动化触发。

python 复制代码
import schedule
import time

# 定时任务:每5分钟运行一次工作流,检查数据库指标
def scheduled_check():
    print("\n📅 定时检查启动:开始查询数据库核心指标...")
    workflow.invoke(initial_state)

# 配置定时任务(每5分钟执行一次,可根据需求调整为10分钟、1小时等)
schedule.every(5).minutes.do(scheduled_check)

# 持续运行定时任务(后台常驻,实现无人值守)
while True:
    schedule.run_pending()
    time.sleep(1)

3. 状态持久化与调试优化(生产环境必备)

生产环境中,需记录工作流每次执行的状态快照(查询结果、条件判断结果、错误信息等),便于问题排查与调试;同时配置节点缓存,提升重复查询的执行性能,减少数据库访问压力。

python 复制代码
from langgraph.cache import InMemoryCache
import logging

# 优化1:编译工作流时配置缓存,提升执行性能(缓存节点执行结果)
workflow = graph.compile(cache=InMemoryCache())

# 优化2:实现状态快照保存逻辑,便于调试与问题排查
def save_state_snapshot(state: dict):
    # 配置日志,将状态快照保存至文件
    logging.basicConfig(
        filename="workflow_state.log",
        level=logging.INFO,
        format="%(asctime)s - %(message)s"
    )
    logging.info(f"工作流状态快照:{state}")

# 优化3:运行工作流后,保存状态快照
if __name__ == "__main__":
    result = workflow.invoke(initial_state)
    save_state_snapshot(result)

4. 多条件判断与分支路由(提升业务适配性)

若业务需求涉及多个触发条件(如"数值>100 且 数据状态为正常"),可修改条件判断节点,支持多条件组合校验;同时通过条件边实现多分支路由,不同条件触发不同的工作流节点,提升业务适配灵活性。

python 复制代码
def judge_condition(state: WorkflowState) -> dict:
    db_value = state["db_query_result"]
    error_msg = state["error_msg"]
    # 新增:读取数据状态(假设从数据库查询时已获取,此处简化示例)
    data_status = state.get("data_status", "normal")
    
    if error_msg or db_value is None:
        return {"is_condition_met": False, "condition_type": "error"}
    
    # 多条件组合校验:数值>100 且 数据状态为正常
    if db_value > 100 and data_status == "normal":
        return {"is_condition_met": True, "condition_type": "normal_trigger"}
    # 分支条件校验:数值>150 且 数据状态为预警
    elif db_value > 150 and data_status == "warning":
        return {"is_condition_met": True, "condition_type": "warning_trigger"}
    else:
        return {"is_condition_met": False, "condition_type": "not_met"}

# 多分支路由函数:根据条件类型跳转至对应节点
def condition_router(state: WorkflowState):
    if not state["is_condition_met"]:
        return "handle_failure"
    # 不同条件类型触发不同工作流节点
    if state["condition_type"] == "normal_trigger":
        return "execute_workflow"
    elif state["condition_type"] == "warning_trigger":
        return "execute_warning_workflow"  # 新增:预警场景工作流节点

五、关键注意事项(避坑指南)

  1. 数据库连接安全:严禁硬编码数据库账号密码,需通过环境变量或配置文件统一管理;添加连接超时、异常捕获逻辑,防止工作流因数据库连接问题崩溃;查询完成后必须关闭数据库连接,避免资源泄露。
  2. 状态更新规范:严格遵循 LangGraph 的"不可变更新"原则,节点不得直接修改原状态,仅返回状态更新字典,确保状态的可追溯性与线程安全,尤其适配多实例并发执行场景。
  3. 条件设计合理:触发条件需明确、可量化,如数值阈值、字符串匹配规则等,避免模糊逻辑;条件建议配置化管理(从数据库或配置文件读取),便于后期调整,无需修改代码、重新部署。
  4. 并发控制:若需多实例并行执行工作流,需通过线程池/进程池控制并发数,确保每个实例的状态独立,避免数据互相覆盖;分布式场景下,需将核心状态同步至共享存储(如 Redis),保障数据一致性。
  5. 异常兜底完善:除重试机制外,需添加完善的异常告警逻辑(如邮件、短信、企业微信告警),当工作流执行失败或达到最大重试次数时,及时通知开发人员处理,避免问题遗漏。

六、总结与拓展

本文系统讲解了 LangGraph 基于外部数据库条件触发工作流的完整实现方案,核心逻辑可概括为:以状态为数据中枢,将数据库查询作为前置触发节点,通过条件边路由校验查询结果,进而实现工作流的按需启动与执行

本质而言,数据库查询结果是工作流的"触发数据源",条件边是"触发控制开关",节点是"业务逻辑执行单元",三者协同联动,可实现灵活、高效的条件触发机制。通过基础实现与进阶优化的结合,可快速适配生产环境的复杂需求,实现工作流的自动化、智能化执行。

拓展方向:除数据库查询外,该实现逻辑可灵活适配其他外部数据源(如 Redis、API 接口、消息队列等),仅需将"数据库查询节点"替换为对应数据源的读取节点,即可实现"多数据源条件触发工作流";同时可结合 LangChain 集成大模型,实现更智能的工作流逻辑,如根据查询结果动态生成执行方案、自动处理异常场景等。

若在实操过程中遇到问题(如数据库连接失败、路由跳转异常、重试逻辑不生效等),欢迎在评论区留言交流,共同探讨解决方案。

相关推荐
梦想画家1 天前
深入浅出LangChain生态开发:LangChain、LangGraph与DeepAgent实战指南
langchain·langgraph·deepagent
山塘小鱼儿4 天前
本地Ollama+Agent+LangGraph+LangSmith运行
python·langchain·ollama·langgraph·langsimth
孤舟晓月7 天前
Langchain 1.0后astream_events事件类型及生命周期简析
langchain·大模型·langgraph
TGITCIC15 天前
LangChain入门(十五)- LangGraph为什么这么香,看它是如何逆天DIFY的
langchain·工作流·rag·ai agent·ai智能体·langgraph·agentic
中草药z17 天前
【Vibe Coding】初步认识LangChain&LangGraph
前端·langchain·html·agent·cursor·langgraph·vibe
组合缺一20 天前
Solon AI Remote Skills:开启分布式技能的“感知”时代
java·人工智能·分布式·agent·langgraph·mcp
schinber23 天前
LangGraph存储API完全解析:从客户端调用到服务端路由的完整链路
langgraph
大模型RAG和Agent技术实践1 个月前
智审未来:基于 LangGraph 多 Agent 协同的新闻 AI 审查系统深度实战(完整源代码)
人工智能·agent·langgraph·ai内容审核
weixin_462446231 个月前
从零搭建AI关系图生成助手:Chainlit 结合LangChain、LangGraph和可视化技术
人工智能·langchain·langgraph·chainlit