https://python.langchain.com.cn/docs/modules/model_io/models/llms/how_to/human_input_llm
HumanInputLLM的例子里,“预设固定格式”是Agent和人类之间的“沟通语言”——就像你给机器人发指令必须用它能看懂的代码,人类给Agent发指令也必须用它能解析的格式。 Agent看不懂自由发挥的话(比如“你去查一下这个动漫”),但能看懂严格按格式写的指令(比如“Action: Wikipedia\nAction Input: …”)。
我们还是用“查Bocchi the Rock!”的例子,拆透“格式如何让Agent听懂人类的话”:
核心前提:Agent只认“固定格式”
Agent的内部逻辑被设定为:只能解析包含Thought、Action、Action Input、Final Answer的文本。 这些关键词就像“命令标签”,告诉Agent“哪部分是思考、哪部分是要调用的工具、哪部分是最终答案”。
格式模板长这样(Agent的“母语”):
Thought: (人类的思考过程,比如“我需要查维基百科”)
Action: (要调用的工具名,必须是提前加载的工具,比如“Wikipedia”)
Action Input: (工具的输入参数,比如搜索关键词“Bocchi the Rock!”)
或者最后一步的结束格式:
Final Answer: (最终要返回的答案)
分步拆解:人类输入如何通过格式驱动Agent?
步骤1:初始化“沟通环境”
代码里提前做好了3件事(和FakeLLM例子逻辑一致):
# 1. 定义HumanInputLLM:人类输入的“接收器”,会把人类输入的文本传给Agent
llm = HumanInputLLM(prompt_func=lambda prompt: print(f"===PROMPT===\n{prompt}\n=====END====="))
# 2. 加载工具:Agent能调用的“Wikipedia”(查资料用)
tools = load_tools(["wikipedia"])
# 3. 初始化Agent:内置“格式解析器”,只认上面的模板格式
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
步骤2:用户提问,Agent启动“等待人类指令”
当运行agent.run("What is 'Bocchi the Rock!'?")后,Agent会先打印一个“提示框”(=PROMPT=和=END=之间的内容),本质是在说:
“请人类按我的格式给我指令,我等着执行!”
步骤3:第一次人类输入(按格式发指令)
人类看到提示框后,输入第一句符合格式的话:
Thought: I need to use a tool.
Action: Wikipedia
Action Input: Bocchi the Rock!, Japanese four-panel manga and anime series.
- 格式的作用1:告诉Agent“要调用工具”
Agent看到Action: Wikipedia,立刻知道“要调用Wikipedia工具”;
看到Action Input: ...,立刻知道“用这个关键词去查维基百科”。
步骤4:Agent执行工具调用,返回结果
Agent调用Wikipedia工具后,拿到搜索结果(Observation),并把结果展示出来:
Observation: Page: Bocchi the Rock! ...(一堆搜索结果)
步骤5:第二次人类输入(按格式调整指令)
人类看到结果后,觉得“信息有点乱,需要更精准的搜索”,于是再按格式输入:
Thought: These are not relevant articles.
Action: Wikipedia
Action Input: Bocchi the Rock!, Japanese four-panel manga series written and illustrated by Aki Hamaji.
- 格式的作用2:告诉Agent“继续调用工具,换个参数”
Agent再次解析Action: Wikipedia和新的Action Input,用更精准的关键词重新查维基百科,得到更相关的结果。
步骤6:第三次人类输入(按格式结束流程)
人类看到新结果足够回答问题,按格式输入结束指令:
Thought: It worked.
Final Answer: Bocchi the Rock! is a four-panel manga series and anime television series...
- 格式的作用3:告诉Agent“可以输出答案了”
Agent看到Final Answer:,立刻知道“流程结束,把这句话返回给用户”。
为什么“不按格式输入就会失效”?
如果人类随便输入一句:“你再去查一次,用更准的词”,Agent会完全看不懂——因为没有Action:和Action Input:标签,它不知道该调用哪个工具、输入什么参数。
就像你对一个只会说中文的机器人说英文指令,它无法执行。HumanInputLLM的例子里,“固定格式”就是Agent能听懂的“中文”,人类必须用这种“语言”说话,Agent才能行动。
总结:格式是“人类→Agent”的翻译器
- 人类的自然语言(比如“我觉得需要再查一次”)→ 翻译成格式指令(
Action: Wikipedia\nAction Input: ...)→ Agent能解析并执行; - 整个过程中,
HumanInputLLM只是“传话筒”,把人类输入的格式指令递给Agent,而Agent的“智能”全靠“识别格式→执行对应操作”的固定逻辑。
现在再看例子里的人类输入和Agent的反应,是不是能对应上了?每一句人类输入的格式,都直接决定了Agent下一步会做什么。
2万+

被折叠的 条评论
为什么被折叠?



