onStreamingDone
即在 Streaming 完成后通过一系列的后处理器对生成的内容进行处理。
内置 PostHandler
内置的后处理器包括:
后处理器 | 描述 |
---|---|
logging | 记录操作日志。 |
timeMetric | 记录操作耗时。 |
acceptanceMetric | 接受度指标。 |
verifyCode | 检查代码错误或 PSI 问题。 |
runCode | 运行生成的文本代码。 |
parseCode | 将文本解析为代码块。 |
inferCodeLocation | 推断代码位置。 |
saveFile | 将文件保存到磁盘。 |
openFile | 在编辑器中打开文件。 |
insertCode | 在当前光标位置插入代码。 |
formatCode | 格式化代码。 |
parseComment | 解析注释为注释块。 |
insertNewline | 插入新行。 |
append | 将文本追加到文件中。 |
updateEditorText | 更新编辑器文本。 |
patch | 打补丁。 |
diff | 生成 diff view 对比。 |
openWebpage | 打开网页。 |
showWebView | 显示 WebView。 |
最新版本见源码:com.phodal.shirecore.middleware.PostProcessorType
示例
Hello, world 示例
---
onStreamingEnd: { parseCode | saveFile | openFile | verifyCode | runCode }
---
生成一个 python hello world,使用 markdown block 返回
该代码会调用 LLM 生成一个 python hello world,然后将生成的代码块解析,保存到文件,打开文件,检查代码错误或 PSI 问题,最后运行生成的代码。
对应的后处理器有:
后处理器 | 描述 |
---|---|
parseCode | 从生成的结果中解析生成的代码块。 |
saveFile | 将保存生成的代码到文件。 |
openFile | 打开生成的文件。 |
verifyCode | 检查代码错误或 PSI 问题。 |
runCode | 运行生成的代码(取决于是否存在对应的 RunService)。 |
结合变量的示例
---
name: Summary
description: "Generate Summary"
interaction: AppendCursor
data: ["a", "b"]
when: $fileName.matches("/.*.java/")
variables:
"var2": /.*ple.shire/ { cat | find("fileName") | sort }
onStreamingEnd: { append($var2) | saveFile("summary.md") }
---
Summary webpage: $fileName
这里的 var2
是一个正则表达式,用于匹配文件名中包含 ple.shire
的文件,然后将其追加到文件中。
onStreamingEnd
会在 Streaming 完成后执行,这里会将 var2
的内容追加到 output 中,最终保存到 summary.md
文件中。
提交信息生成示例
---
name: "Commit message"
interaction: AppendCursor
actionLocation: CommitMenu
onStreamingEnd: { parseCode | updateEditorText }
---
请为给定的变更(Diff)编写一个连贯但具有描述性的代码提交信息。
背景信息:我现在使用 Git 编写一本开源电子书《AI 辅助软件工程:AI IDE 插件与编程智能体示例》,我需要为每个提交编写一个简洁但具有描述性的提交信息。
要求:
- 确保包含修改了什么以及为什么。
- 以不超过 50 个字符的祈使句形式开头。
- 然后留下一个空行,如有必要,继续详细说明。
- 如果变更是一个 .shire 文件,说明我添加了一个新的示例。
遵循常规提交规范,例如:
- fix(authentication): 修复密码正则表达式模式问题
- feat(storage): 添加对S3存储的支持
- test(java): 修复用户控制器的测试用例
- docs(architecture): 在主页添加架构图
Diff:
$currentChanges