动手实现一个 Coding Agent

实现 AI chatbot 那篇实现了一个带工具的聊天机器人,它能自动判断什么时候该调用天气查询工具。

你可能已经意识到了:这个 chatbot 能自己决定是否调用工具,是不是已经算 Agent 了?

广义上说确实算,但它有一个关键限制,让它还够不上真正的 Agent。这篇文章就从这个限制出发,把 chatbot 改造成一个能自主写代码、修 bug 的编程 Agent。改动不大,核心就一行。

chatbot 的局限

回顾 chatbot 第二版的核心逻辑:

while True:
    user_input = input("你: ")
    messages.append({"role": "user", "content": user_input})

    response = client.chat.completions.create(
        model="deepseek-v4-flash", messages=messages, tools=tools,
        extra_body={"thinking": {"type": "disabled"}}
    )
    assistant_message = response.choices[0].message

    # 模型决定调用工具
    if assistant_message.tool_calls:
        # 执行工具,把结果塞回上下文
        ...
        # 再调一次模型,生成最终回答
        response = client.chat.completions.create(...)
        assistant_message = response.choices[0].message

    messages.append({"role": "assistant", "content": assistant_message.content})
    print(f"AI: {assistant_message.content}")

看到问题了吗?模型只有一次调用工具的机会。调完工具拿到结果后,就必须直接生成文本回复了。

如果任务需要多个步骤呢?比如你说「buggy.py 里有个 bug,帮我修一下,改完跑个测试确认」,这需要连续三步:读文件看代码 → 写文件改 bug → 执行命令跑测试。我们的 chatbot 只能调一次工具就得交卷,后面的步骤做不了。

这就是 chatbot 和 Agent 的核心区别。chatbot 是一问一答,Agent 能自主循环执行多个步骤,直到任务完成。