Cangjie Magic控制台打印:输出格式化与颜色支持
Cangjie Magic控制台打印:输出格式化与颜色支持
引言
在AI Agent开发过程中,清晰直观的控制台输出对于调试和监控Agent执行流程至关重要。Cangjie Magic作为基于仓颉编程语言构建的LLM Agent DSL,提供了强大的控制台打印功能,支持丰富的输出格式化和颜色显示。本文将深入解析Cangjie Magic的控制台打印机制,帮助开发者充分利用这一功能提升开发效率。
核心组件架构
Cangjie Magic的控制台打印功能主要由以下核心组件构成:
颜色支持系统
ANSI转义序列基础
Cangjie Magic使用标准的ANSI转义序列来实现终端颜色显示:
const BEGIN = "\u{1b}["
const RESET = "\u{1b}[0m"
颜色枚举定义
系统预定义了7种常用颜色和样式:
| 颜色枚举 | ANSI代码 | 描述 |
|---|---|---|
Color.Red |
31 | 红色文本 |
Color.Green |
32 | 绿色文本 |
Color.Yellow |
33 | 黄色文本 |
Color.Blue |
34 | 蓝色文本 |
Color.Magenta |
35 | 洋红色文本 |
Color.Cyan |
36 | 青色文本 |
Color.Bold |
1 | 粗体样式 |
颜色扩展方法
通过扩展String类型,提供了便捷的颜色操作方法:
// 单色设置
"重要信息".withColor(Color.Red)
// 多色组合
"警告文本".withColors([Color.Yellow, Color.Bold])
// 快捷方法
"强调内容".bold()
标签系统与颜色映射
Cangjie Magic使用标签系统来标识不同类型的Agent输出,并为每种标签分配了特定的颜色:
| 标签类型 | 标签格式 | 对应颜色 | 用途描述 |
|---|---|---|---|
| THOUGHT | <thinking> |
蓝色 | Agent思考过程 |
| ACTION | <action> |
绿色 | 工具调用动作 |
| OBSERVATION | <observation> |
蓝色 | 观察结果 |
| ANSWER | <answer> |
蓝色 | 最终答案 |
| INFO | <info> |
绿色 | 信息提示 |
| PLAN | <plan> |
红色 | 计划制定 |
| FAIL | <fail> |
未定义 | 失败情况 |
ConsolePrinter实现解析
核心打印逻辑
ConsolePrinter类负责处理Agent执行过程中的各种事件,并根据事件类型应用相应的颜色:
public class ConsolePrinter <: EventStreamVisitor {
private func getTagColor(tag: String): Color {
if (tag == Tag.PLAN) {
return Color.Red
} else if (tag == Tag.INFO || tag == Tag.ACTION) {
return Color.Green
} else {
return Color.Blue
}
}
}
事件处理机制
ConsolePrinter实现了两种主要的事件处理方法:
NotifyEvent处理:
override public func on(event: NotifyEvent): Unit {
let tag = event.tag
let tagColor = getTagColor(tag)
getStdOut().writeln(tag.withColor(tagColor))
getStdOut().writeln(event.content.trimAscii())
getStdOut().writeln(tag.close.withColor(tagColor))
}
ToolCallEvent处理:
override public func on(event: ToolCallEvent): Unit {
let tag = Tag.ACTION
let tagColor = getTagColor(tag)
getStdOut().writeln(tag.withColor(tagColor))
getStdOut().writeln(event.toolRequest)
getStdOut().writeln(tag.close.withColor(tagColor))
}
使用示例与实践
基础颜色使用
import magic.utils.{Color, Colorful}
// 单色文本输出
println("错误信息".withColor(Color.Red))
println("成功提示".withColor(Color.Green))
// 组合样式
println("重要警告".withColors([Color.Yellow, Color.Bold]))
// 快捷方法
println("强调内容".bold())
Agent输出监控
import magic.interaction.ConsolePrinter
import magic.core.agent.AsyncAgentResponse
// 启用详细输出模式
ConsolePrinter.print(asyncResponse, verbose: true)
// 标准输出模式(仅显示最终结果)
ConsolePrinter.print(asyncResponse, verbose: false)
自定义颜色映射
开发者可以扩展ConsolePrinter来自定义颜色方案:
class CustomConsolePrinter <: ConsolePrinter {
override private func getTagColor(tag: String): Color {
match (tag) {
case Tag.PLAN => Color.Magenta
case Tag.ACTION => Color.Cyan
case Tag.INFO => Color.Yellow
case _ => Color.Blue
}
}
}
最佳实践指南
1. 颜色使用原则
| 场景 | 推荐颜色 | 说明 |
|---|---|---|
| 错误信息 | Red | 引起注意的重要问题 |
| 成功提示 | Green | 操作成功完成 |
| 警告信息 | Yellow | 需要注意的情况 |
| 普通信息 | Blue | 一般性信息输出 |
| 强调内容 | Bold | 需要特别关注的内容 |
2. 输出格式优化
// 良好的格式示例
println("[INFO] ".withColor(Color.Green) + "进程启动完成")
println("[WARN] ".withColor(Color.Yellow) + "内存使用率较高")
println("[ERROR] ".withColor(Color.Red) + "文件读取失败")
// 结构化输出
val status = if (success) "✓" else "✗"
val color = if (success) Color.Green else Color.Red
println("${status.withColor(color)} 任务执行完成")
3. 性能考虑
虽然颜色输出提供了更好的可读性,但在高性能场景中应注意:
- 避免在循环中频繁创建颜色字符串
- 考虑使用条件判断控制颜色输出开关
- 对于大量输出,可以先构建完整字符串再一次性输出
兼容性说明
Cangjie Magic的颜色系统基于ANSI转义序列,在大多数现代终端中都能正常工作,包括:
- Linux/macOS终端(支持ANSI颜色)
- Windows Terminal(支持ANSI颜色)
- 主流IDE的控制台(IntelliJ IDEA、VS Code等)
对于不支持ANSI颜色的环境,系统会自动回退到无颜色输出模式。
总结
Cangjie Magic的控制台打印系统提供了一个强大而灵活的输出格式化框架,通过颜色支持和标签系统,开发者可以:
- 清晰区分不同类型的Agent输出
- 快速识别关键信息和错误状态
- 提升调试效率通过可视化的执行流程
- 自定义扩展满足特定项目的需求
掌握这些功能将显著提升你在Cangjie Magic平台上的开发体验和效率。无论是简单的信息输出还是复杂的Agent监控,颜色格式化都能为你的应用增添专业性和可读性。
通过合理运用颜色编码和输出格式化,你可以构建出既美观又实用的控制台界面,让Agent的执行过程变得更加透明和可控。
更多推荐


所有评论(0)