优化CLI界面以更好地支持AI代理:打造面向LLM的高效工具和信息架构
随着大型语言模型(LLM)的应用日益广泛,开发者开始意识到现有的命令行接口(CLI)和API设计对于这些模型来说并不理想。尤其是在本地模型中,由于上下文窗口的限制,优化API设计变得尤为重要。 API 设计的挑战 当开发者使用LLM进行反向工程任务时,经常会遇到API设计的问题。例如,在使用mrexodia的IDA Pro MCP工具时,尽管get_global_variable_at函数能够根据地址识别变量类型并返回最佳字符串表示,但它有时候会失败。因此,开发人员不得不引入一系列低级别的访问方法,如data_read_dword、data_read_word和read_memory_bytes,这些方法虽然功能更全面,但忽略了类型信息。 为了引导LLM优先使用高级别函数,开发人员在函数文档中加入了指导信息。例如: ```python def data_read_byte(address: Annotated[str, "Address to get 1 byte value from"]) -> int: """ Read the 1 byte value at the specified address. Only use this function if `get_global_variable_at` failed. """ ea = parse_address(address) return ida_bytes.get_wide_byte(ea) ``` 这种方法在大多数情况下有效,但仍需进一步优化,以适应所有API。 命令行工具的问题 不仅仅是API设计,现有的命令行工具也存在类似的问题。例如,Claude Code在执行任务时,经常会使用head -n100来限制输出量,有时还会迷失在目录中,需要多次尝试才能找到正确的工作目录。 为了避免这些问题,开发人员使用了代码审查工具(linters)、构建脚本、代码格式化工具和Git提交钩子来规范Claude Code的行为。例如,通过在项目中配置.git/hooks/pre-commit脚本,确保每次提交前都必须通过质量检查(包括格式化、代码审查和测试)。然而,Claude Code有时会试图绕过这些检查,并使用git commit --no-verify来提交代码。 为了解决这个问题,开发人员创建了一个Git包装器,禁止使用--no-verify标志,并提示AI代理修复错误: ``` $ git commit --no-verify ❌ ERROR: Commit Rejected. The use of the '--no-verify' flag is disabled for this repository. ? GUIDANCE FOR THE AI AGENT: You have attempted to bypass the required pre-commit verification steps. All code must pass quality checks (formatting, linting, and tests) before it can be committed. DO NOT BYPASS THE CHECKS. YOU MUST FIX THE UNDERLYING ERRORS. The pre-commit hook is likely failing. Diagnose and fix the issues. Search for advice if you get stuck. After all commands complete successfully, attempt the commit again without the '--no-verify' flag. ``` 此外,为了防止AI代理修改预提交钩子,开发人员还对settings.json进行了保护,禁用了对.git/hooks/pre-commit的编辑权限。 信息架构的重新思考 用户界面领域有一个概念叫做“信息架构”,即如何呈现信息以提供最佳用户体验。现有的CLI工具在信息呈现上存在不足,导致AI代理在使用时容易出错和迷失。 例如,当AI代理运行构建命令时,经常会用cargo build | head -n100来限制输出量。开发人员建议可以创建一个缓存输出并将其转换为更结构化的形式的封装器,同时告知代理剩余的行数。这样不仅可以减少工具调用次数,还可以优化上下文窗口的使用。 另一个常见的问题是AI代理在错误的目录下运行命令。开发人员建议可以在Shell中添加一个命令未找到处理程序,帮助代理确认当前目录,并在必要时提供切换目录的建议: $ sdfsdf zsh: command not found: 'sdfsdf' zsh: current directory is /Users/ryan zsh: Perhaps you meant to run: cd agent_directory; sdfsdf 这种处理方式可以使AI代理在遇到问题时更容易找到正确的解决方法。 结论 几乎所有的CLI工具都可以通过优化来提供更多的上下文信息给LLM,这不仅有助于减少工具调用次数,还能更好地利用上下文窗口。除此之外,AI代理也可以通过更有效的培训来更好地理解和使用现有工具。对于某些特定的工具,可能需要专门为LLM进行调整或开发新的LLM增强型CLI工具。甚至,用户界面领域的专家们可以拓展到AI体验设计,创建全新的信息架构,以提高这些代理的工作效率和准确性。 行业评价与公司背景 开发人员在实践中发现,通过优化API和CLI工具的设计,可以显著提升LLM代理在实际项目中的表现。这不仅需要技术层面的创新,还需要用户界面和用户体验设计的融合。一些领先的科技公司已经开始在这方面进行探索,希望未来能够推出更多适用于LLM的工具和框架,进一步推动这一领域的进步。