LangChain 82 LangGraph 从入门到精通四

LangChain系列文章

  1. LangChain 60 深入理解LangChain 表达式语言23 multiple chains链透传参数 LangChain Expression Language (LCEL)
  2. LangChain 61 深入理解LangChain 表达式语言24 multiple chains链透传参数 LangChain Expression Language (LCEL)
  3. LangChain 62 深入理解LangChain 表达式语言25 agents代理 LangChain Expression Language (LCEL)
  4. LangChain 63 深入理解LangChain 表达式语言26 生成代码code并执行 LangChain Expression Language (LCEL)
  5. LangChain 64 深入理解LangChain 表达式语言27 添加审查 Moderation LangChain Expression Language (LCEL)
  6. LangChain 65 深入理解LangChain 表达式语言28 余弦相似度Router Moderation LangChain Expression Language (LCEL)
  7. LangChain 66 深入理解LangChain 表达式语言29 管理prompt提示窗口大小 LangChain Expression Language (LCEL)
  8. LangChain 67 深入理解LangChain 表达式语言30 调用tools搜索引擎 LangChain Expression Language (LCEL)
  9. LangChain 68 LLM Deployment大语言模型部署方案
  10. LangChain 69 向量数据库Pinecone入门
  11. LangChain 70 Evaluation 评估、衡量在多样化数据上的性能和完整性
  12. LangChain 71 字符串评估器String Evaluation衡量在多样化数据上的性能和完整性
  13. LangChain 72 reference改变结果 字符串评估器String Evaluation
  14. LangChain 73 给结果和参考评分 Scoring Evaluator
  15. LangChain 74 有用的或者有害的helpful or harmful Scoring Evaluator
  16. LangChain 75 打造你自己的OpenAI + LangChain网页应用
  17. LangChain 76 LangSmith 从入门到精通一
  18. LangChain 77 LangSmith 从入门到精通二
  19. LangChain 78 LangSmith 从入门到精通三
  20. LangChain 79 LangGraph 从入门到精通一
  21. LangChain 80 LangGraph 从入门到精通二
  22. LangChain 81 LangGraph 从入门到精通三

在这里插入图片描述

有几个新的API可以使用。

1.StateGraph

主要入口点是StateGraph

from langgraph.graph import StateGraph

这个类负责构建图。它提供了一个受NetworkX启发的接口。这个图由一个状态对象参数化,它传递给每个节点。

1.1 __init__

    def __init__(self, schema: Type[Any]) -> None:

在构建图表时,您需要传入一个状态模式。然后,每个节点都会返回操作以更新该状态。这些操作可以是在状态上设置特定属性(例如,覆盖现有值),也可以是向现有属性添加内容。是设置还是添加是通过注释您用于构建图表的状态对象来表示的。

指定模式的推荐方法是使用类型化字典:from typing import TypedDict

然后,您可以使用 from typing import Annotated 注释不同的属性。目前,唯一支持的注释是 import operator; operator.add。此注释将使得任何返回此属性的节点将新结果添加到现有值中。

让我们看一个例子:

from typing import TypedDict, Annotated, Union
from langchain_core.agents import AgentAction, AgentFinish
import operator


class AgentState(TypedDict):
   # The input string
   input: str
   # The outcome of a given call to the agent
   # Needs `None` as a valid type, since this is what this will start as
   agent_outcome: Union[AgentAction, AgentFinish, None]
   # List of actions and corresponding observations
   # Here we annotate this with `operator.add` to indicate that operations to
   # this state should be ADDED to the existing values (not overwrite it)
   intermediate_steps: Annotated[list[tuple[AgentAction, str]], operator.add]

我们可以像这样使用:

# Initialize the StateGraph with this state
graph = StateGraph(AgentState)
# Create nodes and edges
...
# Compile the graph
app = graph.compile()

# The inputs should be a dictionary, because the state is a TypedDict
inputs = {
   # Let's assume this the input
   "input": "hi"
   # Let's assume agent_outcome is set by the graph as some point
   # It doesn't need to be provided, and it will be None by default
   # Let's assume `intermediate_steps` is built up over time by the graph
   # It doesn't need to provided, and it will be empty list by default
   # The reason `intermediate_steps` is an empty list and not `None` is because
   # it's annotated with `operator.add`
}

1.2 .add_node

    def add_node(self, key: str, action: RunnableLike) -> None:

这种方法向图中添加一个节点。它接受两个参数:

  • key: 一个表示节点名称的字符串。这个名称必须是唯一的。
  • action: 当调用该节点时要执行的操作。这应该是一个函数或可运行的。

1.3 .add_conditional_edges

    def add_conditional_edges(
        self,
        start_key: str,
        condition: Callable[..., str],
        conditional_edge_mapping: Dict[str, str],
    ) -> None:

这种方法添加了条件边缘。这意味着只会选择一个下游边缘,取决于起始节点的结果。这需要三个参数:

  • start_key:表示起始节点名称的字符串。该键必须已在图表中注册过。
  • condition:要调用以决定接下来要做什么的函数。输入将是起始节点的输出。它应返回一个存在于conditional_edge_mapping中并表示要采取的边缘的字符串。
  • conditional_edge_mapping:字符串到字符串的映射。键应该是条件可能返回的字符串。值应该是如果返回该条件则调用的下游节点。

1.4 set_entry_point

    def set_entry_point(self, key: str) -> None:

图的入口点。这是首先调用的节点。它只需要一个参数:

  • key:应首先调用的节点的名称。

1.5 .set_finish_point

    def set_finish_point(self, key: str) -> None:

这是图的出口点。当调用此节点时,结果将是图的最终结果。它只有一个参数:

  • key:调用时将返回其调用结果作为最终输出的节点名称

注意:如果在任何时候您之前创建了通向END的边缘(条件或正常),则不需要调用此节点。

代码

https://github.com/zgpeace/pets-name-langchain/tree/develop

参考

https://python.langchain.com/docs/langsmith/walkthrough

你可能感兴趣的:(LLM-Large,Language,Models,langchain,python,conda,langsmith,langgraph)