最近AI Agent圈子又卷起来了。ChatGPT/Claude生成的代码再牛,一断网就哑火,API费用一跑就心疼,上下文一长就忘事儿。很多人试了半天,最后还是“一次性聊天机器人”。

但现在不一样了!OpenAI官方在2025年开源了GPT-OSS(gpt-oss:20b / 120b),专门为agentic任务设计,推理、工具调用、结构化输出全拉满。再配合Ollama本地部署,你就能在自己电脑上搭建一个完全离线、私有、无限token、零API费用的编码Agent。

今天就手把手带你从零搭建本地GPT-OSS Agent Harness。1小时上手,直接跑一个“写代码→测代码→自动修复→直到全绿”的完整编码Agent。用了之后你会感叹:原来AI Agent可以这么稳、这么香!

核心概念:Agent Harness + 本地GPT-OSS = 真正生产力

Harness不是框架,而是给模型套上的“全套马具”:

  • Docker沙盒执行环境
  • 跨会话状态持久化(Git + JSON进度文件)
  • 工具调用循环 + 强制测试验证

GPT-OSS的最大优势:

  • 原生支持工具调用(function calling超稳)
  • 本地运行:24GB内存就能跑20B版本,隐私100%不泄露
  • 无限上下文迭代:不用担心token费用,想跑100轮就100轮

没有Harness,GPT-OSS再强也只是“聊天机器人”;有了它,它就能真正像程序员一样干活:创建项目、写代码、跑pytest、看到报错自己修,直到测试全绿才收工。

