Ollama Python 库 0.4 版本,改进了函数调用功能
2024 年 11 月 25 日
在最新版本的 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 上更新。
- 整个库中都支持完整的类型支持,以支持直接对象访问,同时保持现有功能。