| from langflow.components.crewai.crewai import CrewAIAgentComponent |
| from langflow.components.crewai.hierarchical_crew import HierarchicalCrewComponent |
| from langflow.components.crewai.hierarchical_task import HierarchicalTaskComponent |
| from langflow.components.inputs import ChatInput |
| from langflow.components.models import OpenAIModelComponent |
| from langflow.components.outputs import ChatOutput |
| from langflow.components.prompts import PromptComponent |
| from langflow.components.tools import SearchAPIComponent, YfinanceToolComponent |
| from langflow.graph import Graph |
|
|
|
|
| def complex_agent_graph(): |
| llm = OpenAIModelComponent(model_name="gpt-4o-mini") |
| manager_llm = OpenAIModelComponent(model_name="gpt-4o") |
| search_api_tool = SearchAPIComponent() |
| yahoo_search_tool = YfinanceToolComponent() |
| dynamic_agent = CrewAIAgentComponent() |
| chat_input = ChatInput() |
| role_prompt = PromptComponent(_display_name="Role Prompt") |
| role_prompt.set( |
| template="""Define a Role that could execute or answer well the user's query. |
| |
| User's query: {query} |
| |
| Role should be two words max. Something like "Researcher" or "Software Developer". |
| """ |
| ) |
|
|
| goal_prompt = PromptComponent(_display_name="Goal Prompt") |
| goal_prompt.set( |
| template="""Define the Goal of this Role, given the User's Query. |
| User's query: {query} |
| |
| Role: {role} |
| |
| The goal should be concise and specific. |
| Goal: |
| """, |
| query=chat_input.message_response, |
| role=role_prompt.build_prompt, |
| ) |
| backstory_prompt = PromptComponent(_display_name="Backstory Prompt") |
| backstory_prompt.set( |
| template="""Define a Backstory of this Role and Goal, given the User's Query. |
| User's query: {query} |
| |
| Role: {role} |
| Goal: {goal} |
| |
| The backstory should be specific and well aligned with the rest of the information. |
| Backstory:""", |
| query=chat_input.message_response, |
| role=role_prompt.build_prompt, |
| goal=goal_prompt.build_prompt, |
| ) |
| dynamic_agent.set( |
| tools=[search_api_tool.build_tool, yahoo_search_tool.build_tool], |
| llm=llm.build_model, |
| role=role_prompt.build_prompt, |
| goal=goal_prompt.build_prompt, |
| backstory=backstory_prompt.build_prompt, |
| ) |
|
|
| response_prompt = PromptComponent() |
| response_prompt.set( |
| template="""User's query: |
| {query} |
| |
| Respond to the user with as much as information as you can about the topic. Delete if needed. |
| If it is just a general query (e.g a greeting) you can respond them directly.""", |
| query=chat_input.message_response, |
| ) |
| manager_agent = CrewAIAgentComponent() |
| manager_agent.set( |
| llm=manager_llm.build_model, |
| role="Manager", |
| goal="You can answer general questions from the User and may call others for help if needed.", |
| backstory="You are polite and helpful. You've always been a beacon of politeness.", |
| ) |
| task = HierarchicalTaskComponent() |
| task.set( |
| task_description=response_prompt.build_prompt, |
| expected_output="Succinct response that answers the User's query.", |
| ) |
| crew_component = HierarchicalCrewComponent() |
| crew_component.set( |
| tasks=task.build_task, agents=[dynamic_agent.build_output], manager_agent=manager_agent.build_output |
| ) |
| chat_output = ChatOutput() |
| chat_output.set(input_value=crew_component.build_output) |
|
|
| return Graph( |
| start=chat_input, |
| end=chat_output, |
| flow_name="Sequential Tasks Agent", |
| description="This Agent runs tasks in a predefined sequence.", |
| ) |
|
|