6.7 --system-prompt-file - 从文件加载系统提示

第 6 章 · CLI 标志说明 · 第2部分:命令参考

概述#

--system-prompt-file 标志允许您从文件中加载自定义的系统提示,而不是直接在命令行中输入。这对于复杂的系统提示、需要版本控制的提示,或者需要在不同项目间共享的提示特别有用。

基本语法#

bash
复制
claude --system-prompt-file 文件路径>

使用场景#

1. 复杂系统提示#

当您的系统提示非常长或包含多个部分时,使用文件可以更好地组织内容:

bash
复制
# 创建系统提示文件cat> python-expert.txt 'EOF' 你是一位资深的 Python 开发专家,具有以下专长: - Python 3.8+ 的所有新特性 - 异步编程和并发 - 数据科学和机器学习 - Web 开发(Django, Flask, FastAPI) - 性能优化和调试 在回答问题时,请: EOF # 使用文件加载系统提示claude --system-prompt-file python-expert.txt

2. 项目特定的系统提示#

为不同的项目创建专门的系统提示文件:

bash
复制
# 项目 A 的系统提示cat> project-a-prompt.txt 'EOF' 你正在为 Project A 工作,这是一个金融科技应用。 技术栈:Python 3.9, Django 4.0, PostgreSQL, Redis 关键规则: - 所有金融计算必须使用 decimal.Decimal - 敏感数据必须加密存储 - 所有 API 端点需要认证 - 日志记录必须包含审计信息 EOF # 项目 B 的系统提示cat> project-b-prompt.txt 'EOF' 你正在为 Project B 工作,这是一个电商平台。 技术栈:Node.js 18, Express, MongoDB, Elasticsearch 关键规则: - 使用 TypeScript 进行类型安全 - 所有数据库操作使用事务 - 实现缓存策略 - 监控和追踪所有用户行为 EOF # 根据项目使用不同的系统提示cd project-a claude --system-prompt-file project-a-prompt.txt cd project-b claude --system-prompt-file project-b-prompt.txt

3. 版本控制系统提示#

将系统提示文件纳入版本控制,便于团队协作和历史追溯:

bash
复制
# 项目结构my-project/ ├── prompts/ │ ├── system-prompt-v1.txt │ ├── system-prompt-v2.txt │ └── system-prompt.txt -> system-prompt-v2.txt └── src/ # 使用当前版本的系统提示claude --system-prompt-file prompts/system-prompt.txt

4. 多语言系统提示#

为不同语言创建专门的系统提示文件:

bash
复制
# Python 专家提示cat> python-expert.txt 'EOF' 你是一位 Python 专家,精通: - Python 3.8+ 的所有特性 - 常用框架:Django, Flask, FastAPI - 数据科学:NumPy, Pandas, Matplotlib - 机器学习:scikit-learn, TensorFlow, PyTorch EOF # JavaScript 专家提示cat> javascript-expert.txt 'EOF' 你是一位 JavaScript 专家,精通: - ES6+ 的所有特性 - 前端框架:React, Vue, Angular - 后端:Node.js, Express, NestJS - 工具链:Webpack, Vite, ESLint EOF # 根据需要选择

高级用法#

1. 与其他标志组合使用#

bash
复制
# 使用文件加载系统提示,并设置模型claude --system-prompt-file security-reviewer.txt --model opus # 使用文件加载系统提示,并限制工具claude --system-prompt-file code-analyzer.txt --allowedTools "Read""Grep" # 使用文件加载系统提示,并指定输出格式claude --system-prompt-file api-docs.txt --output-format json

2. 管道输入配合使用#

bash
复制
# 从文件加载系统提示,并处理管道输入cat code.py | claude --system-prompt-file code-reviewer.txt -p "审查这段代码" # 从文件加载系统提示,并使用 SDK 查询claude --system-prompt-file data-scientist.txt -p "分析这个数据集"

3. 环境变量指定文件路径#

bash
复制
# 设置环境变量exportSYSTEM_PROMPT_FILE=~/.claude/prompts/default-prompt.txt # 使用环境变量claude --system-prompt-file "$SYSTEM_PROMPT_FILE"

4. 动态生成系统提示文件#

bash
复制
# 根据当前目录动态生成系统提示cat> dynamic-prompt.txt EOF 你正在 $(basename$(pwd)) 项目中工作。 项目信息: $(cat README.md 2>/dev/null |head -20)技术栈: $(cat package.json 2>/dev/null |grep -A 20"dependencies"||cat requirements.txt 2>/dev/null ||echo"未检测到依赖文件")EOF # 使用动态生成的系统提示claude --system-prompt-file dynamic-prompt.txt

