在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複用性。