前置准备(5分钟搞定)

  1. 安装Ollama(官网一键安装:https://ollama.com)
  2. 拉取GPT-OSS模型(推荐本地用20B版本):
    ollama pull gpt-oss:20b   # 适合普通笔记本/台式机
    # 如果你有强显卡,可换120B:ollama pull gpt-oss:120b
    
  3. 启动Ollama服务:终端输入 ollama serve(保持后台运行)

从零搭建:三步实现完整本地Harness(附完整可运行代码)

我们做一个本地编码Agent:输入需求,它自动创建项目、写代码、跑测试、迭代修复,直到通过。整个过程100%本地。

步骤1:Docker沙盒环境(隔离执行,防止本地崩)
# Dockerfile.agent
FROM python:3.11-slim
RUN pip install --no-cache-dir pytest requests
WORKDIR /workspace
CMD ["bash"]

构建:

docker build -t agent-harness:latest .
步骤2:定义工具接口(GPT-OSS原生支持)
TOOLS = [
    {
        "type": "function",
        "function": {
            "name": "run_command",
            "description": "在Docker沙盒里执行shell命令",
            "parameters": {
                "type": "object",
                "properties": {
                    "command": {"type": "string"},
                    "timeout": {"type": "integer", "default": 30},
                    "description": {"type": "string"}
                },
                "required": ["command", "description"]
            }
        }
    },
    {
        "type": "function",
        "function": {
            "name": "task_complete",
            "description": "任务全部完成时调用,带总结",
            "parameters": {"type": "object", "properties": {"summary": {"type": "string"}}}
        }
    }
]
步骤3:核心执行循环(完整代码,直接复制运行)

agent_harness_local.py(本地GPT-OSS版):

import json
import subprocess
from openai import OpenAI   # 用OpenAI兼容接口,最稳

# 本地Ollama配置(关键改动在这里!)
client = OpenAI(
    base_url="http://localhost:11434/v1",  # Ollama本地API
    api_key="ollama"                       # 随便填,Ollama不需要真实key
)
MODEL = "gpt-oss:20b"   # 换成gpt-oss:120b也可以

# 1. 初始化器(项目启动)
def initializer_setup(project_name: str, goal: str):
    workspace = f"./workspaces/{project_name}"
    subprocess.run(["mkdir", "-p", workspace])
    
    features = {"features": [{"category": "core", "description": goal, "steps": [], "passes": False}]}
    with open(f"{workspace}/feature_list.json", "w") as f:
        json.dump(features, f, indent=2)
    
    with open(f"{workspace}/harness-progress.txt", "w") as f:
        f.write(f"项目启动: {goal}\n")
    
    subprocess.run(["git", "init"], cwd=workspace)
    print("✅ 本地项目初始化完成!")

# 2. Agent执行循环(最核心)
def run_agent_session(workspace: str, user_prompt: str, max_iterations=30):
    messages = [{"role": "system", "content": "你是本地编码Agent。每次只做一件事,完成后用task_complete总结。严格按测试结果迭代。"}]
    messages.append({"role": "user", "content": user_prompt})
    
    for i in range(max_iterations):
        resp = client.chat.completions.create(
            model=MODEL,
            messages=messages,
            tools=TOOLS,
            tool_choice="auto"
        )
        msg = resp.choices[0].message
        
        if msg.tool_calls:
            for tc in msg.tool_calls:
                name = tc.function.name
                args = json.loads(tc.function.arguments)
                
                if name == "run_command":
                    cmd = args["command"]
                    # Docker沙盒执行(完全本地)
                    result = subprocess.run(
                        ["docker", "run", "--rm", "-v", f"{workspace}:/workspace", 
                         "agent-harness:latest", "bash", "-c", cmd],
                        capture_output=True, text=True, timeout=args.get("timeout", 30)
                    )
                    tool_result = {
                        "exit_code": result.returncode,
                        "stdout": result.stdout,
                        "stderr": result.stderr
                    }
                
                elif name == "task_complete":
                    print("🎉 任务完成!总结:", args["summary"])
                    return
                
                # 把执行结果塞回上下文(GPT-OSS记忆超强)
                messages.append({"role": "tool", "tool_call_id": tc.id, "content": json.dumps(tool_result)})
                
                # 加载历史进度(跨会话记忆)
                with open(f"{workspace}/harness-progress.txt", "r") as f:
                    progress = f.read()
                messages.append({"role": "system", "content": f"历史进度:\n{progress}"})

# 使用示例
if __name__ == "__main__":
    project = "text-normalizer"
    initializer_setup(project, "写一个Python文本标准化工具,要求包含6个pytest测试用例")
    run_agent_session(f"./workspaces/{project}", "开始实现核心功能")

运行命令:

python agent_harness_local.py

你会看到GPT-OSS本地模型自己创建文件 → 跑pytest → 报错自动修复 → 再跑,直到全部通过,最后调用task_complete结束。整个过程零网络、零费用!

关键洞察:为什么本地GPT-OSS + Harness这么强

  1. GPT-OSS原生agentic能力:OpenAI专门为工具调用、迭代推理优化,比很多开源模型稳得多。
  2. 无限迭代不心疼:本地跑,想跑50轮就50轮,不用担心API费用。
  3. 隐私安全:所有代码、数据都在你电脑上,适合企业/个人敏感项目。
  4. 初始化器 + 进度文件:彻底解决“忘事儿”问题,GPT-OSS能精准记住上一次做到哪一步。

实测下来,原来要10轮才成功的任务,现在本地5-6轮就稳了,而且完全离线。

实际应用 & 开发者启发

  • 日常coding:把需求丢进去,喝杯咖啡回来就是一个带完整测试的项目。
  • 多Agent协作:再起一个Reviewer Agent,Harness统一管状态和进度。
  • 进阶玩法:接本地浏览器自动化(Playwright)、数据库工具,甚至本地向量数据库做RAG。
  • 省钱小技巧:先用gpt-oss:20b验证逻辑,再上120B做最终生成。Half-Kelly思路,先小任务验证Harness稳定性。

想更进一步?直接去Ollama官网看GPT-OSS文档,或者fork Anthropic开源的autonomous-coding项目,本地改成gpt-oss:20b即可。

总结

AI Agent的未来不是更贵的云API,而是本地GPT-OSS + 靠谱Harness。它把“运气”彻底变成工程:本地初始化、进度持久化、Docker执行、强制验证、循环迭代。

照着上面代码跑一遍,你就拥有了自己的完全私有永动机AI程序员。再也不用担心断网、费用、隐私问题了!

装上本地Harness,GPT-OSS就真能干活了!

我是紫微AI,我们下期见。
(完)

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