agentscope-ai / agentscope-ai/QwenPaw

[Bug] Ollama 本地模型无法调用工具(stream_tool_parsing=False)

Offen
#2,988 3 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Python
Sterne
34.9k
Forks
3.1k
Ø Merge
1 T. 15 Std.
Gemergte PRs (30 T.)
225

Beschreibung

## CoPaw Version

latest (2026-04-06)

## Description

Ollama 本地模型(如 gemma4、qwen2.5 等支持 function calling 的模型)无法调用工具和技能。

**Related PR(s):** 待提 PR

**Security considerations:** 无

## Component(s) Affected

- [x] Console (backend)
- [ ] CLI
- [ ] SDK

## Environment

- **CoPaw version:** latest
- **OS:** macOS
- **Ollama version:** latest
- **Python version (if applicable):** 3.12

## Steps to Reproduce

1. 配置 Ollama 提供商
2. 下载支持 function calling 的模型(如 `gemma4:e4b` 或 `qwen2.5:latest`)
3. 在 CoPaw 中选择该 Ollama 模型进行对话
4. 发送需要调用工具的消息(如"查看当前目录")
5. 观察:模型返回文本回复,不调用工具

## Actual vs Expected

- **Actual:** Ollama 模型不调用工具,返回文本回复
- **Expected:** Ollama 模型能够调用 CoPaw 的内置工具和 Skills

## Root Cause Analysis

**源码定位:**

| 文件 | 行号 | 问题 |
|------|------|------|
| `src/copaw/providers/ollama_provider.py` | 65 | `stream_tool_parsing=False` 禁用了流式工具解析 |

**问题分析:**

```python
# ollama_provider.py
return OpenAIChatModelCompat(
model_name=model_id,
stream=True,
stream_tool_parsing=False, # ← 问题在这里
...
)
```

虽然 `stream=True`,但 `stream_tool_parsing=False` 导致流式输出时不解析工具调用。

**验证:**

```bash
# 直接调用 Ollama API 测试
curl -s http://localhost:11434/api/chat -d '{
"model": "gemma4:e4b",
"stream": false,
"tools": [{"type":"function","function":{"name":"get_time","parameters":{"type":"object","properties":{}}}}],
"messages": [{"role":"user","content":"What time is it now?"}]
}'
```

返回结果:
```json
{
"tool_calls": [
{
"function": {
"name": "get_time",
"arguments": {}
}
}
]
}
```

**结论:** Ollama 模型本身支持 function calling,但 CoPaw 的 `stream_tool_parsing=False` 导致工具调用被忽略。

## Additional Notes

**修复方案:**

将 `ollama_provider.py` 第 65 行:
```diff
- stream_tool_parsing=False,
+ stream_tool_parsing=True,
```

**相关文件:**
- `src/copaw/providers/ollama_provider.py`
- `tests/unit/providers/test_ollama_provider.py`(测试用例也需要同步修改)

Beitragsleitfaden

Beitragsleitfaden öffnen

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.