Невозможно использовать функцию END, используя «add_conditional_edges» в языковом графике

это мой код:

import os
from dotenv import load_dotenv
load_



dotenv()
from langchain_openai import ChatOpenAI
from langgraph.graph import StateGraph, END
from langgraph.graph import Graph, MessagesState
from typing import Annotated, Any, Dict, Optional, List,Sequence, TypedDict
from langgraph.graph.message import add_messages
 
class AgentState(TypedDict):
    # The `add_messages` function within the annotation defines
    # *how* updates should be merged into the state.
    messages: Annotated[list, add_messages]
 
def function1(state):
    return {"messages": "Hi"}
 
def function2(state):
    return {"messages": "Hello"}
 
def my_condition(state):
    return "end"
 
workflow=StateGraph(AgentState)
 
workflow.add_node("agent", function1)
workflow.add_node("tool", function2)
 
workflow.add_edge('agent','tool')
workflow.set_entry_point("agent")
 
workflow.add_conditional_edges("agent", my_condition,{ "end": END})
app=workflow.compile()
print(app.invoke({"messages": "tell me about you"}))

В приведенном выше коде я хочу завершить функцию «function1» и получить следующий результат:

{'messages': [HumanMessage(content='расскажи мне о себе', id='70a7cb55-4cb2-4d0b-9623-79cb06bcabf3'), HumanMessage(content='Hi', id='d95bd56d-93b6-44b1-ae05 -3449472d8463')]}

Но я получаю следующий результат:

{'messages': [HumanMessage(content='расскажи мне о себе', id='70a7cb55-4cb2-4d0b-9623-79cb06bcabf3'), HumanMessage(content='Hi', id='d95bd56d-93b6-44b1-ae05 -3449472d8463'), HumanMessage(content='Привет', id='7ea9ab2a-635f-46eb-8f17-d9a6af79688e')]}

Тонкая настройка GPT-3 с помощью Anaconda
Тонкая настройка GPT-3 с помощью Anaconda
Зарегистрируйте аккаунт Open ai, а затем получите ключ API ниже.
1
0
123
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ребра сообщают графу языка, где искать узел. Если это «условные ребра», они перейдут к разным следующим узлам в разных условиях. Если это просто обычное ребро, то это прямая линия от этого узла к следующему узлу.

В вашем коде вы добавляете как условные ребра, так и нормальное ребро из одного и того же узла «агента».

workflow.add_edge('agent','tool')
...
workflow.add_conditional_edges("agent", my_condition,{ "end": END})

После вызова функции «агент» вам нужно решить, что вы хотите сделать дальше? Если вы хотите достичь END, вы можете поместить условные ребра из «инструмента» вместо «агента», у которого уже есть ребро, и все функции будут вызваны.

Рад слышать! Поскольку это работает и было полезно, было бы здорово, если бы вы проголосовали за мой ответ и приняли его, нажав зеленую кнопку с галочкой рядом с ответом.

RaceYouAnytime 07.07.2024 14:37

Другие вопросы по теме