第22章 从零构建 Mini-Harness —— Agent Loop 的最小实现

上一篇我们了解了 Agent 间通信协议。本章我们从零构建一个 Mini-Harness——Agent Loop 的最小实现。

Mini-Harness 是什么

一句话定义:Agent Loop 的最小实现——observe→think→act→feedback 的核心循环。

Mini-Harness = 最小 Agent Loop 实现 定位:理解 Harness 核心的最佳实践项目

图表 代码
graph LR
    Init[初始化] --> Loop[Agent Loop
核心循环] Loop -->|observe→think→act→feedback| Loop Loop -->|end_turn| Complete[完成] Mini-Harness[最简实现
理解核心]
graph LR
    Init[初始化] --> Loop[Agent Loop
核心循环] Loop -->|observe→think→act→feedback| Loop Loop -->|end_turn| Complete[完成] Mini-Harness[最简实现
理解核心]
graph LR
    Init[初始化] --> Loop[Agent Loop
核心循环] Loop -->|observe→think→act→feedback| Loop Loop -->|end_turn| Complete[完成] Mini-Harness[最简实现
理解核心]
graph LR
    Init[初始化] --> Loop[Agent Loop<br/>核心循环]
    Loop -->|observe→think→act→feedback| Loop
    Loop -->|end_turn| Complete[完成]
    
    Mini-Harness[最简实现<br/>理解核心]

核心功能:

  • 初始化:接收 prompt,构建 messages
  • Agent Loop:observe→think→act→feedback 循环
  • 完成:end_turn 返回结果
  • 错误处理:处理执行错误

不包含功能(后续添加):

  • 权限系统
  • 上下文压缩
  • MCP 集成
  • Skills 加载
  • 多 Agent 协作

Mini-Harness 架构

最小架构

图表 代码
graph TB
    subgraph MiniHarness["Mini-Harness 架构"]
        Init[初始化
prompt → messages] Loop[Agent Loop
核心循环] Tools[基本工具
Read/Write/Bash] Complete[完成
end_turn] end Init --> Loop --> Complete Loop -->|tool_use| Tools -->|返回| Loop
graph TB
    subgraph MiniHarness["Mini-Harness 架构"]
        Init[初始化
prompt → messages] Loop[Agent Loop
核心循环] Tools[基本工具
Read/Write/Bash] Complete[完成
end_turn] end Init --> Loop --> Complete Loop -->|tool_use| Tools -->|返回| Loop
graph TB
    subgraph MiniHarness["Mini-Harness 架构"]
        Init[初始化
prompt → messages] Loop[Agent Loop
核心循环] Tools[基本工具
Read/Write/Bash] Complete[完成
end_turn] end Init --> Loop --> Complete Loop -->|tool_use| Tools -->|返回| Loop
graph TB
    subgraph MiniHarness["Mini-Harness 架构"]
        Init[初始化<br/>prompt → messages]
        Loop[Agent Loop<br/>核心循环]
        Tools[基本工具<br/>Read/Write/Bash]
        Complete[完成<br/>end_turn]
    end
    
    Init --> Loop --> Complete
    Loop -->|tool_use| Tools -->|返回| Loop

核心组件

组件功能实现
初始化模块接收 prompt,构建 messagesinitialize() 函数
Agent Loop核心循环agent_loop() 函数
工具系统(最小)Read、Write、Bashexecute_tool() 函数
完成处理end_turn 返回结果handle_end_turn() 函数

Step 1:初始化模块

实现目标

一句话定义:接收用户 prompt,构建初始 messages 数组。

图表 代码
graph LR
    Prompt[用户 prompt] --> Build[构建 messages]
    Build --> System[System Prompt
基础约束] Build --> User[User Message
任务描述] System + User --> Messages[messages 数组]
graph LR
    Prompt[用户 prompt] --> Build[构建 messages]
    Build --> System[System Prompt
基础约束] Build --> User[User Message
任务描述] System + User --> Messages[messages 数组]
graph LR
    Prompt[用户 prompt] --> Build[构建 messages]
    Build --> System[System Prompt
基础约束] Build --> User[User Message
任务描述] System + User --> Messages[messages 数组]
graph LR
    Prompt[用户 prompt] --> Build[构建 messages]
    Build --> System[System Prompt<br/>基础约束]
    Build --> User[User Message<br/>任务描述]
    
    System + User --> Messages[messages 数组]

