在AI Agent应用开发中,Prompt的管理往往分散在代码中,难以实现统一维护和动态调整。当需要优化Prompt或进行A/B测试时,往往需要修改代码并重新部署。为解决这一痛点,agentscope-extension-nacos扩展组件提供了NacosPromptListener能力,支持将Prompt托管至MSE Nacos,实现Prompt的集中管理、变量渲染和热更新,无需重启应用即可动态调整Agent行为。
前提条件
-
Python
3.9及以上版本。 -
已在MSE Nacos中完成Prompt管理。
-
已安装AgentScope
1.0.7及以上版本。
安装扩展组件
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
-
登录MSE注册配置中心管理控制台,在顶部菜单栏选择地域。
-
在左侧导航栏,选择Prompt 管理,在页面左上角选择命名空间,然后单击创建 Prompt。
-
在创建 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())
核心功能说明
|
功能 |
说明 |
|
变量渲染 |
模板中的 |
|
热更新 |
在 Nacos 控制台修改 Prompt 后,Agent 会自动获取最新配置并更新,无需重启 |
|
懒初始化 |
支持显式调用 |
动态更新与灰度发布
场景一:Prompt 热更新
当需要优化 Prompt 时,只需在 MSE Nacos 控制台编辑 Prompt 并发布新版本,所有绑定的 Agent 会自动获取最新配置:
-
在Prompt 管理中找到目标 Prompt,点击编辑。
-
修改Prompt模板内容。
-
填写新的版本号(如
1.0.1)和提交信息。 -
点击发布。
版本发布后无法修改,所有变更都需要发布新版本。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
|
参数 |
类型 |
必填 |
说明 |
|
|
str |
是 |
对应MSE Nacos控制台中创建的Prompt名称 |
|
|
ClientConfig |
否 |
Nacos客户端配置,不传则使用全局配置 |
|
|
dict |
否 |
用于渲染模板变量的字典 |
|
方法 |
说明 |
|
|
将Agent绑定到Listener,Prompt更新时自动同步 |
|
|
解除Agent绑定 |
|
|
显示初始化,加载Prompt并注册变更监听 |
最佳实践
-
Prompt 版本管理:为每次Prompt变更发布新版本,便于追溯和回滚。
-
环境隔离:使用不同的命名空间隔离开发、测试、生产环境的Prompt。
-
变量复用:将可变部分(如角色、领域、语言)抽取为模板变量,提高Prompt复用性。