arrow_back返回现场笔记
AI 已发布 5 Aug 2026

构建一个可工作的AI代理:实用词汇表

AI代理实际上是什么,它与聊天机器人的区别,以及构建一个能工作的代理所需的组件。

AI代理是一个程序,它接收一个目标,决定一系列操作,并使用工具执行这些操作,直到目标被达成或放弃。这不同于聊天机器人,聊天机器人只是响应消息。代理会规划、调用函数、检查结果并调整。如果你只是通过浏览器使用过ChatGPT,构建你的第一个代理是模型停止充当文本生成器、开始充当更大系统中的组件的地方。

核心循环

每个代理,无论如何营销,都运行同一循环的某个版本:观察、思考、行动、重复。具体来说:

  1. 代理接收一个任务("找到下个月到里斯本的最便宜的航班,并起草一份电子邮件摘要")。
  2. 它调用LLM,传入任务和可用工具的描述。
  3. 模型返回最终答案或工具调用,例如 search_flights(destination="Lisbon", month="2025-06")
  4. 你的代码执行该函数,获得真实结果,并将其反馈到模型的上下文中。
  5. 模型决定接下来做什么:调用另一个工具、请求澄清或完成。

这种模式通常被称为ReAct循环(推理加行动),它是LangChain代理执行器、LlamaIndex代理和OpenAI函数调用API等框架的骨干。你可以仅使用LLM API和一个 while 循环在不到100行Python代码中实现整个过程——框架增加的是便利性,而不是魔法。

工具才是使其成为代理的关键

没有工具的模型只能说话。给它函数,它就能行动。工具通常是普通Python函数,用描述其名称、参数和目的的模式来包装,这样模型就知道何时以及如何调用它们。例子:

def get_weather(city: str) -> str:
    """Return current weather for a given city."""
    resp = requests.get(f"https://api.weather.example/v1/{city}")
    return resp.json()["summary"]

使用OpenAI的函数调用,你在这个函数旁边传递一个JSON模式,模型输出结构化调用,如 {"name": "get_weather", "arguments": {"city": "Lisbon"}} 而不是自由格式文本。你的代码解析它,运行真实函数,并将结果作为对话中的新消息返回。重复直到模型有足够的信息来回答。

内存和状态

单个API调用在其上下文窗口之外没有内存。代理需要显式状态:消息的运行列表(对话历史),通常还有一个单独的存储用于更长期的事实。对于短任务,代表对话的Python字典列表就足够了。对于需要跨会话记住事情的代理,你会使用向量数据库(Chroma、Pinecone、Qdrant)通过嵌入来存储和检索相关的过去信息。

早期不要过度设计这个。很多"代理"项目失败不是因为LLM弱,而是因为状态管理很糟糕:消息重复、上下文增长无界,或丢失了哪个工具调用属于哪个结果的追踪。

一个最小工作示例

这是使用OpenAI API的简陋代理的形式,没有框架:

messages = [{"role": "user", "content": "What's the weather in Lisbon?"}]

while True:
    response = client.chat.completions.create(
        model="gpt-4o",
        messages=messages,
        tools=[weather_tool_schema],
    )
    msg = response.choices[0].message
    if msg.tool_calls:
        for call in msg.tool_calls:
            result = get_weather(**json.loads(call.function.arguments))
            messages.append(msg)
            messages.append({
                "role": "tool",
                "tool_call_id": call.id,
                "content": result,
            })
    else:
        print(msg.content)
        break

那是一个真实的、有效的代理。其他所有东西——规划策略、多代理协调、检索管道——都建立在这个循环之上。

它在哪里失败

代理以可预测的方式失败:当模型无法判断其是否成功时的无限工具调用循环、幻觉函数参数和来自重复调用昂贵工具的成本失控。用硬迭代上限(比如10步)防止循环,并在开发期间记录每个工具调用。在执行任何涉及真实系统的操作之前验证参数——能发送电子邮件或运行shell命令的代理需要与面向用户的代码相同的输入清理,因为LLM实际上是生成该输入的不可信用户。

接下来去哪里

循环工作后,有趣的问题就开始了:在单代理和多代理设计之间选择、决定授予多少自主权,以及当输出不确定时可靠地测试代理。如果你想从这里继续构建,Korra Studio的AI和Python课程会深入讲解检索增强生成、提示设计和工具调用模式。

本文由人工智能协助撰写,经 Michal Pilch(CISSP)审核并发布,Korra Studio。

准备好更进一步了吗?

这是来自 Korra Studio 知识库的笔记之一——该平台将每个主题与一对一指导相结合。

免费开始arrow_forward