本地运行大语言模型:实现函数调用与工具自主使用
在之前的文章中,我们已经介绍了如何在本地运行 Ollama 以及如何通过提供外部数据库的方式微调模型的答案。本篇文章将继续探索如何使用'函数调用(Function Calling)'功能以扩展模型能力,使其在'智能'的道路上越走越远。
Function Calling 介绍
根据 OpenAI 官方文档,Function Calling 是使得大型语言模型具备可以连接到外部工具的能力。简而言之,开发者事先给模型提供了若干工具(函数),在模型理解用户的问题后,自行判断是否需要调用工具以获得更多上下文信息,帮助模型更好地决策。
举个例子:在前文中我们是利用 Document Loaders 将事先准备好的文本作为上下文提供给模型,而使用 Function Calling 以后,我们只要提供一个'搜索函数'作为工具,模型即可自己通过搜索引擎进行搜索然后得出答案。
得益于最新的模型训练,现在的模型既能够检测何时应调用函数(取决于输入),还能够以比以前的模型更贴近函数签名的方式响应 JSON。
用途
Function Calling 有什么用?通常有以下三个主要应用场景:
- 创建通过调用外部 API 回答问题的助手:例如查询天气、股票价格或系统状态。
- 将自然语言转换为 API 调用:允许用户用口语描述需求,后端自动执行对应的程序逻辑。
- 从文本中提取结构化数据:从非结构化文本中抽取特定字段并格式化为 JSON。
下面我们就一步一步来理解一下 Function Calling 的实现原理。
定义 Function
首先定义 4 个 function,这 4 个 function 有不同的使用场景,用于模拟不同的外部服务。
def get_gas_prices(city: str) -> float:
"""Get gas prices for specified cities."""
print(f'Get gas prices for {city}.')
def github(project: str) -> str:
'''Get the information such as author from github with the project name.'''
print(f'Access the github for {project}.')
def get_weather(city: str) -> str:
"""Get the current weather given a city."""
print(f'Getting weather for {city}.')
def () -> :
()


