Ollama Python 库 0.4 版本,改进了函数调用功能

2024 年 11 月 25 日

Ollama playing with tools

在最新版本的 Ollama Python 库中,现在可以将函数作为工具提供。该库现在还具有完整的类型支持,并添加了新的示例

开始使用

首先安装或升级 Ollama Python 库

pip install -U ollama

将 Python 函数作为工具传递

定义一个 Python 函数

首先定义一个常规的 Python 函数。为了获得更好的结果,请注解参数和返回值的类型,并可选择添加 Google 风格的文档字符串

def add_two_numbers(a: int, b: int) -> int:
  """
  Add two numbers

  Args:
    a: The first integer number
    b: The second integer number

  Returns:
    int: The sum of the two numbers
  """
  return a + b

将函数作为工具传递给 Ollama

接下来,使用 tools 字段将函数作为工具传递给 Ollama

import ollama

response = ollama.chat(
  'llama3.1',
  messages=[{'role': 'user', 'content': 'What is 10 + 10?'}],
  tools=[add_two_numbers], # Actual function reference
)

从模型响应中调用函数

使用模型返回的工具调用和参数来调用相应的函数

available_functions = {
  'add_two_numbers': add_two_numbers,
}

for tool in response.message.tool_calls or []:
  function_to_call = available_functions.get(tool.function.name)
  if function_to_call:
    print('Function output:', function_to_call(**tool.function.arguments))
  else:
    print('Function not found:', tool.function.name)

将现有函数作为工具传递

现在还可以将现有 Python 库、SDK 和其他地方的函数作为工具提供。例如,以下代码将 requests 库中的 request 函数作为工具传递,以获取 Ollama 网站的内容

import ollama
import requests

available_functions = {
  'request': requests.request,
}

response = ollama.chat(
  'llama3.1',
  messages=[{
    'role': 'user',
    'content': 'get the ollama.com webpage?',
  }],
  tools=[requests.request], 
)

for tool in response.message.tool_calls or []:
  function_to_call = available_functions.get(tool.function.name)
  if function_to_call == requests.request:
    # Make an HTTP request to the URL specified in the tool call
    resp = function_to_call(
      method=tool.function.arguments.get('method'),
      url=tool.function.arguments.get('url'),
    )
    print(resp.text)
  else:
    print('Function not found:', tool.function.name)

工作原理:从函数生成 JSON Schema

Ollama Python 库使用 Pydantic 和文档字符串解析来生成 JSON schema。例如,对于本文开头声明的 add_two_nubmers 函数,将生成以下 JSON schema(以前需要将其作为工具手动提供)

{
    "type": "function",
    "function": {
        "name": "add_two_numbers",
        "description": "Add two numbers",
        "parameters": {
            "type": "object",
            "required": [
                "a",
                "b"
            ],
            "properties": {
                "a": {
                    "type": "integer",
                    "description": "The first integer number"
                },
                "b": {
                    "type": "integer",
                    "description": "The second integer number"
                }
            }
        }
    }
}

Ollama Python 库的其他改进

Ollama Python 库的 0.4 版本包括其他改进

  • 示例已在 Ollama Python GitHub 上更新。
  • 整个库中都支持完整的类型支持,以支持直接对象访问,同时保持现有功能。