色吧

  • 影音先锋下载 【AI Agent】【LangGraph】1. 进阶实战:给你的 LangGraph 加入要求分支

巨乳 風俗

你的位置:色吧 > 巨乳 風俗 >

影音先锋下载 【AI Agent】【LangGraph】1. 进阶实战:给你的 LangGraph 加入要求分支

发布日期:2025-07-03 14:44    点击次数:73

影音先锋下载 【AI Agent】【LangGraph】1. 进阶实战:给你的 LangGraph 加入要求分支

· 接待 点赞 + 温雅 👏,抓续学习影音先锋下载,抓续干货输出。

公众号内著述一览

图片影音先锋下载

书接上文(【AI Agent】【LangGraph】0. 快速上手:协同LangChain,LangGraph帮你用图结构温存构建多智能体),前边咱们了解了 LangGraph 的见地和基本构造规律,今天咱们来看下 LangGraph 构造中的进阶用法:给边加个要求 - 要求分支(Conditional edges)。

LangGraph 构造的是个图的数据结构,有节点(node) 和边(edge),那它的边也不错是带要求的。怎么给边加入要求呢?不错通过 add_conditional_edges 函数添加带要求的边。

1. 无缺代码及运转

妄言未几说,先上无缺代码,和运转甩手。先跑起来望望着力再说。

from langchain_openai import ChatOpenAIfrom langchain_core.messages import HumanMessage, BaseMessagefrom langgraph.graph import END, MessageGraphimport jsonfrom langchain_core.messages import ToolMessagefrom langchain_core.tools import toolfrom langchain_core.utils.function_calling import convert_to_openai_toolfrom typing import List@tooldef multiply(first_number: int, second_number: int):    """Multiplies two numbers together."""    return first_number * second_numbermodel = ChatOpenAI(temperature=0)model_with_tools = model.bind(tools=[convert_to_openai_tool(multiply)])graph = MessageGraph()def invoke_model(state: List[BaseMessage]):    return model_with_tools.invoke(state)graph.add_node("oracle", invoke_model)def invoke_tool(state: List[BaseMessage]):    tool_calls = state[-1].additional_kwargs.get("tool_calls", [])    multiply_call = None    for tool_call in tool_calls:        if tool_call.get("function").get("name") == "multiply":            multiply_call = tool_call    if multiply_call is None:        raise Exception("No adder input found.")    res = multiply.invoke(        json.loads(multiply_call.get("function").get("arguments"))    )    return ToolMessage(        tool_call_id=multiply_call.get("id"),        content=res    )graph.add_node("multiply", invoke_tool)graph.add_edge("multiply", END)graph.set_entry_point("oracle")def router(state: List[BaseMessage]):    tool_calls = state[-1].additional_kwargs.get("tool_calls", [])    if len(tool_calls):        return "multiply"    else:        return "end"graph.add_conditional_edges("oracle", router, {    "multiply": "multiply",    "end": END,})runnable = graph.compile()response = runnable.invoke(HumanMessage("What is 123 * 456?"))print(response)

运转甩手如下:

图片

2. 代码详解

底下对上头的代码进行详备诠释。

2.1 add_conditional_edges

率先影音先锋下载,咱们知谈了不错通过 add_conditional_edges 来对边进行要求添加。这部分代码如下:

graph.add_conditional_edges("oracle", router, {    "multiply": "multiply",    "end": END,})

add_conditional_edges选定三个参数:

迪丽热巴换脸

· 第一个为这条边的第一个node的称呼

· 第二个为这条边的要求

· 第三个为要求复返甩手的映射(凭证要求甩手映射到相应的node)

如上头的代码,意旨意思意思即是往 “oracle” node上添加边,这个node有两条边,一条是往“multiply” node上走,一条是往“END”上走。奈何决定往哪个标的去:要求是 router(背面诠释),若是 router 复返的是“multiply”,则往“multiply”标的走,若是 router 复返的是 “end”,则走“END”。

来看下这个函数的源码:

def add_conditional_edges(    self,    start_key: str,    condition: Callable[..., str],    conditional_edge_mapping: Optional[Dict[str, str]] = None,) -> None:    if self.compiled:        logger.warning(            "Adding an edge to a graph that has already been compiled. This will "            "not be reflected in the compiled graph."        )    if start_key not in self.nodes:        raise ValueError(f"Need to add_node `{start_key}` first")    if iscoroutinefunction(condition):        raise ValueError("Condition cannot be a coroutine function")    if conditional_edge_mapping and set(        conditional_edge_mapping.values()    ).difference([END]).difference(self.nodes):        raise ValueError(            f"Missing nodes which are in conditional edge mapping. Mapping "            f"contains possible destinations: "            f"{list(conditional_edge_mapping.values())}. Possible nodes are "            f"{list(self.nodes.keys())}."        )    self.branches[start_key].append(Branch(condition, conditional_edge_mapping))

