**构建一个智能体**,通过产品内聊天、Claude/ChatGPT连接器、Slack三种渠道分发,**解锁新使用方式与收入**;最佳智能体=最佳产品。

ASHPREET BEDI(@ASHPREETBEDI)教程 · 已翻译 · 约 13 分钟
阅览室 · AI 最佳实践#产品#智能体#代理#构建#API#分发原文

本文面向希望为自己的产品构建智能体的工程领导者。它将引导您了解如何构建一个智能体,该智能体可在您的产品内部使用,也可作为连接器集成到Claude和ChatGPT中,或部署在Slack中。

目标是为您的用户提供一种使用产品的新方式,从而解锁新的分发渠道和收入机会。

为什么为您的产品构建智能体

人们使用和发现软件的方式正在发生变化。

软件越来越多地通过Claude和ChatGPT等智能体被使用,用户也越来越倾向于使用可通过智能体操作的软件。到本十年末,智能体将成为大多数软件的主要消费方。您的产品将以三种方式被使用:

  • 通过用户的智能体,例如:Claude、ChatGPT
  • 通过您产品内部的智能体
  • 通过用户的智能体与您的智能体对话

很快,拥有最佳智能体将与拥有最佳产品画上等号。

一次构建,处处服务

目标是构建一个智能体,并在三个地方提供服务:

1. 您的产品。 作为产品内部的聊天界面。用户以自然语言与您的产品交互。这是您掌控、拥有并从中学习的体验。

2. Claude和ChatGPT。 作为Claude或ChatGPT的连接器。用户通过他们选择的智能体访问您的产品。

3. Slack。 作为其Slack工作区中的一个智能体。用户在其团队工作的频道中访问您的产品。

如何阅读本指南

像阅读普通文章一样,从头到尾通读本指南。想略读也行。不要复制、不要跟着操作、不要运行任何代码。本指南中的代码展示了我们正在构建的内容的形态,其中部分经过精简以保持可读性。在结尾,我会提供完整的代码库,随时可以交给你的编码代理。

构建你的代理

第一步是为你的产品构建一个 v0 代理。

假设你的产品是一个面向小型企业的发票平台。

你的用户发送发票。你的产品追踪谁付了款、谁没付。我们将以这个产品为例,贯穿本文构建这个代理。

代理的 v0 = 模型 + 工具 + 指令

  • 模型:协调工具的智能体
  • 工具:代理可以执行的操作;是你产品 API 的轻量封装
  • 指令:代理如何运作;你产品的规则与政策

以下是代理第一版的样子:

from agno.agent import Agent
from your_product.api import (
    get_overdue_invoices,
    get_customer_history,
    get_open_disputes,
    send_payment_reminder,
)

invoice_agent = Agent(
    id="invoice-agent",
    model="openai:gpt-5.6",
    tools=[
        get_overdue_invoices,
        get_customer_history,
        get_open_disputes,
        send_payment_reminder,
    ],
    instructions="""
    You help small business owners get paid on time.

    Before you chase an invoice, pull the customer's history and check for open disputes.
    A reliable customer a few days late gets a friendly reminder.
    Past 60 days, the tone turns firm.
    Don't chase invoices with open disputes.
    """,
)

为何不直接将API作为工具调用暴露?

有一种流行观点认为,你应该将产品的API作为工具调用暴露出来,让用户的代理自行处理。这对开发者工具来说没问题,但对于那些融入了团队专业知识和政策的产品则不然。

一个通用代理直接使用你的原始API,并不具备你的团队多年积累的判断力。它会追着有争议的发票不放,并因五天的延迟而向你的最佳客户发送措辞强硬的邮件。编排本身就是产品,如果你希望用户获得最佳体验,就需要自己掌控代理体验。

改进你的代理

v0版本可行,但远非产品,更别提最佳产品了。

下一步是改进v0代理。你需要解决三个大问题,还有一些锦上添花的小问题。

1. 缺乏会话连续性。 每次运行都是独立的,这意味着我们需要通过向上下文窗口添加会话历史来构建多轮对话体验。

2. 上下文过多。 get_overdue_invoices可能返回50张发票,所有这些都会包含在后续对话的上下文窗口中,使得之后的每一轮都变得更慢、更昂贵、更笨拙。

3. 对产品缺乏了解。 代理了解你的API,但不了解你的产品。“滞纳金如何计算?”和“我可以用欧元开发票吗?”这类问题不在API中。它们存在于你的帮助中心,而你无法将帮助中心粘贴到指令中。

另外两个非必需但能提升产品体验的问题:

4. 学习能力。 我们希望用户能体验到与一位熟悉其账户多年的人合作的感觉。通过学习,代理可以构建每位用户的画像:那位总是延迟五天但总会付款的客户,那位希望看到总额而非段落的老板。最佳代理从经验中学习。

5. 过往会话背景。 很多时候,用户会开启新会话,但谈论的内容与最近两次会话相同。赋予你的代理搜索过往会话的能力。

以下是你的代理的v1版本:

from os import getenv

from agno.db.postgres import PostgresDb
from agno.knowledge import Knowledge
from agno.learn import LearningMachine
from agno.vectordb.pgvector import PgVector

