langchain.agents.structured_chat.base
.create_structured_chat_agent¶
- langchain.agents.structured_chat.base.create_structured_chat_agent(llm: ~langchain_core.language_models.base.BaseLanguageModel, tools: ~typing.Sequence[~langchain_core.tools.BaseTool], prompt: ~langchain_core.prompts.chat.ChatPromptTemplate, tools_renderer: ~typing.Callable[[~typing.List[~langchain_core.tools.BaseTool]], str] = <function render_text_description_and_args>, *, stop_sequence: ~typing.Union[bool, ~typing.List[str]] = True) Runnable [source]¶
创建一个旨在支持具有多个输入的工具的代理。
- 参数:
llm:用作代理的LLM。 tools:此代理可以访问的工具。 prompt:要使用的提示。有关更多信息,请参见下面的提示部分。 stop_sequence:bool或str列表。
如果为True,则添加一个停止令牌“Observation:”以避免产生幻觉。 如果为False,则不添加停止令牌。 如果为str列表,则使用提供的列表作为停止令牌。
默认为True。如果您使用的LLM不支持停止序列,则可以将其设置为False。
tools_renderer:控制如何将工具转换为字符串并传递给LLM。默认为`render_text_description`。
- 返回:
代表代理的可运行序列。它接受与传递的提示相同的所有输入变量。它返回AgentAction或AgentFinish。
示例:
from langchain import hub from langchain_community.chat_models import ChatOpenAI from langchain.agents import AgentExecutor, create_structured_chat_agent prompt = hub.pull("hwchase17/structured-chat-agent") model = ChatOpenAI() tools = ... agent = create_structured_chat_agent(model, tools, prompt) agent_executor = AgentExecutor(agent=agent, tools=tools) agent_executor.invoke({"input": "hi"}) # 与聊天历史一起使用 from langchain_core.messages import AIMessage, HumanMessage agent_executor.invoke( { "input": "what's my name?", "chat_history": [ HumanMessage(content="hi! my name is bob"), AIMessage(content="Hello Bob! How can I assist you today?"), ], } )
提示:
- 提示必须具有输入键:
tools:包含每个工具的描述和参数。
tool_names:包含所有工具名称。
agent_scratchpad:包含先前代理操作和工具输出的字符串。
这是一个示例:
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder system = '''尽可能帮助和准确地回答人类。您可以访问以下工具: {tools} 使用json blob通过提供一个操作键(工具名称)和一个action_input键(工具输入)来指定一个工具。 有效的“action”值:“Final Answer”或{tool_names} 每个$JSON_BLOB只提供一个操作,如下所示: ``` {{ "action": $TOOL_NAME, "action_input": $INPUT }} ``` 遵循此格式: 问题:输入问题以回答 思考:考虑先前和随后的步骤 操作: ``` $JSON_BLOB ``` 观察:操作结果 ...(重复思考/操作/观察N次) 思考:我知道如何回应 操作: ``` {{ "action": "Final Answer", "action_input": "对人类的最终回应" }} 开始!提醒始终使用有效的单个操作的json blob进行回应。必要时使用工具。如果合适,直接回应。格式为操作:```$JSON_BLOB```然后观察''' human = '''{input} {agent_scratchpad} (无论如何都要在JSON blob中回复) ''' prompt = ChatPromptTemplate.from_messages( [ ("system", system), MessagesPlaceholder("chat_history", optional=True), ("human", human), ] )
- Parameters
llm (BaseLanguageModel) –
tools (Sequence[BaseTool]) –
prompt (ChatPromptTemplate) –
tools_renderer (Callable[[List[BaseTool]], str]) –
stop_sequence (Union[bool, List[str]]) –
- Return type