重心是这一句:self.branches[start_key].append(Branch(condition, conditional_edge_mapping)),给面前node添加分支Branch。

2.2 要求 router

要求代码如下:判断践诺甩手中是否有 tool_calls 参数,若是有,则复返"multiply",莫得,则复返“end”。

def router(state: List[BaseMessage]):    tool_calls = state[-1].additional_kwargs.get("tool_calls", [])    if len(tool_calls):        return "multiply"    else:        return "end"
2.3 各node的界说

(1)肇端node:oracle

@tooldef multiply(first_number: int, second_number: int):    """Multiplies two numbers together."""    return first_number * second_numbermodel = ChatOpenAI(temperature=0)model_with_tools = model.bind(tools=[convert_to_openai_tool(multiply)])graph = MessageGraph()def invoke_model(state: List[BaseMessage]):    return model_with_tools.invoke(state)graph.add_node("oracle", invoke_model)

这个node是一个带有Tools 的 ChatOpenAI。在LangChain中使用Tools的详备教程请看这篇著述:【AI大模子讹诈建设】【LangChain系列】5. LangChain初学:智能体Agents模块的实战详解。简单诠释即是:这个node的践诺甩手,将复返是否应该使用绑定的Tools。

(2)multiply

def invoke_tool(state: List[BaseMessage]):    tool_calls = state[-1].additional_kwargs.get("tool_calls", [])    multiply_call = None    for tool_call in tool_calls:        if tool_call.get("function").get("name") == "multiply":            multiply_call = tool_call    if multiply_call is None:        raise Exception("No adder input found.")    res = multiply.invoke(        json.loads(multiply_call.get("function").get("arguments"))    )    return ToolMessage(        tool_call_id=multiply_call.get("id"),        content=res    )graph.add_node("multiply", invoke_tool)

这个node的作用即是践诺Tools。

2.4 总体进程

图片

若是以为本文对你有匡助,穷困点个赞和温雅呗 ~~~

· 大家好,我是 同学小张,平淡共享AI常识和实战案例

· 接待 点赞 + 温雅 👏,抓续学习,抓续干货输出。

公众号内著述一览

图片

本站仅提供存储劳动,通盘骨子均由用户发布,如发现存害或侵权骨子,请点击举报。

相关资讯Related Articles

  • 影音先锋下载 【AI Agent】【LangGraph】1. 进

    2025-07-03

    ·接待点赞 + 温雅👏,抓续学习影音先锋下载,抓续干货输出。 公众号内著述一览 图片影音先锋下载 书接上文(【AI Agent】【LangGraph】0. 快速上手:协同LangChain,LangGraph帮你用图结构温存构建多智能体),前边咱们了解了 LangGraph 的见地和基本构造规律,今天咱们来看下 LangGraph 构造中的进阶用法:给边加个要求 - 要求分支(Conditiona...

  • 牛奶姐姐 足交 DeepSeek选出的三支它觉得的好股

    2025-07-03

    这是DeepSeek选出的三支它觉得的好股,东谈主工智能天然现时如故强到离谱,但它对改日的展望性若何样还需要不雅察,比如让它聘任看好的股票即是一个可以的观念,可以恒久不雅察它可爱的股票走势,因为它选股是左证大数据选的,莫得个情面感,是以它选的和股民我方选的不雅点有鉴别。看到这个施行的不妨储藏起来,过几个月再追忆考据下DeepSeek的眼神,若是它看市集比你准,以后交往出现疑心的技巧不妨听听它的提出...

  • 影音先锋下载 老年期疾病的脾性(三)

    2025-07-02

    迪丽热巴换脸 五 容易引起水影音先锋下载,电解质芜杂 老年东说念主脏器呈萎缩景象,口渴核心明锐性镌汰,饮水量未几,血钾、血钠连年青东说念主低,患病后容易引起水、电解质芜杂。因此,对老年病东说念主应宝贵不雅察其口腔干燥、皮肤弹性减轻、尿少及体重减轻等调动。老年东说念主肾滤过钾的智商减低,如有泻肚或吐逆,容易产生低血钾,肾功能减退伴感染时又容易发生高血钾。老年东说念主肾功能减退比拟藏隐,应按期检查,以...

  • 动漫 h 体脂率从40%降到20%的减脂标准,附赠一周食谱!

    2025-07-02

    图片动漫 h 你是不是也有过这么的烦躁:每次思减肥,体脂率却经久不见下跌,极力坚执却莫得什么收尾?其实,体脂率的变化不单是依靠通顺,饮食调遣、生存民俗的蜕变也起着决定性作用。今天,我将共享一个科学灵验的标准,匡助你快速裁减体脂率,告捷塑造健康好身体! 一、饮食调遣:从吃得更聪惠初始 1. 低热量、高卵白食品:思要减脂,当先要秉承对身体有意的食品。低脂肪、高卵白的食品,比如鸡胸肉、鱼肉、虾、蛋类,这...