实现代码

# Mini-Harness 初始化模块

def initialize(prompt, system_prompt=None):
    """
    初始化 Mini-Harness
    
    参数:
        prompt: 用户任务描述
        system_prompt: 系统提示词(可选)
    
    返回:
        state: 包含 messages 数组的状态
    """
    # 1. 默认 System Prompt
    if system_prompt is None:
        system_prompt = """
你是代码助手 Agent。你可以使用以下工具:

工具列表:
- Read: 读取文件
- Write: 写入文件
- Bash: 执行命令

约束:
- 每次只调用一个工具
- 工具调用后等待结果
- 完成任务后返回 end_turn
"""
    
    # 2. 构建初始 messages
    messages = [
        {"role": "system", "content": system_prompt},
        {"role": "user", "content": prompt}
    ]
    
    # 3. 初始化状态
    state = {
        "messages": messages,
        "loops": 0,
        "tool_calls": 0,
        "current_tool": None,
        "last_result": None
    }
    
    return state


# 测试初始化
def test_initialize():
    prompt = "读取 app.ts 文件,分析代码结构"
    state = initialize(prompt)
    
    print("初始化完成:")
    print(f"- messages 数量: {len(state['messages'])}")
    print(f"- loops: {state['loops']}")
    print(f"- tool_calls: {state['tool_calls']}")
    
    return state


# 运行测试
test_initialize()

输出结果

初始化完成:
- messages 数量: 2
- loops: 0
- tool_calls: 0

Step 2:Agent Loop 核心循环

实现目标

一句话定义:observe→think→act→feedback 的持续循环。

图表 代码
graph LR
    Observe[observe
接收 messages] --> Think[think
Model 推理] Think --> Decide{决策} Decide -->|tool_use| Act[act
执行工具] Act --> Feedback[feedback
追加结果] Feedback --> Observe Decide -->|end_turn| End[结束对话]
graph LR
    Observe[observe
接收 messages] --> Think[think
Model 推理] Think --> Decide{决策} Decide -->|tool_use| Act[act
执行工具] Act --> Feedback[feedback
追加结果] Feedback --> Observe Decide -->|end_turn| End[结束对话]
graph LR
    Observe[observe
接收 messages] --> Think[think
Model 推理] Think --> Decide{决策} Decide -->|tool_use| Act[act
执行工具] Act --> Feedback[feedback
追加结果] Feedback --> Observe Decide -->|end_turn| End[结束对话]
graph LR
    Observe[observe<br/>接收 messages] --> Think[think<br/>Model 推理]
    Think --> Decide{决策}
    Decide -->|tool_use| Act[act<br/>执行工具]
    Act --> Feedback[feedback<br/>追加结果]
    Feedback --> Observe
    
    Decide -->|end_turn| End[结束对话]

实现代码

# Mini-Harness Agent Loop

def agent_loop(state, model_api, tools):
    """
    Agent Loop 核心循环
    
    参数:
        state: 包含 messages 的状态
        model_api: Model API 接口
        tools: 工具执行函数映射
    
    返回:
        state: 更新后的状态
        response: Model 的最终响应
    """
    while True:
        # 1. observe: 接收 messages
        messages = state["messages"]
        
        # 2. think: Model 推理
        response = model_api(messages)
        
        # 3. 提取 stop_reason
        stop_reason = response.get("stop_reason", "end_turn")
        
        # 4. decide: 决策下一步
        if stop_reason == "end_turn":
            # end_turn: 结束对话
            return state, response
        
        elif stop_reason == "tool_use":
            # tool_use: 执行工具
            tool_use = extract_tool_use(response)
            
            # 5. act: 执行工具
            tool_name = tool_use["name"]
            tool_params = tool_use["parameters"]
            
            if tool_name in tools:
                tool_result = tools[tool_name](tool_params)
            else:
                tool_result = f"错误:工具 {tool_name} 不存在"
            
            # 6. feedback: 追加结果
            state["messages"].append({
                "role": "assistant",
                "content": response["content"],
                "tool_use": tool_use
            })
            
            state["messages"].append({
                "role": "user",
                "content": tool_result
            })
            
            # 7. 更新状态
            state["loops"] += 1
            state["tool_calls"] += 1
            state["current_tool"] = tool_name
            state["last_result"] = tool_result
            
            # 8. 循环限制(防止无限循环)
            if state["loops"] > 20:
                print("警告:循环超过 20 次,强制结束")
                return state, response


