You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

工具如何传递给LLM?OpenAI聊天模型Prompt组装与LangChain调试疑问

问题解答

1. OpenAI Chat API中消息数组与工具的组装方式

OpenAI Chat API的工具调用并非将工具定义直接拼入Prompt文本,而是通过独立的tools参数传递工具元数据,消息数组仍保持system/user/assistant/tool等角色结构:

  • 先构造工具定义数组,每个工具包含type(固定为function)、function(含name和parameters);
  • 调用API时,将工具数组作为tools参数传入,同时传入正常的消息数组;
  • 当模型决定调用工具时,会返回带有tool_calls字段的assistant消息;
  • 执行工具后,需将工具结果以role="tool"的消息加入消息数组,继续后续交互。

2. LangChain调试日志看不到工具传递痕迹的原因

create_openai_tools_agent基于OpenAI原生工具调用API实现,工具定义是作为API请求的额外参数(而非消息内容)传递给LLM的:

  • langchain.debug日志仅打印发送给LLM的消息数组内容(即system和human消息),不会显示API的tools参数部分;
  • 只有当工具执行完成,将结果以role="tool"的消息加入数组后,后续的LLM调用日志才会显示这条工具消息;
  • 测试代码中首次调用LLM时,工具是通过API参数传递的,所以日志里看不到,但模型能识别并调用工具。

3. OpenAI API是否必须使用System:/Human:这类标识

不需要。这些前缀是客户端或框架为可读性添加的展示格式,OpenAI API本身只关注消息对象中的role字段(如system/user/assistant/tool),只要role值正确,消息内容里不需要包含这些前缀标识。


测试代码

from langchain import hub
from langchain.agents import AgentExecutor, create_openai_tools_agent
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_openai import ChatOpenAI

import langchain
langchain.debug = True

prompt = hub.pull("hwchase17/openai-tools-agent")
tools = [TavilySearchResults(max_results=1)]

llm = ChatOpenAI(model="gpt-3.5-turbo-1106", temperature=0)
agent = create_openai_tools_agent(llm, tools, prompt)

agent_executor = AgentExecutor(agent=agent, tools=tools)

agent_executor.invoke({"input": "what is LangChain?"})

内容的提问来源于stack exchange,提问作者BPDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 06:04:57