ソースを参照

feat: agent67 — switch base model to Ollama qwen2.5-coder:32b

Priority: Ollama large model (≥30B) > Claude Code > API > Ollama small

Strong models list: qwen2.5-coder:32b, qwen2.5:32b, deepseek-coder-v2:33b, etc.
When a ≥30B model is available locally, use it first (privacy, free, fast).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
kenny67nju 5 ヶ月 前
コミット
5b2ef78688
2 ファイル変更39 行追加15 行削除
  1. 3 3
      agentexample/agent67/agent-config.yml
  2. 36 12
      agentexample/agent67/core/config.py

+ 3 - 3
agentexample/agent67/agent-config.yml

@@ -16,13 +16,13 @@ description: >
 type: react
 
 model:
-  provider: anthropic
-  name: claude-sonnet-4-20250514
+  provider: ollama
+  name: qwen2.5-coder:32b
   temperature: 0.3
   maxTokens: 4096
   fallback:
+    - anthropic/claude-sonnet-4-20250514
     - dashscope/qwen-max
-    - openai/gpt-4o
 
 systemPrompt: |
   你是 lambda (🐑),一个顶级的软件工程师 + 机器学习专家 + 个人助手。

+ 36 - 12
agentexample/agent67/core/config.py

@@ -34,20 +34,45 @@ def detect_backend() -> tuple[str, bool, str]:
     检测可用的 LLM 后端。
 
     返回: (model_name, use_api, backend_type)
-      - backend_type="claude_code" → Claude Code CLI (Max Plan, 无需 API Key, 最强)
+      - backend_type="ollama"      → 本地 Ollama 大模型 (≥30B, 首选)
+      - backend_type="claude_code" → Claude Code CLI (Max Plan, 无需 API Key)
       - backend_type="api"         → 云端 API (Anthropic/DashScope/OpenAI)
-      - backend_type="ollama"      → 本地 Ollama (Qwen2.5, GLM-4 等, 能力较弱)
+      - backend_type="ollama"      → 本地 Ollama 小模型 (fallback)
 
-    优先级: Claude Code CLI > API > Ollama
-    (Claude Code 能力最强且免费,优先使用)
+    优先级: Ollama 大模型(≥30B) > Claude Code > API > Ollama 小模型
     """
-    # 1. 检测 Claude Code CLI (最强,优先)
+    # 强模型名单(≥30B 参数,本地运行优先)
+    STRONG_MODELS = [
+        "qwen2.5-coder:32b", "qwen2.5:32b", "qwen2.5:72b",
+        "deepseek-coder-v2:33b", "codellama:34b",
+        "llama3.1:70b", "mixtral:8x7b",
+    ]
+    # 弱模型名单(fallback)
+    WEAK_MODELS = [
+        "qwen2.5-coder:7b", "qwen2.5:14b", "qwen2.5:7b",
+        "glm4:9b", "llama3.1:8b", "deepseek-coder:6.7b",
+    ]
+
+    # 1. 检测 Ollama 大模型(本地、隐私、免费、够强)
+    try:
+        from .ollama_lam import ollama_available
+        models = ollama_available()
+        if models:
+            for m in STRONG_MODELS:
+                if m in models:
+                    print("✅ 使用 Ollama 本地大模型 ({})".format(m))
+                    print("   可用模型: {}".format(", ".join(models[:5])))
+                    return m, False, BACKEND_OLLAMA
+    except Exception:
+        pass
+
+    # 2. Claude Code CLI
     if shutil.which("claude"):
         print("✅ 使用 Claude Code Max Plan (无需 API Key)")
         print("   模型: claude sonnet (通过 claude CLI)")
         return "sonnet", False, BACKEND_CLAUDE_CODE
 
-    # 2. 云端 API
+    # 3. 云端 API
     if os.environ.get("ANTHROPIC_API_KEY"):
         model = "claude-sonnet-4-20250514"
         print("✅ 使用 Anthropic API ({})".format(model))
@@ -61,20 +86,19 @@ def detect_backend() -> tuple[str, bool, str]:
         print("✅ 使用 OpenAI API ({})".format(model))
         return model, True, BACKEND_API
 
-    # 3. Ollama 本地模型 (fallback, 能力较弱)
+    # 4. Ollama 小模型 (fallback)
     try:
         from .ollama_lam import ollama_available
         models = ollama_available()
         if models:
-            preferred = ["qwen2.5:32b", "qwen2.5:14b", "glm4:9b", "qwen2.5:7b", "llama3.1:8b"]
             selected = None
-            for p in preferred:
-                if p in models:
-                    selected = p
+            for m in WEAK_MODELS:
+                if m in models:
+                    selected = m
                     break
             if not selected:
                 selected = models[0]
-            print("⚠️  使用 Ollama 本地模型 ({}) — 能力有限,推荐安装 Claude Code".format(selected))
+            print("⚠️  使用 Ollama 小模型 ({}) — 能力有限".format(selected))
             print("   可用模型: {}".format(", ".join(models[:5])))
             return selected, False, BACKEND_OLLAMA
     except Exception: