在 LangChain 中,bind_functions
和 function_call
是用于与模型(如 OpenAI 的 GPT 系列)交互时,绑定自定义函数和控制函数调用行为的功能。以下是它们的详细解释:
1. bind_functions
bind_functions
是 LangChain 中用于将自定义函数绑定到模型的一个方法。通过绑定函数,模型可以在生成响应时调用这些函数来完成特定任务。
功能:
- 绑定自定义函数:将一个或多个函数绑定到模型,使模型能够在需要时调用这些函数。
- 增强模型能力:通过绑定函数,模型可以执行超出其语言生成能力的任务,例如查询数据库、调用 API、执行计算等。
使用场景:
- 当模型需要动态调用外部工具或函数来完成任务时。
- 例如,绑定一个函数来查询数据库、获取实时数据或执行复杂的逻辑。
示例:
from langchain.prompts import ChatPromptTemplate
from langchain.chains import LLMChain# 定义一个自定义函数
def get_weather(location: str):return f"The weather in {location} is sunny."# 将函数绑定到模型
chain = LLMChain(llm=_get_llm("gpt-4o").bind_functions(functions=[get_weather]),prompt=ChatPromptTemplate.from_template("What is the weather in {location}?")
)# 调用链
response = chain.run({"location": "New York"})
print(response)
在这个例子中,get_weather
函数被绑定到模型,模型可以调用它来获取天气信息。
2. function_call
function_call
是一个参数,用于控制模型是否调用绑定的函数以及如何调用它们。
功能:
- 控制函数调用行为:指定模型是否应该调用绑定的函数。
- 明确调用的函数:可以通过
function_call
参数指定模型调用哪个函数。 - 支持自动调用:如果设置为
"auto"
,模型会根据上下文自动决定是否调用函数。
参数值:
"auto"
:模型根据上下文自动决定是否调用函数。"none"
:模型不会调用任何函数。"function_name"
:明确指定调用的函数名称。
使用场景:
- 当需要精确控制模型的函数调用行为时。
- 例如,强制模型调用特定函数来完成任务。
示例:
from langchain.prompts import ChatPromptTemplate
from langchain.chains import LLMChain# 定义一个自定义函数
def get_weather(location: str):return f"The weather in {location} is sunny."# 将函数绑定到模型,并指定函数调用行为
chain = LLMChain(llm=_get_llm("gpt-4o").bind_functions(functions=[get_weather],function_call="get_weather" # 强制调用 get_weather 函数),prompt=ChatPromptTemplate.from_template("What is the weather in {location}?")
)# 调用链
response = chain.run({"location": "New York"})
print(response)
在这个例子中,function_call="get_weather"
强制模型调用 get_weather
函数,而不是让模型自动决定。
总结:
bind_functions
:用于将自定义函数绑定到模型,使模型能够调用这些函数。function_call
:控制模型是否调用绑定的函数,以及调用哪个函数。
通过结合使用这两个功能,可以增强模型的能力,使其能够动态调用外部工具或函数来完成复杂任务。