| from typing import Sequence |
|
|
| from langchain_core.language_models import BaseLanguageModel |
| from langchain_core.prompts.chat import ChatPromptTemplate |
| from langchain_core.runnables import Runnable, RunnablePassthrough |
| from langchain_core.tools import BaseTool |
|
|
| from agents.format_scratchpad.functions import ( |
| format_to_function_messages, |
| ) |
| from agents.output_parsers.functions import ( |
| FunctionsAgentOutputParser, |
| ) |
|
|
| def create_functions_agent( |
| llm: BaseLanguageModel, prompt: ChatPromptTemplate |
| ) -> Runnable: |
| """Create an agent that uses function calling. |
| |
| Args: |
| llm: LLM to use as the agent. Should work with Nous Hermes function calling, |
| so either be an Nous Hermes based model that supports that or a wrapper of |
| a different model that adds in equivalent support. |
| prompt: The prompt to use. See Prompt section below for more. |
| |
| Returns: |
| A Runnable sequence representing an agent. It takes as input all the same input |
| variables as the prompt passed in does. It returns as output either an |
| AgentAction or AgentFinish. |
| """ |
| if "agent_scratchpad" not in ( |
| prompt.input_variables + list(prompt.partial_variables) |
| ): |
| raise ValueError( |
| "Prompt must have input variable `agent_scratchpad`, but wasn't found." |
| f"Found {prompt.input_variables} instead." |
| ) |
| agent = ( |
| RunnablePassthrough.assign( |
| agent_scratchpad=lambda x: format_to_function_messages( |
| x["intermediate_steps"] |
| ) |
| ) |
| | prompt |
| | llm |
| | FunctionsAgentOutputParser() |
| ) |
| return agent |
|
|