refactor: unify AI capabilities and workspace integration

This commit is contained in:
yuxuanhui
2026-09-08 19:28:44 +08:00
parent 3d26827b49
commit b604e6050e
23 changed files with 1821 additions and 805 deletions
+61
View File
@@ -0,0 +1,61 @@
"""Domain-owned AI capabilities; caller owns authorization and transactions."""
from pydantic import Field
from ..ai.alpha_tools import AlphaArgs
from ..ai.capabilities import Capability
from .contracts import ChatboxResearchInput, InputPageArgs, ResearchInputSelection, ResearchPreviewInput
class AlphaSourcesArgs(AlphaArgs):
limit: int = Field(default=25, ge=1, le=100)
offset: int = Field(default=0, ge=0)
async def prepare(ctx, args):
return await ctx.business.research_builder.prepare(ResearchPreviewInput(**args.model_dump()))
INSTRUCTIONS = "Chatbox 是研究来源,不是 Alpha 备注。新候选由服务端记录会话和生成轮次;引用已有草稿和重跑保留原来源。\n数据集研究先用 search_catalog 读取实际字段/类型/集合版本,或 get_research_input 读取页面提供的固定输入。\n只有明确选出的字段才能 prepare_research_input;不要把一页搜索结果当作整集。页面 unsaved_field_selection 为 true 且无输入引用时,请用户保存选择并点击“用此输入研究”,不能忽略排除项。\n有输入快照时使用 prepare_research_backtest,提供研究假设、具名占位符和实际字段类型,模拟参数须匹配输入范围。模板中的所有数据字段使用绑定占位符。\n字段类型未知时说明限制;VECTOR 处理方式在模板中明确写出,不把 VECTOR 当作 MATRIX。绑定校验不等于 FASTEXPR 语义或平台权限验证。\n无数据集输入的直接表达式研究可以 prepare_backtest;不得声称来自已核验数据集。已有候选草稿先 get_backtest_draft,再按 ID 和版本引用。"
CAPABILITIES = (
Capability(
name="prepare_research_input",
schema=ResearchInputSelection,
description="把明确选出的 1–100 个字段固定为研究输入快照;必须提供已读取的集合版本。只保存本地输入,不启动同步或回测。已有输入引用时直接读取,不重建。",
label="固定研究输入",
renderer="catalog",
effect="prepare",
handler=lambda ctx, args: ctx.business.research_builder.select_input(args),
refresh=("datasets",),
),
Capability(
name="get_research_input",
schema=InputPageArgs,
description="分页读取不可变研究输入及原版本字段说明。q 仅搜索字段 ID,类型筛选不改变输入。field_count 是输入总数,total 是筛选匹配数。",
label="读取固定研究输入",
renderer="catalog",
effect="query",
handler=lambda ctx, args: ctx.business.research_builder.input_page(**args.model_dump()),
),
Capability(
name="prepare_research_backtest",
schema=ChatboxResearchInput,
description="从研究输入快照构建固定回测预览:提供假设、候选模板(如 rank({price}))、具名字段绑定及真实类型、明确模拟参数。服务端校验归属/类型/范围并替换占位符;不验证算子语义、不自动聚合 VECTOR。来源由服务端标记为当前 chatbox 研究。",
label="构建研究候选与预览",
renderer="backtest",
effect="prepare",
handler=prepare,
refresh=("backtests",),
),
Capability(
name="get_alpha_sources",
schema=AlphaSourcesArgs,
description="分页读取 Alpha 的全部已保存研究来源、关联回测、聊天会话和输入快照。没有记录不推断来源。",
label="查询 Alpha 研究来源",
renderer="catalog",
effect="query",
handler=lambda ctx, args: ctx.business.get_alpha_sources(**args.model_dump()),
),
)