如何用 Memori 的 TiDB Zero 自动开通一次性开发数据库?
【免费下载链接】MemoriMemori is agent-native memory infrastructure. A LLM-agnostic layer that turns agent execution and conversation into structured, persistent state for production systems. Built for enterprise, Memori works with the data infrastructure you already run, no rip-and-replace, and deploys across managed cloud, single-tenant cloud, VPC, and on-premises.项目地址: https://gitcode.com/GitHub_Trending/me/Memori
如果你不想为了跑一段 Memori 代码先申请一个正式的数据库账号、创建数据库、配置网络,Memori 的 BYODB provisioning 功能可以直接替你开通一个 TiDB Cloud Zero 一次性实例:它向 TiDB Zero 端点发一个请求,拿到带凭据的连接字符串(DSN),用 PyMySQL 建立连接,并自动建好 Memori 所需的存储结构。适合开发、测试等用完即弃的场景,生产环境仍应使用你自己的 TiDB / TiDB Cloud 实例。
前提条件
- 已安装 Python,能通过
pip安装包。 - 安装带
tidb-zero额外依赖的 Memori。该 extra 实际引入certifi>=2024.0.0和pymysql>=1.1.2(见 pyproject.toml):
pip install "memori[tidb-zero]"- 默认端点为
https://zero.tidbapi.com/v1beta1/instances(预览端点)。如果 TiDB 变更了端点,可通过环境变量MEMORI_TIDB_ZERO_URL覆盖;如果要求 bearer 鉴权,则设置TIDB_ZERO_API_KEY,Memori 会将其放入Authorization: Bearer <key>请求头。两个环境变量都不设置时,直接匿名 POST 请求默认端点。
以上配置说明来自 docs/memori-byodb/databases/tidb.mdx,请求行为可在 tidb_zero.py 中核对。
方式一:用 CLI 开通
python -m memori provision tidb-zero等价的显式写法:
python -m memori provision --provider tidb-zeroCLI 内部固定以build=True调用 provisioning(见 provisioning/_manager.py),即开通成功后会立即执行mem.config.storage.build()建好存储结构,然后打印结果。开通成功时你会看到类似这样的提示(DSN 中的密码会被替换为****,这是 redact_dsn 的脱敏行为):
Provisioned database is ready. Provider: tidb-zero Family: mysql DSN: mysql://user:****@host:4000/memori Claim URL: https://... Expires at: ...Claim URL和Expires at两项只在 TiDB Zero 响应里携带claimInfo.claimUrl或expiresAt字段时才会出现(见 tidb_zero.py 的parse_tidb_zero_response)。这个实例是一次性的,Expires at就是它的到期时间。
方式二:在 Python 中开通并直接使用
不需要单独跑 CLI,一行调用就能拿到一个已建好存储结构的Memori实例(文档示例):
from memori import Memori mem = Memori.provision(provider="tidb-zero", build=True)Memori.provision的完整签名(见 memori/init.py):
Memori.provision( *, provider: str, # "tidb-zero" build: bool = True, # True 时自动执行 storage.build() cache: bool = True, # False 时跳过本地缓存,每次都新开通 tag: str = "memori", # 缓存键的一部分 cache_key: str | None = None, **kwargs, # 可透传给 provider,如 api_key、timeout )provider参数目前只支持tidb-zero(MYSQL_PROVIDERS = {"tidb-zero"},且支持的结果族只有mysql,见 provisioning/init.py)。
开通成功后,DSN 解析出的连接参数会自动补上 TLS 设置(ssl使用 certifi CA,check_hostname=True、verify_mode="required",见 mysql_tls_connect_args);如果 DSN 中没有指定数据库,连接时会自动执行CREATE DATABASE IF NOT EXISTS memori再USE该库。你不需要自己再写连接代码。
结果验证
- CLI 路径:如上文所示,输出以
Provisioned database is ready.开头并给出脱敏 DSN,即表示开通和存储构建都已完成。 - Python 路径:
Memori.provision(..., build=True)返回的实例已可用,mem.config.provision_result保存着本次结果(provider、family、dsn、claim_url、expires_at 等)。想验证存储真的可读写,可参考 tidb.mdx 的 Complete Example 套路:注册 LLM、发起一次对话、然后mem.augmentation.wait()并mem.recall(...)拿到抽取出的事实(该示例使用 OpenAI 客户端,需要OPENAI_API_KEY)。
缓存行为与密钥安全(重要)
- 开通结果会缓存在
$MEMORI_HOME/.memori/provisioning.json,没有设置MEMORI_HOME时是~/.memori/provisioning.json。该文件包含完整 DSN(含凭据),Memori 会以 owner-only 权限(0o600)写它,但文档明确要求:把它当作 secrets 文件对待,数据库不再需要时轮换或删除它。 - 缓存命中规则:缓存键为
tidb-zero:{tag}(默认 tag 是memori),或通过cache_key参数显式指定。命中且未过期就直接复用,不会再次请求 TiDB Zero;结果带有expires_at且已过期时,缓存项会被移除并重新开通(见 provisioning/_cache.py)。 - 如果同一台机器上切换 TiDB Zero 端点、账号或项目,传一个不同的
tag/cache_key,或设置cache=False,否则 Memori 会复用上一个上下文缓存下来的开发库,例如:
mem = Memori.provision(provider="tidb-zero", tag="my-project-dev") # 或强制每次都新开一个 mem = Memori.provision(provider="tidb-zero", cache=False)已知限制
- 仅
tidb-zero一个 provider:当前注册表里 MySQL 族 provider 只有tidb-zero,其他 provider 名称会报错;非 MySQL 族的结果会抛UnsupportedProvisionedDatabaseFamilyError(见 provisioning/init.py)。 - 必须有 PyMySQL:对
tidb-zero,Memori 会先检查pymysql可导入,否则抛MissingPyMySQLError,不会继续走开通流程。 - 一次性定位:TiDB Zero 实例是面向开发的一次性资源(响应自带
expiresAt到期时间)。到期后缓存项自动失效,但缓存文件里的旧凭据仍建议你手动删除。 - 开通请求超时:provider 默认
timeout=30秒(见 tidb_zero.py),HTTP 错误会原样抛出(response.raise_for_status())。
如果你的目标已经是一次性开发库,到这里就完成了:mem实例可直接用于后续的mem.augmentation与mem.recall。如果之后要换成自建的 TiDB(本地或 TiDB Cloud),改走同一套 MySQL BYODB 路径即可,参考 tidb.mdx 的 Quick Start 与 Connection Strings 部分。
【免费下载链接】MemoriMemori is agent-native memory infrastructure. A LLM-agnostic layer that turns agent execution and conversation into structured, persistent state for production systems. Built for enterprise, Memori works with the data infrastructure you already run, no rip-and-replace, and deploys across managed cloud, single-tenant cloud, VPC, and on-premises.项目地址: https://gitcode.com/GitHub_Trending/me/Memori
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考