def extract_tool_use(response):
    """
    从 Model 响应中提取 tool_use
    
    参数:
        response: Model 响应
    
    返回:
        tool_use: 工具调用信息
    """
    content = response.get("content", "")
    
    # 简化版:假设 Model 返回格式为 JSON
    # 实际情况需要解析 Model 的具体输出格式
    
    import json
    import re
    
    # 尻找 JSON 格式的 tool_use
    json_match = re.search(r'\{[^}]+\}', content)
    if json_match:
        tool_info = json.loads(json_match.group())
        return {
            "name": tool_info.get("tool", "unknown"),
            "parameters": tool_info.get("params", {})
        }
    
    return {"name": "unknown", "parameters": {}}

循环流程说明

循环步骤动作实现函数
observe接收 messages 数组messages = state["messages"]
thinkModel 推理response = model_api(messages)
decide判断 stop_reasonif stop_reason == "end_turn"
act执行工具tools[tool_name](tool_params)
feedback追加结果state["messages"].append()

Step 3:基本工具系统(最小)

实现目标

一句话定义:实现 Read、Write、Bash 三个基本工具。

图表 代码
graph TB
    subgraph BasicTools["基本工具"]
        Read[Read
读取文件] Write[Write
写入文件] Bash[Bash
执行命令] end
graph TB
    subgraph BasicTools["基本工具"]
        Read[Read
读取文件] Write[Write
写入文件] Bash[Bash
执行命令] end
graph TB
    subgraph BasicTools["基本工具"]
        Read[Read
读取文件] Write[Write
写入文件] Bash[Bash
执行命令] end
graph TB
    subgraph BasicTools["基本工具"]
        Read[Read<br/>读取文件]
        Write[Write<br/>写入文件]
        Bash[Bash<br/>执行命令]
    end

实现代码

# Mini-Harness 基本工具系统

import os
import subprocess

def tool_read(params):
    """
    Read 工具:读取文件
    
    参数:
        params: {"file_path": "/path/to/file"}
    
    返回:
        文件内容
    """
    file_path = params.get("file_path")
    
    if not file_path:
        return "错误:缺少 file_path 参数"
    
    if not os.path.exists(file_path):
        return f"错误:文件 {file_path} 不存在"
    
    try:
        with open(file_path, 'r', encoding='utf-8') as f:
            content = f.read()
        
        return f"文件内容:\n{content}"
    
    except Exception as e:
        return f"错误:读取文件失败 - {str(e)}"


def tool_write(params):
    """
    Write 工具:写入文件
    
    参数:
        params: {"file_path": "/path/to/file", "content": "file content"}
    
    返回:
        写入结果
    """
    file_path = params.get("file_path")
    content = params.get("content")
    
    if not file_path or not content:
        return "错误:缺少 file_path 或 content 参数"
    
    try:
        # 创建目录(如果不存在)
        os.makedirs(os.path.dirname(file_path), exist_ok=True)
        
        # 写入文件
        with open(file_path, 'w', encoding='utf-8') as f:
            f.write(content)
        
        return f"成功:文件 {file_path} 已写入"
    
    except Exception as e:
        return f"错误:写入文件失败 - {str(e)}"


def tool_bash(params):
    """
    Bash 工具:执行命令
    
    参数:
        params: {"command": "ls -la"}
    
    返回:
        命令输出
    """
    command = params.get("command")
    
    if not command:
        return "错误:缺少 command 参数"
    
    try:
        # 执行命令
        result = subprocess.run(
            command,
            shell=True,
            capture_output=True,
            text=True,
            timeout=30
        )
        
        # 返回输出
        if result.returncode == 0:
            return f"命令输出:\n{result.stdout}"
        else:
            return f"错误:命令执行失败\n{result.stderr}"
    
    except subprocess.TimeoutExpired:
        return "错误:命令执行超时(30秒)"
    
    except Exception as e:
        return f"错误:执行命令失败 - {str(e)}"


# 创建工具映射
tools = {
    "Read": tool_read,
    "Write": tool_write,
    "Bash": tool_bash
}


# 测试工具
def test_tools():
    # 测试 Read
    result = tool_read({"file_path": "/tmp/test.txt"})
    print(f"Read 结果:\n{result}\n")
    
    # 测试 Write
    result = tool_write({"file_path": "/tmp/test.txt", "content": "Hello Mini-Harness"})
    print(f"Write 结果:\n{result}\n")
    
    # 测试 Bash
    result = tool_bash({"command": "ls /tmp"})
    print(f"Bash 结果:\n{result}\n")