db = PostgresDb(db_url=getenv("DATABASE_URL"))
knowledge = Knowledge(vector_db=PgVector(db_url=db_url, table_name="product_docs"))

invoice_agent = Agent(
    ...,  # the agent from before
    # Session continuity
    db=db,
    add_history_to_context=True,
    num_history_runs=5,
    read_chat_history=True,
    # Context of past sessions
    search_past_sessions=True,
    # Offload heavy tool results
    offload_tool_results=True,
    # Knowledge of your product
    knowledge=knowledge,
    # Continuous Learning from experience
    learning=LearningMachine(
        user_memory=True,
        user_profile=True,
        entity_memory=True,
    ),
)

现在,你的代理具备了记忆、精简的上下文窗口、对产品文档的访问权限,并且随着使用会不断优化。它已经准备好成为一个产品了。

将你的代理转化为产品

下一步是将代理嵌入到你的产品中。为此,你需要:

  1. 一个API,供你的产品调用。
  2. 流式传输,实时传递推理过程和工具调用。
  3. 会话与运行管理,以便查看过去的对话、重命名线程、删除它们,并能从上周的对话中恢复。

Agno的代理运行时,AgentOS,将你的代理封装在一个FastAPI应用中,提供80多个预构建端点,用于构建你的产品。如下所示:

from agno.os import AgentOS

invoice_agent = Agent(
    ...,  # the v1 agent from before
)

agent_os = AgentOS(agents=[invoice_agent], db=db, tracing=True)
app = agent_os.get_app()

if __name__ == "__main__":
    agent_os.serve(app="invoice_agent:app")

现在,你的代理已作为REST API可用。你的产品聊天面板现在是一个轻客户端,调用AgentOS端点:

curl https://agents.your-product.com/agents/invoice-agent/runs \
  -d "message=Who owes me money?" \
  -d "user_id=usr_1042" \
  -d "session_id=chat_881" \
  -d "stream=true"

响应通过SSE流式传输,包含推理和工具调用,因此你的面板显示代理正在工作,而不是加载图标。发送相同的会话ID,对话将从上次中断的地方继续。

运行端点只是产品需求的一小部分。

AgentOS处理数据隔离,确保一个客户永远无法获取另一个客户的线程。它处理持久性,使失败运行能优雅恢复。它支持后台执行,使长时间运行的任务不会阻塞UI。当网络中断时,它会恢复流式传输。它处理认证、RBAC,并在HTTP层强制执行代理和工具级别的治理。

它记录每一次调用,追踪每一次运行,并安排周期性任务。

AgentOS将你的代理转化为产品。

在Claude和ChatGPT中使用你的智能体

许多用户不会打开你的产品来提问。他们更倾向于通过Claude或ChatGPT来使用它。对抗这一趋势毫无意义。

将你的智能体作为MCP服务器提供服务,使其成为这些应用中的连接器:

from fastmcp.server.auth.providers.workos import AuthKitProvider

agent_os = AgentOS(
    ...,  # from before
    mcp=MCPConfig(
        tools=[
            invoice_agent.as_tool(
                name="invoice_agent",
                description=(
                    "Talk to the invoicing agent. Send plain language. "
                    "Pass session_id back to continue the conversation."
                ),
            )
        ],
        default_tools=False,
    ),
    mcp_auth=AuthKitProvider(
        authkit_domain=getenv("AUTHKIT_DOMAIN"),
        base_url=getenv("AGENTOS_URL"),
    ),
)

你的用户的Claude不会将你的API视为四十个扁平工具,并寄希望于它能按正确顺序调用它们。它获得的是一个接受自然语言的单一工具,其背后是你的智能体,运行在你的基础设施上。他们的智能体处理对话,你的智能体处理工作。

现在,你的智能体可以作为MCP服务器使用。Claude、ChatGPT或任何其他MCP客户端都可以连接到它并使用你的智能体。新的分发渠道就此解锁。

在 Slack 中分发你的代理

你的代理应在用户所在之处与他们相遇:Slack、Discord、Telegram、WhatsApp。AgentOS 将这些平台作为接口,通过几行代码即可在这些渠道分发你的代理:

from agno.os.interfaces.slack import Slack

agent_os = AgentOS(
    ...,  # from before
    interfaces=[Slack(agent=invoice_agent, resolve_user_identity=True)],
)

AgentOS 现在将使你的代理在 Slack 上可用。resolve_user_identity 标志会将用户的原始 Slack ID 转换为他们的电子邮件,因此如果你的产品以电子邮件作为用户标识,会话和记忆将在所有界面保持一致。

从一个提示词开始

我们涵盖了很多内容:

  • 使用 Agno 为你的产品构建代理。
  • 使用 AgentOS 将其作为 API 和 MCP 服务器提供服务。
  • 通过你的产品、Claude、ChatGPT 和 Slack 分发它。

要开始使用,请访问 agno.com,选择你的云平台,并将设置提示词交给你的编码代理。它会为该云平台克隆一个预构建的 AgentOS 模板,设置你的平台,并帮助你构建第一个代理。

如果你需要专门帮助使你的产品具备代理能力,与我预约时间。感谢阅读。

你也可以在我们的博客上阅读这篇文章。
已读完 · 本文由熊猫易读翻译重排