Skip to content

[WIP] Add new blueprint API design for mcp protocol#25

Draft
winyunq with Codex wants to merge 2 commits into
mainfrom
codex/add-new-blueprint-api
Draft

[WIP] Add new blueprint API design for mcp protocol#25
winyunq with Codex wants to merge 2 commits into
mainfrom
codex/add-new-blueprint-api

Conversation

@Codex

@Codex Codex AI commented Apr 10, 2026

Copy link
Copy Markdown
Contributor

Thanks for asking me to work on this. I will get started on it and keep this PR's description up to date as I form a plan and make progress.


This section details on the original issue you should resolve

<issue_title>新的蓝图API:bluecode</issue_title>
<issue_description>我们的旧蓝图api太过时了,主要问题是频繁调用mcp,使得如果是真的一步一步运行,那么其运行将反复对话,如果批量运行,那么一些节点的意义很奇怪换句话说不如批处理。

我们计划模仿latex中的tikz画流程图那样,设计一套新的蓝图mcp协议,设计理念有2:像人一样聚焦,人在看书的时候是不会在意这个句子在哪本书哪一页的。像人一样易于写入而难以删除,因此新api如下,你可以适当的修改调整名字。

set function:设置要编辑的函数,方式为路径:域?:函数名称,其中路径默认为umg的target路径,如果存在widget target,将优先匹配widget中的函数。总之,就像其他target函数那样,这里需要鲁棒性的匹配,并且如果有歧义时返回信息。set function 或者说set function target后,我们约定起始节点为begin,终点或者说返回值为end

蓝图结构:

蓝图包含2项内容:
node list
connect list

其中,node list是一个树结构,其包含执行流。这个树结构很奇怪,仔细听我说,大概的思路是这样的。我们约定以下关键字,或者你也可以调整:main,return,begin,end
main:target的入口节点
begin(具有分支的节点)
end:空的结束,默认
return:返回

大概是这样一个设计思路:

ifnode.true-prinf(hi)-return
ifnode.false-printf(fail)-end
main(i)-if(i%2=0)return()
或者这样

main(i)-if(i%2=0){ifnode.true-prinf(hi)-return
ifnode.false-printf(fail)-end}
return()

如何理解?大致思路就是说,我们的node列表蕴含了执行连接关系。无论如何,我们希望能把运行节点压平。

此外,当然,会有一列数据处理不能连接的节点。我希望作为一个鲁棒性语言,其能自动实现一些逻辑。接下来让我们看看我们怎么设计:

read function将尝试以代码的形式返回,其原理是扫描main到end或者return,对于任意节点,以(参数)这种程序表达式的形式返回。

现在让我们说说write function,write function有多种写入方法,例如,我们可以为每个节点显示为在json计数位置:名字,这样当ai写入的时候,就可以例如:

main-end
是1:main-2:end
ai通过1:main-prinf(hello)-2:end这种形式写入,理论上来说写入default于end端。也就是说,如果ai直接就是printf hello,那么连在end上。而如果ai提供了节点左右信息,则优先连在左右节点上。优先右。

如果ai写入的节点事实上删除了节点,那么根据我们的代码要求,将优先匹配相似节点然后向右插入

例如main-print1-print3-end,ai输出main-print2-end 逻辑上ai想的是直接print2 实际上应该形成main-print1-print3-print2-end并且返回插入信息
而如果ai写的是main-print2-print3-end,那么print3是重复代码将匹配,使得其结果应该是main-print1-print2-print3-end。

总之,写入操作不允许擦除蓝图节点,但是允许覆盖和重设节点,尽管这里有非常多的歧义。这里会有一个匹配逻辑 例如逻辑上最高的是id一致或者接近的一致节点,然后是参数一致,函数一致 节点一致,等。需要你设计一个default机制。

此外由于我们数据存储,实际上是既存储连线形式,也存储连线信息,因此事实上我们是有一个不能连的node list和游离的node list,这2个非运行流的list。如果ai在代码中插入了无法连线的node list,那么将先尝试将其转化为参数列表。如果仍然无法连线,尝试能否进行一次cast,如果仍然不能连线,将其移动到游离list。

ai也可以通过操作connect list来完成一些细节。

complie操作将编译蓝图,并且以json形式紧凑只返回必要的信息

事实上这件事我们得仔细想想,我们的对话将持续几个分支,我们最好新建一个"bluecode"作为新蓝图功能。就像hlsl不会一下子取代material,我们用bluecode作为新蓝图api协定。你可以先试试看更新readme.md以及设计你所理解的,我们需要数次对话以继续</issue_description>

Comments on the Issue (you are @codex[agent] in this section)

Co-authored-by: winyunq <50171884+winyunq@users.noreply.github.com>
@Codex Codex AI requested a review from winyunq April 10, 2026 12:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants