理解langgraph工作流的驱动逻辑,以适应langgraph工作流模式的编程。

langgraph的工作流模式虽然方便直观,但习惯了普通函数式编程的数据流处理。刚开始接触时,确实容易试图用函数式编程的思维去适配它,特别是langgraph数据传递由状态字典管理,而非函数返回值,导致代码不够自然,甚至绕远路。

你如果习惯了函数式编程,建议:

  1. 别把 langgraph 里的节点当作纯函数,而是当作“数据流中的处理单元”
  2. 用状态字典管理数据,而不是函数参数和返回值
  3. 用显式的工作流结构,避免深层嵌套调用

当然,langgraph 的优势是工作流这类的处理,对于常规的并不一定高效。以下这些例子只是为了练习 从函数式编程思维->工作流思维 转变。核心思想是

  • 分步骤 -> 把每个步骤制作成一个节点。
  • 数据传递以State作为载体通过edge进行流转。
  • 对用户透明的那些逻辑可以放在管道中的meta_function处理。

例如计算(5+1)* 2 - 3 , 传统编程:

def step1(data):
    return data + 1

def step2(data):
    return data * 2

def step3(data):
    return data - 3

result = step3(step2(step1(5)))  # 先执行 step1, 再 step2, 最后 step3
print(result)  # 9

LangGraph 方式:

from langgraph.graph import StateGraph

class WorkflowState:
    value: int  # 共享状态

def step1(state):
    state["value"] += 1
    return state

def step2(state):
    state["value"] *= 2
    return state

def step3(state):
    state["value"] -= 3
    return state

# 定义工作流
workflow = StateGraph(WorkflowState)
workflow.add_node("step1", step1)
workflow.add_node("step2", step2)
workflow.add_node("step3", step3)

# 连接节点
workflow.set_entry_point("step1")
workflow.add_edge("step1", "step2")
workflow.add_edge("step2", "step3")

# 运行
app = workflow.compile()
result = app.invoke({"value": 5})
print(result["value"])  # 9

 再举一个例子,小学数学应用题:

A、B两车在一条笔直的公路上同向行驶。A车在B车后方 1000 米处。A车以每秒 20 米的速度行驶,B车以每秒 16 米的速度行驶。两车同时出发,问多少秒后A车能够追上B车?

解题思路:分两步  1、计算A,B辆车的相对速度。    2、用距离除以相对速度

from langgraph.graph import StateGraph
from typing import TypedDict,Annotated

def guarantee_positive(existing_value, new_value):

    if new_value < 0:
        return new_value * -1
    return new_value

class CarsState(TypedDict):

        distance: int           # A 车与 B 车的初始距离
        speed_A: int            # A 车速度
        speed_B: int            # B 车速度
        relative_speed: Annotated[int, guarantee_positive]   # 相对速度,管道中检查相对速度如果是负数则改为正数
        time: float             # 追赶时间


# 计算速度差的节点
def calculate_relative_speed(state):
    relative_speed = state["speed_A"] - state["speed_B"]
    return {**state, "relative_speed": relative_speed}

# 计算追赶时间的节点
def calculate_time(state):
    if state["relative_speed"] == 0:
        time = float('inf')  # 速度相同,则无法追上
    else:
        time = state["distance"] / state["relative_speed"]
    return {**state, "time": time}

# 构建 LangGraph 计算图
graph = StateGraph(CarsState)  # 注意这里要改为 dict
graph.add_node("node_a", calculate_relative_speed)
graph.add_node("node_b", calculate_time)

graph.set_entry_point("node_a")
graph.add_edge("node_a", "node_b")

graph = graph.compile()

# 运行计算图
initial_state = {
    "distance": 1000,
    "speed_A": 20,
    "speed_B": 16
}
result = graph.invoke(initial_state)

print(result)

print(f"速度差: {result['relative_speed']} m/s")
print(f"追赶时间: {result['time']} 秒")

### LangGraph 工作流概述 LangGraph 是一种专注于自然语言处理 (NLP) 和图数据结构的工作流框架,在 IT 上下文中主要用于构建复杂的 NLP 应用程序和服务。该工作流旨在通过集成多种工具和技术来简化从原始文本到可操作见解的过程。 #### 输入与输出定义 在 LangGraph 中,输入通常是一段或多段未经过处理的文本。这些文本可以来自不同的源,如社交媒体帖子、新闻文章或其他任何形式的文字材料。对于给定的一句话老板需求,系统能够解析并转换成具体的开发任务,类似于 metaGPT 的功能[^1]。最终输出则可能包括但不限于用户故事、竞品分析报告以及详细的项目规划文档等。 #### 主要组件及其交互 ##### 文本预处理模块 负责清理和标准化输入文本,去除噪声信息(例如HTML标签),执行分词、去停用词等基本操作,以便后续更深入的语言学分析。 ##### 图谱构建器 利用先进的算法自动生成实体关系网络,即所谓的“知识图”。此过程涉及命名实体识别(NER),共指消解以及其他语义理解技术的应用。生成的知识图不仅捕捉到了文档内的概念关联,还能够与其他外部资源建立联系,从而丰富上下文环境。 ##### 查询处理器 允许用户提交复杂查询请求,并返回精确的结果集。这一步骤依赖于之前创建好的知识图来进行高效的模式匹配和推理计算。为了提高效率和支持大规模并发访问,这部分往往采用分布式架构设计。 ##### 可视化界面 提供了直观易懂的方式让用户浏览整个流程产生的中间产物及终态成果物。图形化的展示有助于快速定位感兴趣的部分,同时也便于团队成员之间的沟通交流。 ```python import spacy from langgraph import KnowledgeGraphBuilder, QueryProcessor nlp = spacy.load('en_core_web_sm') def preprocess_text(text): doc = nlp(text) cleaned_tokens = [token.text for token in doc if not token.is_stop] return ' '.join(cleaned_tokens) knowledge_graph_builder = KnowledgeGraphBuilder() query_processor = QueryProcessor() input_text = "The company needs a new CRM system with advanced analytics capabilities." cleaned_input = preprocess_text(input_text) # 构建知识图 kg = knowledge_graph_builder.build_from_text(cleaned_input) # 执行查询 result = query_processor.execute_query(kg, "What are the key features?") print(result) ``` #### 实施细节 - **灵活性**: 支持定制插件扩展核心功能; - **性能优化**: 使用缓存机制减少重复运算开销; - **安全性考量**: 对敏感数据实施加密存储措施; 上述描述展示了如何在一个典型的IT环境中部署和应用LangGraph工作流,涵盖了从初步构思到最后交付成品的关键环节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值