agentscope.middlewareReMeMiddleware
class ReMeMiddleware(MiddlewareBase)
agentscope/middleware/_longterm_memory/_reme/_middleware.py:88–552Re Me 中间件,在智能体执行流程中提供横切扩展。位于 agentscope.middleware 包,继承自 MiddlewareBase。核心成员包括 close、on_reply、on_reasoning、on_system_prompt、list_tools。
ReMe is embedded in-process (no separate service): the middleware
instantiates a :class:reme.ReMe application whose LLM-backed jobs use
the chat_model configured at construction. The app is built and
owned by the middleware — pass workspace_dir and optionally a
Parameters with chat_model / embedding_model; it is created
lazily on first use. When chat_model is omitted, the AgentScope config
supplies the LLM from ReMe's LLM_* environment variables. Providing
an embedding_model enables the vector store; otherwise search stays
keyword-only.
The model is fixed at construction (never taken from an agent), so the
embedded app's single LLM is well-defined even when one middleware
instance is shared across several agents. Per-conversation state — the
ReMe session_id — is instead read live from each agent at hook
time and never stored, keeping shared use isolated. Background
retrieval tasks are likewise tracked per session_id so concurrent
replies in different sessions never clobber each other's in-flight
search.
AgentScope middleware has no framework-managed lifecycle, so the app
is built once and started lazily on first use (idempotent). Call
:meth:close for explicit teardown of the embedded app.
Example::
from agentscope.middleware import ReMeMiddleware
from agentscope.tool import Toolkit
mw = ReMeMiddleware(
workspace_dir=".reme",
parameters=ReMeMiddleware.Parameters(mode="both"),
)
agent = Agent(
...,
toolkit=Toolkit(tools=await mw.list_tools()),
middlewares=[mw],
)
嵌套类摘要Nested Class Summary
| 类Class | 类型Kind | 说明Description |
|---|---|---|
Parameters | 类class | 参数,驱动智能体的推理、工具调用与会话执行。 User-tunable ReMe memory parameters. |
构造器摘要Constructor Summary
| 构造器Constructor | 说明Description |
|---|---|
def __init__(*, workspace_dir: str = '.reme', parameters: Parameters | None = None) -> None | 初始化 `ReMeMiddleware` 实例。 Initialize the ReMe middleware. |
方法摘要Method Summary
| 方法Method | 说明Description |
|---|---|
async def close() -> Noneasync | 关闭连接并释放相关资源。 Close the embedded ReMe app. |
async def on_reply(agent: 'Agent', input_kwargs: dict, next_handler: Callable[..., AsyncGenerator]) -> AsyncGeneratorasync | 拦截并扩展回复流程。 Handles the reply event. |
async def on_reasoning(agent: 'Agent', input_kwargs: dict, next_handler: Callable[..., AsyncGenerator]) -> AsyncGenerat…async | 拦截并扩展推理阶段。 Inject background-retrieved memories before a reasoning step. |
async def on_system_prompt(agent: 'Agent', current_prompt: str) -> strasync | 拦截并修改系统提示词。 Append search-tool instructions to the system prompt. |
async def list_tools() -> list['ToolBase']async | 列出当前连接可用的工具。 List memory tools provided by this middleware. |
构造器详情Constructor Detail
ReMeMiddleware
def __init__(*, workspace_dir: str = '.reme', parameters: Parameters | None = None) -> None
初始化 ReMeMiddleware 实例。
The ReMe session_id (which scopes write-back memory cards) is not taken here — it is read from agent.state.session_id at hook time (every agent has one; AgentState generates it), mirroring :class:TracingMiddleware.
| 名称Name | 类型Type | 说明Description |
|---|---|---|
workspace_dirkw默认default '.reme' | str | 工作区目录(类型 `str`)。ReMe workspace (vault) directory for memory cards and indexes. Defaults to `".reme"`. |
parameterskw默认default None | Parameters | None | 参数(类型 `Parameters | None`)。User-tunable parameters (`chat_model` / `embedding_model` / `mode` / `top_k`) whose schema the agent service renders as a configuration form. When `None`, defaults are used. Providing an `embedding_model` also enables ReMe's vector store (otherwise search is keyword-only). |
agentscope/middleware/_longterm_memory/_reme/_middleware.py:184–222方法详情Method Detail
close
async def close() -> None
关闭连接并释放相关资源。
AgentScope does not manage middleware lifecycle, so call this explicitly for clean teardown (e.g.
agentscope/middleware/_longterm_memory/_reme/_middleware.py:286–294on_reply
async def on_reply(agent: 'Agent', input_kwargs: dict, next_handler: Callable[..., AsyncGenerator]) -> AsyncGenerator
拦截并扩展回复流程。
Handles the reply event.
| 名称Name | 类型Type | 说明Description |
|---|---|---|
agent | 'Agent' | 智能体(类型 `'Agent'`)。The agent. |
input_kwargs | dict | 输入关键字参数(类型 `dict`)。The input kwargs. |
next_handler | Callable[..., AsyncGenerator] | 下一个处理器(类型 `Callable[..., AsyncGenerator]`)。The next handler. |
agentscope/middleware/_longterm_memory/_reme/_middleware.py:312–380on_reasoning
async def on_reasoning(agent: 'Agent', input_kwargs: dict, next_handler: Callable[..., AsyncGenerator]) -> AsyncGenerator
拦截并扩展推理阶段。
The search started in :meth:on_reply runs concurrently; this hook polls it before each reasoning step and, once it is finished, appends the retrieved memories to the agent's context so the next model call sees them.
| 名称Name | 类型Type | 说明Description |
|---|---|---|
agent | 'Agent' | 智能体(类型 `'Agent'`)。The agent. |
input_kwargs | dict | 输入关键字参数(类型 `dict`)。The input kwargs. |
next_handler | Callable[..., AsyncGenerator] | 下一个处理器(类型 `Callable[..., AsyncGenerator]`)。The next handler. |
agentscope/middleware/_longterm_memory/_reme/_middleware.py:385–416on_system_prompt
async def on_system_prompt(agent: 'Agent', current_prompt: str) -> str
拦截并修改系统提示词。
Append search-tool instructions to the system prompt.
| 名称Name | 类型Type | 说明Description |
|---|---|---|
agent | 'Agent' | 智能体(类型 `'Agent'`)。The agent whose system prompt is being transformed. |
current_prompt | str | 当前提示词(类型 `str`)。The system prompt produced by previous middleware. |
agentscope/middleware/_longterm_memory/_reme/_middleware.py:421–441list_tools
async def list_tools() -> list['ToolBase']
列出当前连接可用的工具。
List memory tools provided by this middleware.
agentscope/middleware/_longterm_memory/_reme/_middleware.py:443–454嵌套类详情Nested Class Detail
Parameters
class Parameters参数,驱动智能体的推理、工具调用与会话执行。位于 agentscope.middleware 包。
The agent service parses this schema to render a configuration
form. Structural wiring (workspace_dir) stays on the constructor.