# 运行测试
test_tools()

工具实现要点

工具参数错误处理安全检查
Readfile_path文件不存在、读取失败❌ Mini-Harness 不做安全检查
Writefile_path, content目录创建、写入失败❌ 后续添加权限系统
Bashcommand命令失败、超时❌ 后续添加危险命令检查

注意:Mini-Harness 是最小实现,暂不包含安全检查。后续章节会添加权限系统。

Step 4:Model API 接口

实现目标

一句话定义:Model API 的简化接口——接收 messages,返回响应。

实现代码

# Mini-Harness Model API 接口(简化版)

def model_api(messages):
    """
    Model API 接口(简化版)
    
    参数:
        messages: messages 数组
    
    返回:
        response: Model 响应
    """
    # 简化版:模拟 Model 响应
    # 实际情况需要调用真实的 Model API
    
    last_message = messages[-1]["content"]
    
    # 简化版决策逻辑
    if "读取" in last_message or "查看" in last_message:
        # 决定调用 Read 工具
        return {
            "content": "决定读取文件。{\"tool\": \"Read\", \"params\": {\"file_path\": \"app.ts\"}}",
            "stop_reason": "tool_use"
        }
    
    elif "写入" in last_message or "创建" in last_message:
        # 决定调用 Write 工具
        return {
            "content": "决定写入文件。{\"tool\": \"Write\", \"params\": {\"file_path\": \"output.txt\", \"content\": \"result\"}}",
            "stop_reason": "tool_use"
        }
    
    elif "执行" in last_message or "运行" in last_message:
        # 决定调用 Bash 工具
        return {
            "content": "决定执行命令。{\"tool\": \"Bash\", \"params\": {\"command\": \"npm test\"}}",
            "stop_reason": "tool_use"
        }
    
    else:
        # end_turn: 结束对话
        return {
            "content": "任务已完成。",
            "stop_reason": "end_turn"
        }


# 实际 Model API 调用示例(伪代码)
def real_model_api(messages):
    """
    实际 Model API 调用(伪代码)
    
    实际情况需要:
    1. 调用 Anthropic API 或其他 Model API
    2. 处理 API 认证
    3. 处理 API 响应格式
    """
    import anthropic
    
    client = anthropic.Anthropic(api_key="YOUR_API_KEY")
    
    response = client.messages.create(
        model="claude-sonnet-4-6",
        max_tokens=4096,
        messages=messages
    )
    
    return {
        "content": response.content[0].text,
        "stop_reason": response.stop_reason
    }

Model API 要点

要点说明Mini-Harness 实现
API 调用调用 Model API简化版模拟响应
认证处理API Key 等❌ 简化版暂不处理
响应格式content + stop_reason✅ 包含基本格式
错误处理API 错误❌ 简化版暂不处理

Step 5:完整 Mini-Harness

完整实现

# Mini-Harness 完整实现

