大型语言模型 (LLM) 中的工具调用是 LLM 与外部工具、服务或 API 交互以执行任务的能力。这使得 LLM 可以扩展其功能,增强处理现实世界任务的能力,这些任务可能需要访问外部数据、实时信息或特定应用程序。当 LLM 使用 Web 搜索工具时,它可以调用 Web 来获取模型训练数据中没有的实时数据。其他类型的工具可能包括用于计算、数据分析或可视化的 Python,或者用于获取数据的服务端点调用。工具调用可以让聊天机器人更加灵活和适应性更强,使其能够基于实时数据或超出其直接知识库的专门任务,提供更准确、更相关和更详细的回答。流行的工具调用框架包括 Langchain 和现在的 ollama。
Ollama 是一个提供开源、本地 AI 模型的平台,可在个人设备上使用,这样用户就可以直接在电脑上运行 LLM。与 OpenAI API 等服务不同的是,由于模型在本地机器上,因此无需帐户。Ollama 注重隐私、性能和易用性,使用户能够访问 AI 模型并与之交互,而无需将数据发送到外部服务器。这对于关注数据隐私的人或希望避免依赖外部 API 的人来说特别有吸引力。Ollama 平台易于设置和使用,并且支持各种模型,为用户提供了一系列工具,用于直接在自己的硬件上执行自然语言处理、代码生成和其他 AI 任务。该平台非常适合工具调用架构,因为它可以访问本地环境的所有功能,包括数据、程序和自定义软件。
在本教程中,您将学习如何通过使用 ollama 查看本地文件系统来设置工具调用,而这项任务对于远程 LLM 来说很难完成。许多 llama 模型可用于工具调用和构建 AI 智能体,例如 Mistral 和 Llama 3.2,完整列表可在 llama 网站上找到。在这种情况下,我们将使用具有工具支持的 IBM Granite 3.2 Dense。2B 和 8B 模型是经过训练的纯文本密集型 LLM,旨在支持基于工具的用例和检索增强生成 (RAG),简化代码生成、翻译和错误修复。
本教程的笔记本可从 Github 下载 点击此处。
首先,您需要从 https://ollama.com/download 下载 Ollama并为您的操作系统安装它。在 OSX 上,通过 .dmg 文件进行安装;在 Linux 上,通过一个 shell 命令进行安装;在 Windows 上,使用安装程序进行安装。您可能需要管理员权限才能运行安装程序。
您可以通过打开终端或命令提示符,并输入以下命令来测试 Ollama 是否正确安装:
接下来,您将添加初始的导入语句。此演示将使用 ollama Python 库与 Ollama 进行通信,并使用 pymupdf 库来读取文件系统中的 PDF 文件。
接下来,您将拉取本教程中将使用的模型。这会将模型权重从 Ollama 下载到您的本地计算机,并将其存储起来,以便以后使用,无需再次进行远程 API 调用。
现在,您将定义 Ollama 工具实例可以访问的工具。由于这些工具的目的是读取文件并查看本地文件系统中的图像,因此您将为每个工具创建两个 Python 函数。第一个函数名为
您可以使用简单的字符串匹配来查看关键词是否出现在文档中,但因为 Ollama 使得调用本地 LLM 变得简单,
如果模型的回应是 'yes',则函数返回文件名,该文件中包含用户在提示中指定的关键词。如果没有任何文件包含相关信息,则函数返回字符串 'None'。
由于 Ollama 将下载 Granite 3.2 Dense,因此这个函数第一次运行时可能会比较慢。
第二个工具名为
该函数
返回一个字符串,这是文件的名称,
其描述包含用户在提示中指明的关键字。
现在,您已经定义了 Ollama 调用的函数,接下来您需要为 Ollama 本身配置工具信息。第一步是创建一个对象,将工具的名称映射到 Ollama 函数调用的函数:
接下来,配置一个工具数组,用于告诉 Ollama 它将可以访问哪些工具以及这些工具需要什么。这个数组包含每个工具的一个对象模式,指示 Ollama 工具调用框架如何调用工具以及它返回什么。
对于您之前创建的两个工具,它们是需要
当您使用用户输入调用 ollama 时,您将使用此工具定义。
现在是时候将用户输入传递给 ollama 并让其返回工具调用的结果了。首先,确保 ollama 正在系统上运行:
如果 Ollama 正在运行,将返回:
现在,向用户
请求输入。您也可以硬编码输入,或者根据您配置应用的方式,
从聊天界面中获取输入。然后,
例如,如果用户输入 "Information about dogs",该单元格将打印:
现在,用户查询被传递给 Ollama 本身。消息需要为用户指定角色和用户输入的内容。这些信息通过
然后
现在模型已经在输出中生成了工具调用,请使用模型生成的参数运行所有工具调用并检查输出。在此应用程序中,Granite 3.2 Dense 还用于生成最终输出,因此工具调用的结果会先添加到初始用户输入中,然后再传递给模型。
多个工具调用可能会返回文件匹配项,因此响应将收集到一个数组中,然后将其传递给 Granite 3.2 以生成响应。前置的提示词指示模型如何响应:
最终输出将使用返回的文件名或
使用本教程提供的文件,提示词 "Information about dogs" 将返回:
您可以看到 Granite 3.2 从输入中选择了正确的关键字“dogs”,并搜索了文件夹中的文件,在 PDF 文件中找到该关键字。由于 LLM 的结果不是完全确定性的,使用相同或非常相似的提示词时,您可能会得到略有不同的结果。
构建、部署和管理强大的 AI 助手和智能体,运用生成式 AI 实现工作流和流程自动化。
借助值得信赖的 AI 解决方案,您可以勾勒未来业务发展蓝图。
IBM Consulting AI 服务有助于重塑企业利用 AI 实现转型的方式。