AgentScope接入Nacos Prompt管理

更新时间:
复制 MD 格式

在AI Agent应用开发中,Prompt的管理往往分散在代码中,难以实现统一维护和动态调整。当需要优化Prompt或进行A/B测试时,往往需要修改代码并重新部署。为解决这一痛点,agentscope-extension-nacos扩展组件提供了NacosPromptListener能力,支持将Prompt托管至MSE Nacos,实现Prompt的集中管理、变量渲染和热更新,无需重启应用即可动态调整Agent行为。

前提条件

安装扩展组件

pip install agentscope-extension-nacos

配置 Nacos 连接

方式一:环境变量配置(推荐)

# Nacos 服务器地址(必需)
export NACOS_SERVER_ADDRESS=mse-xxx.nacos.mse.aliyuncs.com:8848

# Nacos 命名空间(必需)
export NACOS_NAMESPACE_ID=your-namespace-id

# 阿里云 MSE 认证(必需)
export NACOS_ACCESS_KEY=your-access-key
export NACOS_SECRET_KEY=your-secret-key

方式二:代码配置

from v2.nacos import ClientConfigBuilder
from agentscope_extension_nacos.utils.nacos_service_manager import NacosServiceManager

client_config = (ClientConfigBuilder()
                 .server_address("mse-xxx.nacos.mse.aliyuncs.com:8848")
                 .namespace_id("your-namespace-id")
                 .access_key("your-access-key")
                 .secret_key("your-secret-key")
                 .build())

# 设置为全局配置
NacosServiceManager.set_global_config(client_config)

在 MSE Nacos 控制台创建 Prompt

  1. 登录MSE注册配置中心管理控制台,在顶部菜单栏选择地域。

  2. 在左侧导航栏,选择Prompt 管理,在页面左上角选择命名空间,然后单击创建 Prompt。

  3. 在创建 Prompt页面,完成以下参数配置:

    参数

    示例值

    说明

    Prompt 名称

    my-assistant

    用于在代码中通过 prompt_key 引用该 Prompt

    版本号

    1.0.0

    遵循语义化版本号规范(主版本.次版本.修订版本)

    功能描述

    技术助手提示词

    对 Prompt 作用和使用场景的简单介绍

    Prompt模板

    见下方示例

    Prompt 的具体内容,支持 {{参数名}} 变量语法

Prompt 模板示例

你是{{role}},一个专注于{{domain}}领域的智能助手。请使用{{language}}回复用户问题。
说明

Prompt 模板支持 {{变量名}} 语法定义可替换参数。在 Agent 代码中,通过 args 参数传入对应的变量值,扩展组件会自动完成渲染。

在AgentScope中使用NacosPromptListener

基础用法

import asyncio
from agentscope.agent import ReActAgent
from agentscope.model import DashScopeChatModel
from agentscope.formatter import DashScopeChatFormatter
from agentscope.memory import InMemoryMemory
from agentscope_extension_nacos.prompt.nacos_prompt_listener import NacosPromptListener


async def main():
    # 1. 创建 NacosPromptListener
    # prompt_key 对应 MSE Nacos 控制台中创建的 Prompt 名称
    # args 用于渲染 Prompt 模版中的 {{变量名}}
    prompt_listener = NacosPromptListener(
        prompt_key="my-assistant",  # 对应控制台中的 Prompt 名称
        args={
            "role": "技术专家",
            "domain": "云计算和微服务",
            "language": "中文",
        },
    )

    # 2. 创建 Agent(sys_prompt 初始为空,将由 Listener 设置)
    agent = ReActAgent(
        name="TechExpert",
        sys_prompt="",
        model=DashScopeChatModel(
            model_name="qwen-max",
            api_key="your-api-key",
        ),
        formatter=DashScopeChatFormatter(),
        memory=InMemoryMemory(),
    )

    # 3. 将 Agent 绑定到 PromptListener
    prompt_listener.attach_agent(agent)

    # 4. 初始化 Listener(从 Nacos 加载 Prompt 并注册变更监听)
    await prompt_listener.initialize()

    # 此时 agent 的 sys_prompt 已被设置为:
    # "你是技术专家,一个专注于云计算和微服务领域的智能助手。请使用中文回复用户问题。"

    # 5. 使用 Agent 进行对话
    from agentscope.message import Msg
    response = await agent(Msg(name="user", content="什么是微服务架构?", role="user"))
    print(response.content)

    # 6. 清理资源
    prompt_listener.detach_agent()


if __name__ == "__main__":
    asyncio.run(main())
    

核心功能说明

功能

说明

变量渲染

模板中的 {{变量名}} 会被 args 字典中对应的值替换

热更新

在 Nacos 控制台修改 Prompt 后,Agent 会自动获取最新配置并更新,无需重启

懒初始化

支持显式调用 initialize() 或在首次使用时自动初始化

动态更新与灰度发布

场景一:Prompt 热更新

当需要优化 Prompt 时,只需在 MSE Nacos 控制台编辑 Prompt 并发布新版本,所有绑定的 Agent 会自动获取最新配置:

  1. 在Prompt 管理中找到目标 Prompt,点击编辑。

  2. 修改Prompt模板内容。

  3. 填写新的版本号(如 1.0.1)和提交信息。

  4. 点击发布。

重要

版本发布后无法修改,所有变更都需要发布新版本。Prompt 管理默认保存 30 天内的历史版本,支持快速回滚。

场景二:多角色 Agent 配置

通过args参数,同一个Prompt模板可以渲染为不同角色的Agent:

# 模板: "你是{{role}},专注于{{domain}}领域。"

# 技术支持 Agent
tech_listener = NacosPromptListener(
    prompt_key="support-agent",
    args={"role": "技术支持工程师", "domain": "云产品技术问题"},
)

# 销售顾问 Agent
sales_listener = NacosPromptListener(
    prompt_key="support-agent",
    args={"role": "销售顾问", "domain": "产品选型和报价"},
)

API参考

NacosPromptListener

参数

类型

必填

说明

prompt_key

str

是

对应MSE Nacos控制台中创建的Prompt名称

nacos_client_config

ClientConfig

否

Nacos客户端配置,不传则使用全局配置

args

dict

否

用于渲染模板变量的字典

方法

说明

attach_agent(agent)

将Agent绑定到Listener,Prompt更新时自动同步

detach_agent()

解除Agent绑定

initialize()

显示初始化,加载Prompt并注册变更监听

最佳实践

  1. Prompt 版本管理:为每次Prompt变更发布新版本,便于追溯和回滚。

  2. 环境隔离:使用不同的命名空间隔离开发、测试、生产环境的Prompt。

  3. 变量复用:将可变部分(如角色、领域、语言)抽取为模板变量,提高Prompt复用性。

相关文档