class MiniHarness:
    """
    Mini-Harness: Agent Loop 的最小实现
    """
    
    def __init__(self, system_prompt=None):
        """
        初始化 Mini-Harness
        
        参数:
            system_prompt: 系统提示词(可选)
        """
        self.system_prompt = system_prompt or self.default_system_prompt()
        self.tools = self.create_tools()
        self.state = None
    
    def default_system_prompt(self):
        """默认 System Prompt"""
        return """
你是代码助手 Agent。你可以使用以下工具:

工具列表:
- Read: 读取文件(参数:file_path)
- Write: 写入文件(参数:file_path, content)
- Bash: 执行命令(参数:command)

约束:
- 每次只调用一个工具
- 工具调用后等待结果
- 完成任务后返回 end_turn
"""
    
    def create_tools(self):
        """创建工具映射"""
        return {
            "Read": self.tool_read,
            "Write": self.tool_write,
            "Bash": self.tool_bash
        }
    
    def tool_read(self, params):
        """Read 工具"""
        file_path = params.get("file_path")
        
        if not file_path:
            return "错误:缺少 file_path 参数"
        
        if not os.path.exists(file_path):
            return f"错误:文件 {file_path} 不存在"
        
        try:
            with open(file_path, 'r', encoding='utf-8') as f:
                content = f.read()
            return f"文件内容:\n{content}"
        except Exception as e:
            return f"错误:读取文件失败 - {str(e)}"
    
    def tool_write(self, params):
        """Write 工具"""
        file_path = params.get("file_path")
        content = params.get("content")
        
        if not file_path or not content:
            return "错误:缺少 file_path 或 content 参数"
        
        try:
            os.makedirs(os.path.dirname(file_path), exist_ok=True)
            with open(file_path, 'w', encoding='utf-8') as f:
                f.write(content)
            return f"成功:文件 {file_path} 已写入"
        except Exception as e:
            return f"错误:写入文件失败 - {str(e)}"
    
    def tool_bash(self, params):
        """Bash 工具"""
        command = params.get("command")
        
        if not command:
            return "错误:缺少 command 参数"
        
        try:
            result = subprocess.run(
                command,
                shell=True,
                capture_output=True,
                text=True,
                timeout=30
            )
            
            if result.returncode == 0:
                return f"命令输出:\n{result.stdout}"
            else:
                return f"错误:命令执行失败\n{result.stderr}"
        except subprocess.TimeoutExpired:
            return "错误:命令执行超时(30秒)"
        except Exception as e:
            return f"错误:执行命令失败 - {str(e)}"
    
    def initialize(self, prompt):
        """初始化"""
        self.state = {
            "messages": [
                {"role": "system", "content": self.system_prompt},
                {"role": "user", "content": prompt}
            ],
            "loops": 0,
            "tool_calls": 0
        }
        return self.state
    
    def agent_loop(self, model_api):
        """Agent Loop"""
        while True:
            messages = self.state["messages"]
            
            # Model 推理
            response = model_api(messages)
            
            stop_reason = response.get("stop_reason", "end_turn")
            
            if stop_reason == "end_turn":
                return response
            
            elif stop_reason == "tool_use":
                tool_use = self.extract_tool_use(response)
                
                tool_name = tool_use["name"]
                tool_params = tool_use["parameters"]
                
                if tool_name in self.tools:
                    tool_result = self.tools[tool_name](tool_params)
                else:
                    tool_result = f"错误:工具 {tool_name} 不存在"
                
                # 追加结果
                self.state["messages"].append({
                    "role": "assistant",
                    "content": response["content"]
                })
                
                self.state["messages"].append({
                    "role": "user",
                    "content": tool_result
                })
                
                # 更新状态
                self.state["loops"] += 1
                self.state["tool_calls"] += 1
                
                # 循环限制
                if self.state["loops"] > 20:
                    print("警告:循环超过 20 次,强制结束")
                    return response
    
    def extract_tool_use(self, response):
        """提取 tool_use"""
        content = response.get("content", "")
        
        import json
        import re
        
        json_match = re.search(r'\{[^}]+\}', content)
        if json_match:
            tool_info = json.loads(json_match.group())
            return {
                "name": tool_info.get("tool", "unknown"),
                "parameters": tool_info.get("params", {})
            }
        
        return {"name": "unknown", "parameters": {}}
    
    def run(self, prompt, model_api):
        """完整运行"""
        # 1. 初始化
        self.initialize(prompt)
        
        # 2. Agent Loop
        response = self.agent_loop(model_api)
        
        # 3. 返回结果
        return {
            "response": response,
            "loops": self.state["loops"],
            "tool_calls": self.state["tool_calls"],
            "messages": self.state["messages"]
        }


# 测试 Mini-Harness
def test_mini_harness():
    harness = MiniHarness()
    
    prompt = "读取 /tmp/test.txt 文件"
    
    result = harness.run(prompt, model_api)
    
    print("运行完成:")
    print(f"- 循环次数: {result['loops']}")
    print(f"- 工具调用次数: {result['tool_calls']}")
    print(f"- 最终响应: {result['response']['content']}")


# 运行测试
test_mini_harness()

测试输出

运行完成:
- 循环次数: 1
- 工具调用次数: 1
- 最终响应: 任务已完成。

Mini-Harness 的局限性

不包含功能

