多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

langgraph的设计模式,主管模式

langgraph的设计模式,主管模式 # 1.默认的消息字段里面包括系统用户工具ai消息可以定义和msg同级的字段通过同级字段也可以获取消息AIMessage的content一般是模型整理输出的结果 # 2.把子agent想象为一个工具调用子agent的返回其实就是工具返回 # 3.主管交接时会把自己的 state 送进子图。子图只收下两边都有的键 # 4.子agent里面可以定义自己的状态字段自己内容操作使用都可以但是主agent和子agent的消息字段是相同的共用的 from langgraph_supervisor import create_supervisor from langchain.agents import create_agent from langchain.chat_models import init_chat_model from langchain.tools import ToolRuntime, tool from langgraph.types import Command import os from langgraph.checkpoint.memory import InMemorySaver from pydantic import BaseModel from langgraph.graph import StateGraph from langgraph.constants import START,END model init_chat_model( modelqwen-plus, model_provideropenai, api_keyos.getenv(ali_api_key), base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, temperature0, ) tool def get_station_info(station_name: str, runtime: ToolRuntime) - Command: 查询站点、设备等信息。 Args: station_name: 站点名称例如北京、武汉、上海等 return f{station_name}站点信息查询完成,里面有熊猫大象 from langgraph.graph import MessagesState class State(MessagesState): # node: str ans: str sql_agent create_agent( modelmodel, tools[get_station_info], namesql_agent, checkpointerInMemorySaver(), system_prompt( 你是一个信息查询助手。查询站点、设备等信息时必须调用工具 禁止编造知识回答问题。缺少站点名称时直接询问用户 北京、武汉、上海等城市名都可以直接作为站点名称。 工具成功返回后只能根据工具结果回答。 ), ) def node1(main_state: State) - dict: # 默认的是读取主图state已有字段 # print(-----------------------------) # print(main_state) # print(-----------------------------) result sql_agent.invoke({messages: main_state[messages]},config{configurable: {thread_id: demo-2}}) main_state.update(ansresult[messages][-1].content) # 更新本次模型/节点的状态消息 main_state.update(messagesresult[messages]) print(-----------------------------) print(main_state) print(-----------------------------) return main_state graph1 StateGraph(State) graph1.add_node(node1, node1) graph1.add_edge(START, node1) graph1.add_edge(node1, END) g1 graph1.compile(namesql_agent1) from langgraph.managed import RemainingSteps from typing_extensions import NotRequired class SupervisorState(MessagesState): remaining_steps: NotRequired[RemainingSteps] node: NotRequired[str] workflow create_supervisor( [g1], modelmodel, supervisor_namesupervisor, output_modefull_history, prompt 你是一个任务调度助手根据用户需求完成任务。 站点设备、气象设备、航迹信息、飞行器信息、一体化装置的相关操作你可以交给sql_agent1处理。 禁止改写、扩展或增加任何内容。 , state_schemaSupervisorState, ) configs {configurable: {thread_id: demo-1}} # Compile and run app workflow.compile(checkpointerInMemorySaver()) if __name__ __main__: result app.invoke({ messages: [ { role: user, content: 查询站点信息 } ] }, configconfigs ) print(result.get(messages)) print(result.get(messages)[-1].content) result2 app.invoke({ messages: [ { role: user, content: 北京 } ] }, configconfigs ) print(result2) print(result2.get(messages)[-1].content) # print(result2.get(ans))
返回列表