Ollama 应用实践:函数调用(Function Calling)
函数调用(Function Calling)是一种强大的特性,它允许大型语言模型(LLMs)通过调用外部函数来扩展其功能和能力。这项技术可以使得语言模型能够访问和处理实时数据,或者执行一些需要特定工具才能完成的任务。
函数调用的原理
- 检测需求:LLMs 被训练来识别何时需要进行函数调用,这通常是基于用户的输入提示。
- 结构化请求:当检测到需要函数调用时,模型会生成一个结构化的调用请求,而不是传统的文本回复。
- 交互外部系统:通过函数调用,LLMs 能够与外部系统和APIs进行交互,获取或发送数据。
Function Calling 原理
什么是函数调用?
函数调用 是 OpenAI 的 GPT-4-0613 和 GPT-3.5 Turbo-0613 模型中的一项新功能。这些 AI 模型经过训练,可以根据用户的提示检测函数调用的需求,并以结构化的调用请求(而不是常规文本)进行响应。
函数调用允许大语言模型与其他系统交互,从而使 LLMs 能够回答它们原本无法回答的问题,例如需要实时信息或训练集中未包含的数据的问题。换句话说,函数调用提供了另一种方法来教 AI 模型如何与外部世界交互。
LLMs 函数调用流程
下面这张图简单描述了大语言模型函数调用流程:
(图片来自:https://semaphoreci.com/blog/function-calling)
Function Calling 模型
Ollama 现在支持与 Llama 3.1 等热门模型进行工具调用。这使模型能够使用它所了解的工具来回答给定的提示,从而使模型能够执行更复杂的任务或与外界互动。
示例工具包括:
- 函数和 API
- 网页浏览
- 代码解释器
- 多得多!
支持的型号
您可以在模型页面的工具类别下找到受支持的模型列表:
- Llama 3.1
- Mistral Nemo
- Firefunction v2
- Command-R +
注意:请运行
ollama pull <model>
命令检查您是否拥有最新型号
Qwen2
Qwen2 是阿里巴巴集团推出的全新系列大型语言模型。
Qwen2基于29 种语言的数据进行训练,包括英语和中文。
它有 4 种参数大小:0.5B、1.5B、7B、72B。
在 7B 和 72B 模型中,上下文长度已扩展至128k 个 token。
Models | Qwen2-0.5B | Qwen2-1.5B | Qwen2-7B | Qwen2-72B |
---|---|---|---|---|
Params | 0.49B | 1.54B | 7.07B | 72.71B |
Non-Emb Params | 0.35B | 1.31B | 5.98B | 70.21B |
GQA | True | True | True | True |
Tie Embedding | True | True | False | False |
Context Length | 32K | 32K | 128K | 128K |
注意: 安装 ollama run qwen2
将下载一个 4.4GB 的 docker 镜像。
GLM-4
GLM-4-9B 是智谱 AI 推出的最新一代预训练模型 GLM-4 系列中的开源版本。在语义、数学、推理、代码和知识等多方面的数据集测评中,GLM-4-9B 及其人类偏好对齐的版本 GLM-4-9B-Chat 均表现出超越 Llama-3-8B 的卓越性能。除了能进行多轮对话,GLM-4-9B-Chat 还具备网页浏览、代码执行、自定义工具调用(Function Call)和长文本推理(支持最大 128K 上下文)等高级功能。本代模型增加了多语言支持,支持包括日语,韩语,德语在内的 26 种语言。我们还推出了支持 1M 上下文长度(约 200 万中文字符)的 GLM-4-9B-Chat-1M 模型和基于 GLM-4-9B 的多模态模型 GLM-4V-9B。GLM-4V-9B 具备 1120 * 1120 高分辨率下的中英双语多轮对话能力,在中英文综合能力、感知推理、文字识别、图表理解等多方面多模态评测中,GLM-4V-9B 表现出超越 GPT-4-turbo-2024-04-09、Gemini1.0 Pro、Qwen-VL-Max 和 Claude 3 Opus 的卓越性能。
ollama run glm4
Mistral
Mistral 是一个 7B 参数模型,使用 Apache 许可证发布。它可用于指令(指令跟踪)和文本完成。
Mistral AI 团队指出,Mistral 7B:
- 在所有基准测试中均优于 Llama 2 13B
- 在许多基准测试中均优于 Llama 1 34B
- 代码性能接近 CodeLlama 7B,同时仍能很好地完成英语任务
版本
标签 | 日期 | 备注 |
---|---|---|
v0.3 latest |
2024 年 5 月 22 日 | Mistral 7B 的新版本支持函数调用。 |
v0.2 |
2024 年 3 月 23 日 | Mistral 7B 的小版本 |
v0.1 |
2023 年 9 月 27 日 | 初始发行 |
Function Calling
Mistral 0.3 支持使用 Ollama 的原始模式进行函数调用。
- Example raw prompt
[AVAILABLE_TOOLS] [{"type": "function", "function": {"name": "get_current_weather", "description": "Get the current weather", "parameters": {"type": "object", "properties": {"location": {"type": "string", "description": "The city and state, e.g. San Francisco, CA"}, "format": {"type": "string", "enum": ["celsius", "fahrenheit"], "description": "The temperature unit to use. Infer this from the users location."}}, "required": ["location", "format"]}}}][/AVAILABLE_TOOLS][INST] What is the weather like today in San Francisco [/INST]
- Example response
[TOOL_CALLS] [{"name": "get_current_weather", "arguments": {"location": "San Francisco, CA", "format": "celsius"}}]
文档地址:https://ollama.com/library/mistral
ollama run mistral
Mixtral
Mixtral 大型语言模型 (LLM) 是一组预先训练的生成稀疏混合专家。
该模型有 2 种参数大小:
- mixtral:8x22b
- mixtral:8x7b
混合式 8x22b
ollama run mixtral:8x22b
Mixtral 8x22B 为 AI 社区树立了新的性能和效率标准。它是一种稀疏混合专家 (SMoE) 模型,仅使用 141B 中的 39B 个活动参数,就其规模而言,具有无与伦比的成本效益。
Mixtral 8x22B 具有以下优势:
- 精通英语、法语、意大利语、德语和西班牙语
- 它具有强大的数学和编码能力
- 它本身具有
函数调用
功能 - 64K 标记上下文窗口允许从大型文档中精确地调用信息
工具调用
tools要启用工具调用,请通过Ollama API 中的字段提供可用工具列表。
import ollama
response = ollama.chat(
model='llama3.1',
messages=[{'role': 'user', 'content': 'What is the weather in Toronto?'}],
# provide a weather checking tool to the model
tools=[{
'type': 'function',
'function': {
'name': 'get_current_weather',
'description': 'Get the current weather for a city',
'parameters': {
'type': 'object',
'properties': {
'city': {
'type': 'string',
'description': 'The name of the city',
},
},
'required': ['city'],
},
},
},
],
)
print(response['message']['tool_calls'])
支持的模型现在将回复tool_calls。工具响应可以通过角色消息提供tool。有关更多信息,请参阅API 文档。
最后编辑:Jeebiz 更新时间:2024-11-21 01:00