langchain[patch]: add tool messages formatter for tool calling agent (#22849)

- **Description:** add tool_messages_formatter for tool calling agent,
make tool messages can be formatted in different ways for your LLM.
  - **Issue:** N/A
  - **Dependencies:** N/A
pull/23068/head
mackong 4 months ago committed by GitHub
parent e25a5966b5
commit 39f6c4169d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -1,6 +1,8 @@
from typing import Sequence from typing import Callable, List, Sequence, Tuple
from langchain_core.agents import AgentAction
from langchain_core.language_models import BaseLanguageModel from langchain_core.language_models import BaseLanguageModel
from langchain_core.messages import BaseMessage
from langchain_core.prompts.chat import ChatPromptTemplate from langchain_core.prompts.chat import ChatPromptTemplate
from langchain_core.runnables import Runnable, RunnablePassthrough from langchain_core.runnables import Runnable, RunnablePassthrough
from langchain_core.tools import BaseTool from langchain_core.tools import BaseTool
@ -10,9 +12,15 @@ from langchain.agents.format_scratchpad.tools import (
) )
from langchain.agents.output_parsers.tools import ToolsAgentOutputParser from langchain.agents.output_parsers.tools import ToolsAgentOutputParser
MessageFormatter = Callable[[Sequence[Tuple[AgentAction, str]]], List[BaseMessage]]
def create_tool_calling_agent( def create_tool_calling_agent(
llm: BaseLanguageModel, tools: Sequence[BaseTool], prompt: ChatPromptTemplate llm: BaseLanguageModel,
tools: Sequence[BaseTool],
prompt: ChatPromptTemplate,
*,
message_formatter: MessageFormatter = format_to_tool_messages,
) -> Runnable: ) -> Runnable:
"""Create an agent that uses tools. """Create an agent that uses tools.
@ -21,6 +29,8 @@ def create_tool_calling_agent(
tools: Tools this agent has access to. tools: Tools this agent has access to.
prompt: The prompt to use. See Prompt section below for more on the expected prompt: The prompt to use. See Prompt section below for more on the expected
input variables. input variables.
message_formatter: Formatter function to convert (AgentAction, tool output)
tuples into FunctionMessages.
Returns: Returns:
A Runnable sequence representing an agent. It takes as input all the same input A Runnable sequence representing an agent. It takes as input all the same input
@ -89,7 +99,7 @@ def create_tool_calling_agent(
agent = ( agent = (
RunnablePassthrough.assign( RunnablePassthrough.assign(
agent_scratchpad=lambda x: format_to_tool_messages(x["intermediate_steps"]) agent_scratchpad=lambda x: message_formatter(x["intermediate_steps"])
) )
| prompt | prompt
| llm_with_tools | llm_with_tools

Loading…
Cancel
Save