[Slice 1/4] arise 反应式核:单轮问答走通全链路(Walking Skeleton) #2
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Parent
拆自 #1(arise 反应式核 / Reactive Core PRD,Phase 1)。本片是该 PRD 的第 1/4 片(Walking Skeleton)。
What to build
端到端跑通"收到一条平台消息 → 机器人回复"这条最小完整链路,不接记忆、不接自撤/改口、不接持久化崩溃恢复、不接消息去抖累积——这些都是后续独立的切片。
具体包含:
ConversationInput{sender_id, sender_name, text, time, media_refs, reply_ref, is_bot},渲染时带稳定message_id)+ 后处理 port(send_message工具产生的动作 → OneBot v11send_msg调用,须把平台message_id回传给 core)。{persona, backstory[], speech_patterns[], sample_dialogue[≥3]}(lore字段本片不读取)。assemble_context()拼装顺序永远最前,host 无法扩展/覆盖/关闭)。assemble_context()(安全基线 + persona + 当前会话累积窗口内的原始消息,无跨会话记忆)→ 经裸any-llm(非langchain-anyllm封装)发起 completion/工具调用 → 工具循环(run_limit硬顶,只数推理类工具迭代)。LLM 调用点必须可注入/可替换,供测试传入假 provider。send_message(content) -> handle工具:本片只支持纯文本(含 core 解析的@inline 标签),不支持 sticker/voice(留给后续多模态切片)。一轮内允许多次调用("一句一条"),core 按打字节奏顺序执行;打字节奏为静态公式(基础延迟 + 每字符耗时 × 段长,不含依赖情感态的抖动项)。send_message不占run_limit份额,但单轮调用次数受独立静态硬顶MAX_SENDS_PER_TURN约束。src/nonebot_plugin_arise/__init__.py里"从不存在的plugins/目录加载子插件"这段代码,替换为真正的 Runtime Loop 接入点(插件加载时注册 NoneBot matcher);删除模板自带、与 arise 无关的tests/plugin_test.py(pip install演示 matcher)。pyproject.toml的requires-python提升到>=3.11;新增裸any-llm依赖(不引入nonebot-plugin-orm/qdrant-client,那是后续切片的范围);Config新增run_limit、MAX_SENDS_PER_TURN、打字节奏基础延迟/每字符耗时系数、any-llm provider/model 相关配置字段。Acceptance criteria
send_message,core 按顺序、按打字节奏依次执行,产生对应次数的send_msg调用。send_message(合法的"看了但不说"结果),流程正常结束、不报错、不重试。run_limit生效:给一个"模型不断请求调用推理工具"的假 provider 脚本,工具循环在硬顶处终止而非无限跑下去。MAX_SENDS_PER_TURN生效:给一个"模型试图连续调用超量send_message"的假 provider 脚本,超出硬顶的调用不会被执行。assemble_context()拼装顺序断言:安全基线恒定在最前,persona 内容不能覆盖/替换安全基线文本。tests/conftest.py的after_nonebot_init+tests/fake.py的fake_group_message_event_v11/fake_private_message_event_v11),LLM provider 用可注入的假实现(脚本化tool_calls),无需真实网络请求/API key。tests/plugin_test.py(模板自带的pip install演示测试)已删除。Blocked by
None - can start immediately