Agent 与工具调用2323 字

LangGraph子图可控性

·全库 329 / 611

《LangGraph子图可控性》共 0.2 万字,通篇围绕 日志、向量、检索、场景 展开,归在「Agent 与工具调用」这一层。

覆盖日志向量检索场景

适合要让 AI 真的去干活、不只是陪人聊天的人

目录骨架(1 节)
  1. 子图可控性

示例代码

注:将ppt后缀名改为zip后解压

python版本:3.12.4

​

子图可控性

在复杂的多代理协作场景中,LangGraph 支持子图之间的状态共享。主图可以通过状态对象与子图交互,确保各子图能够访问和更新全局状态。这种机制使得多个智能体可以协同工作,同时保持状态的一致性。

对于更复杂的系统,子图是一个有用的设计原则。子图允许您在图的不同部分创建和管理不同的状态。

image.png

%pip install -U langgraph

示例:我有一个接受日志并执行两个独立子任务的系统。首先,它将对它们进行总结。其次,它将总结日志中捕获的任何故障模式。我想在两个不同的子图中执行这两个操作。

最重要的是要认识到图之间的信息传递。入口图 是父级,两个子图中的每一个都被定义为 入口图 中的节点。两个子图都继承了父级 入口图 的状态;我可以在每个子图中访问 docs,只需在子图状态中指定它(参见图)。每个子图都可以有自己的私有状态。任何我想传播回父级 入口图 的值(用于最终报告)只需在我的 入口图 状态中定义即可(例如,summary report 和 failure report)。

image.png

#示例:sub_graph.py
from typing import List, TypedDict, Optional
from langgraph.graph import StateGraph, START, END

# 定义日志的结构
class Logs(TypedDict):
    id: str  # 日志的唯一标识符
    question: str  # 问题文本
    docs: Optional[List]  # 可选的相关文档列表
    answer: str  # 回答文本
    grade: Optional[int]  # 可选的评分
    grader: Optional[str]  # 可选的评分者
    feedback: Optional[str]  # 可选的反馈信息

# 定义故障分析状态的结构
class FailureAnalysisState(TypedDict):
    docs: List[Logs]  # 日志列表
    failures: List[Logs]  # 失败的日志列表
    fa_summary: str  # 故障分析总结

# 获取失败的日志
def get_failures(state):
    docs = state["docs"]  # 从状态中获取日志
    failures = [doc for doc in docs if "grade" in doc]  # 筛选出包含评分的日志
    return {"failures": failures}  # 返回包含失败日志的字典

# 生成故障分析总结
def generate_summary(state):
    failures = state["failures"]  # 从状态中获取失败的日志
    # 添加函数:fa_summary = summarize(failures)
    fa_summary = "Poor quality retrieval of Chroma documentation."  # 固定的总结内容
    return {"fa_summary": fa_summary}  # 返回包含总结的字典

# 创建故障分析的状态图
fa_builder = StateGraph(FailureAnalysisState)
fa_builder.add_node("get_failures", get_failures)  # 添加节点:获取失败的日志
fa_builder.add_node("generate_summary", generate_summary)  # 添加节点:生成总结
fa_builder.add_edge(START, "get_failures")  # 添加边:从开始到获取失败的日志
fa_builder.add_edge("get_failures", "generate_summary")  # 添加边:从获取失败的日志到生成总结
fa_builder.add_edge("generate_summary", END)  # 添加边:从生成总结到结束

# 定义问题总结状态的结构
class QuestionSummarizationState(TypedDict):
    docs: List[Logs]  # 日志列表
    qs_summary: str  # 问题总结
    report: str  # 报告

# 生成问题总结
def generate_summary(state):
    docs = state["docs"]  # 从状态中获取日志
    # 添加函数:summary = summarize(docs)
    summary = "Questions focused on usage of ChatOllama and Chroma vector store."  # 固定的总结内容
    return {"qs_summary": summary}  # 返回包含总结的字典

资料里没有你的场景?

把你手上的数据和想解决的那个环节发上来,我们按具体情况回,不复述方法论。

发布需求