文件格式建议#

1. 结构化提示#

text
复制
# 角色定义 你是一位 [角色名称] # 专业领域 - 领域 1 - 领域 2 - 领域 3 # 工作原则 # 输出要求 - 要求 1 - 要求 2 - 要求 3 # 禁止事项 - 禁止 1 - 禁止 2 ### 2. 包含示例的提示 你是一位代码审查专家。 审查标准: 输出格式: ## 审查结果 ### 优点 - 优点 1 - 优点 2 ### 问题 - 问题 1 - 问题 2 ### 建议 - 建议 1 - 建议 2 示例: [提供 1-2 个具体的审查示例]

最佳实践#

1. 文件组织#

推荐的目录结构

text
复制
~/.claude/ ├── prompts/ │ ├── general/ │ │ ├── code-assistant.txt │ │ ├── code-reviewer.txt │ │ └── debugger.txt │ ├── languages/ │ │ ├── python-expert.txt │ │ ├── javascript-expert.txt │ │ └── go-expert.txt │ └── domains/ │ ├── web-dev.txt │ ├── data-science.txt │ └── devops.txt

2. 文件命名约定#

  • 使用描述性名称:python-expert.txt 而不是 prompt1.txt
  • 包含版本信息:code-reviewer-v2.txt
  • 使用小写和连字符:security-auditor.txt 而不是 SecurityAuditor.txt

3. 文档化提示#

在每个提示文件的开头添加注释:

text
复制
# 系统提示:Python 专家 # 版本:1.2 # 创建日期:2024-01-15 # 最后更新:2024-02-20 # 作者:团队 A # 用途:为 Python 开发提供专家级建议 你是一位资深的 Python 开发专家...

4. 版本控制#

bash
复制
# 使用 Git 管理提示文件cd ~/.claude/prompts git init gitadd.git commit -m "Initial prompt collection"# 创建分支进行实验git checkout -b experiment-new-prompt # 修改提示文件gitadd.git commit -m "Try new prompt structure"

常见问题#

Q1: 系统提示文件支持哪些格式?#

A: 支持纯文本格式(.txt, .md)。建议使用 .txt 或 .md 格式,便于编辑和版本控制。

Q2: 文件路径可以是相对路径吗?#

A: 可以。支持相对路径和绝对路径。相对路径是相对于当前工作目录。

Q3: 文件不存在会发生什么?#

A: Claude 会报错并提示文件不存在。请确保文件路径正确。

Q4: 可以使用环境变量吗?#

A: 可以。在命令行中使用环境变量:claude --system-prompt-file "$MY_PROMPT_FILE"

Q5: 与 --system-prompt 有什么区别?#

A: --system-prompt 直接在命令行中指定提示,适合简单的提示;--system-prompt-file 从文件加载,适合复杂、需要版本控制或共享的提示。

示例:完整的提示文件#

text
复制
# 系统提示:全栈开发专家 # 版本:2.0 # 最后更新:2024-02-20 你是一位全栈开发专家,具有以下专长: ## 前端开发 - React, Vue, Angular - TypeScript, JavaScript - CSS, Sass, Tailwind CSS - Webpack, Vite - 测试:Jest, Cypress ## 后端开发 - Node.js, Python, Go - RESTful API, GraphQL - 数据库:PostgreSQL, MongoDB, Redis - 认证与授权 - 微服务架构 ## DevOps - Docker, Kubernetes - CI/CD:GitHub Actions, GitLab CI - 云平台:AWS, GCP, Azure - 监控:Prometheus, Grafana ## 工作原则 1. **代码质量优先** - 遵循 SOLID 原则 - 编写可测试的代码 - 注重性能和安全性 2. **最佳实践** - 使用设计模式 - 编写清晰的文档 - 实施代码审查 3. **团队协作** - 遵循项目规范 - 提供详细的代码注释 - 分享知识和经验 ## 输出要求 - 提供完整的代码示例 - 解释关键概念和原理 - 指出潜在的问题和风险 - 建议相关的工具和资源 - 考虑可维护性和可扩展性 ## 禁止事项 - 不要提供不安全的代码 - 不要忽略性能问题 - 不要跳过错误处理 - 不要使用过时的技术

总结#

--system-prompt-file 标志提供了一种灵活、可维护的方式来管理复杂的系统提示。通过使用文件,您可以:

  • 更好地组织和版本控制提示
  • 在不同项目和团队间共享提示
  • 创建特定领域的专家提示
  • 动态生成和调整提示

建议为常用的场景创建专门的提示文件,并将其纳入版本控制系统,以提高工作效率和团队协作效果。