图表 代码
graph TB
    subgraph NotIncluded["Mini-Harness 不包含"]
        N1[权限系统
无安全检查] N2[上下文压缩
无压缩机制] N3[MCP 集成
无外部连接] N4[Skills 加载
无领域知识] N5[多 Agent
无子 Agent] end style NotIncluded fill:#FFE0E0
graph TB
    subgraph NotIncluded["Mini-Harness 不包含"]
        N1[权限系统
无安全检查] N2[上下文压缩
无压缩机制] N3[MCP 集成
无外部连接] N4[Skills 加载
无领域知识] N5[多 Agent
无子 Agent] end style NotIncluded fill:#FFE0E0
graph TB
    subgraph NotIncluded["Mini-Harness 不包含"]
        N1[权限系统
无安全检查] N2[上下文压缩
无压缩机制] N3[MCP 集成
无外部连接] N4[Skills 加载
无领域知识] N5[多 Agent
无子 Agent] end style NotIncluded fill:#FFE0E0
graph TB
    subgraph NotIncluded["Mini-Harness 不包含"]
        N1[权限系统<br/>无安全检查]
        N2[上下文压缩<br/>无压缩机制]
        N3[MCP 集成<br/>无外部连接]
        N4[Skills 加载<br/>无领域知识]
        N5[多 Agent<br/>无子 Agent]
    end
    
    style NotIncluded fill:#FFE0E0
不包含功能说明后续章节
权限系统无安全检查,所有操作自动执行第二十三章添加
上下文压缩无压缩机制,messages 可能溢出第二十三章添加
MCP 集成无外部系统连接第二十四章添加
Skills 加载无领域知识注入第二十四章添加
多 Agent 协作无子 Agent 派发第二十四章添加

安全风险

Mini-Harness 的安全风险:

风险说明后续解决
无权限检查所有操作自动执行添加权限系统
危险命令执行Bash 可执行任意命令添加 deny/ask/allow
文件覆盖Write 可覆盖任意文件添加路径限制
上下文溢出messages 无限制增长添加压缩机制

Mini-Harness 的价值

学习价值

图表 代码
graph TB
    subgraph LearningValue["学习价值"]
        V1[理解核心
Agent Loop 核心] V2[动手实践
代码实现] V3[最小实现
去除复杂细节] V4[渐进扩展
逐步添加功能] end style LearningValue fill:#E0FFE0
graph TB
    subgraph LearningValue["学习价值"]
        V1[理解核心
Agent Loop 核心] V2[动手实践
代码实现] V3[最小实现
去除复杂细节] V4[渐进扩展
逐步添加功能] end style LearningValue fill:#E0FFE0
graph TB
    subgraph LearningValue["学习价值"]
        V1[理解核心
Agent Loop 核心] V2[动手实践
代码实现] V3[最小实现
去除复杂细节] V4[渐进扩展
逐步添加功能] end style LearningValue fill:#E0FFE0
graph TB
    subgraph LearningValue["学习价值"]
        V1[理解核心<br/>Agent Loop 核心]
        V2[动手实践<br/>代码实现]
        V3[最小实现<br/>去除复杂细节]
        V4[渐进扩展<br/>逐步添加功能]
    end
    
    style LearningValue fill:#E0FFE0
价值说明重要性
理解核心通过代码理解 Agent Loop⭐⭐⭐⭐⭐
动手实践实际编码实现⭐⭐⭐⭐⭐
最小实现去除复杂细节,聚焦核心⭐⭐⭐⭐
渐进扩展逐步添加功能,深入理解⭐⭐⭐⭐

本章小结

  • Mini-Harness 定义:Agent Loop 的最小实现——observe→think→act→feedback
  • 核心功能:初始化、Agent Loop、基本工具(Read/Write/Bash)、完成处理
  • 不包含功能:权限系统、上下文压缩、MCP、Skills、多 Agent
  • 初始化模块:接收 prompt,构建 messages 数组
  • Agent Loop:observe→think→decide→act→feedback 循环
  • 基本工具:Read(读取)、Write(写入)、Bash(执行)
  • Model API:接收 messages,返回响应(content + stop_reason)
  • 完整实现:MiniHarness 类,包含初始化、Loop、工具、运行
  • 局限性:无安全检查、无压缩、无扩展
  • 安全风险:无权限、危险命令、文件覆盖、上下文溢出
  • 学习价值:理解核心、动手实践、最小实现、渐进扩展

预告:下一篇我们添加工具系统与权限控制,增强 Mini-Harness 的安全性。



相关内容

如果这篇文章对你有帮助,欢迎请我喝杯咖啡 ☕
Cygnus Yang 支付宝支付宝
Cygnus Yang 微信微信