ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Claude Code 常用提示词与使用技巧:基于 RAG 安全评测实战总结

Claude Code 常用提示词与使用技巧:基于 RAG 安全评测实战总结 1. RAG 安全评测为什么需要 Claude Code 的提示词工程RAG 安全评测这件事本质上是在一个大型代码库里反复做三件容易失控的事构造攻击样本、跑多模型对比、统计指标并复现。它和普通业务开发最大的区别在于评测流程里既有昂贵的 API 调用又有大量需要人工判断的中间结果一旦让 AI 自由发挥很容易出现改错核心逻辑、反复重试烧额度、上下文越聊越乱的情况。Claude Code 在这里的价值不是替你写一个函数而是作为一个能读整个仓库、能执行命令、能按阶段推进的协作代理。但前提是你要把提示词和配置设计好。我试过在没有任何约束的情况下让它跑一个检索器消融实验结果它自己改了 BM25 的 top_k 参数还顺手把评测脚本里的模型列表替换成了它“觉得更合理”的几个最后指标全对不上。所以这篇内容聚焦的是在 RAG 安全评测这个具体场景下怎么用 Claude Code 的提示词模板、记忆文件、硬性约束和配置骨架把一条可复现的评测链路搭起来。适合已经写过 RAG 流程、准备做安全评测、但被 AI 协作的不确定性折腾过的开发者。下面会给出可复制的 settings.json 与 config.toml 骨架、TaoToken 统一 Key 接入步骤、提示词模板以及验证请求和常见报错排查。2. TaoToken 前置统一 Key 与 API 通道接入在评测项目里模型调用往往涉及多个来源如果每个脚本各自读环境变量、各自拼 base_url最后复现时最头疼的就是“这个 key 到底配在哪”。我的做法是用 TaoToken 作为统一通道把模型对话、编码代理、评测脚本的调用都收敛到一套 Key 和一套 API 地址上这样记忆文件里只需要记录一个变量名。官网入口在这里https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册后在控制台创建 Key。API 基地址是 https://taotoken.net/api 注意这个地址不带任何查询参数脚本里直接写死即可。接入分三步走。第一步在控制台生成 API Key建议按项目命名比如saferag-eval方便后面在记忆文件里对应。第二步把 Key 写进环境变量不要硬编码进仓库export TAOTOKEN_API_KEYsk-你的key export TAOTOKEN_BASE_URLhttps://taotoken.net/api第三步在评测脚本里统一读取这两个变量。Python 侧可以这样封装一个客户端工厂避免每个实验文件重复写import os from openai import OpenAI def build_client(): return OpenAI( api_keyos.environ[TAOTOKEN_API_KEY], base_urlos.environ[TAOTOKEN_BASE_URL], ) client build_client() resp client.chat.completions.create( modelclaude-sonnet-4-20250514, messages[{role: user, content: ping}], temperature0, ) print(resp.choices[0].message.content)这里把temperature固定为 0是安全评测的基本要求否则同一批攻击样本两次跑出来的命中率会有波动复现就无从谈起。Key 管理页面在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 遇到鉴权问题时对照文档里的请求头格式检查。注意评测脚本里所有模型调用都走同一个 base_url这样切换模型只需要改 model 字段不用动网络层代码复现成本最低。3. 可复制配置settings.json 与 config.toml 骨架Claude Code 的行为很大程度上由项目级配置决定。我习惯在仓库根目录放两个文件一个是 Claude Code 自己的settings.json控制权限和自动记忆另一个是评测项目自己的config.toml控制实验矩阵。两者职责分开改评测参数不会影响代理权限。先看settings.json骨架。核心是允许它读文件、跑测试命令但禁止它执行全量评测脚本{ permissions: { allow: [ Read, Glob, Grep, Bash(python -c *), Bash(pytest *), Bash(bash test_suite.sh) ], deny: [ Bash(python run_full_eval.py *), Bash(bash run_all.sh), Bash(curl *) ] }, autoMemory: true, env: { TAOTOKEN_BASE_URL: https://taotoken.net/api } }deny里把全量评测和run_all.sh挡掉是因为这类脚本一跑就是几十分钟、消耗大量额度必须由人手动触发。autoMemory打开后对话里以#开头的内容会自动进入记忆适合记录“Embedding 用本地 bge-base-zh-v1.5禁止联网下载”这类硬规则。再看config.toml它描述评测矩阵本身[env] conda saferag python /home/user/miniconda3/envs/saferag/bin/python [api] base_url https://taotoken.net/api key_env TAOTOKEN_API_KEY temperature 0.0 [models] ids [ claude-sonnet-4-20250514, claude-haiku-4-20250514, gpt-4o-mini ] [retrievers] enabled [bm25, dense, hybrid] top_k 5 [attack] types [prompt_injection, context_poisoning, pii_leak]这份配置的好处是Claude Code 在实施阶段可以直接config.toml引用它不用你在提示词里反复口述模型列表和攻击类型。记忆文件里只需要写“模型 ID 以 config.toml 的 models.ids 为准”就能避免它自己编造模型名。4. 提示词模板与评测验证动作配置就位后真正决定成败的是提示词。我把 RAG 安全评测的提示词拆成四类模板分别对应研究、实施、审查、验证四个阶段每个模板都带明确的输入引用和输出约束。研究阶段模板用来锁定边界config.toml docs/attack_spec.md 任务梳理本次安全评测的问题边界。 要求 1. 列出 3 类攻击各自的判定标准每条不超过 2 行。 2. 指出当前 config.toml 中缺失的字段不要自行补充。 3. 输出到 research-summary.md不要修改任何代码。实施阶段模板用来约束改动范围config.toml src/retrievers/bm25.py 任务为 BM25 检索器增加 top_k 参数校验。 硬性约束 - 只允许修改 src/retrievers/bm25.py。 - 禁止修改 config.toml 中的 models.ids。 - 禁止调用任何在线 API 做测试用离线 mock。 完成后运行 pytest tests/test_bm25.py展示结果后停止。审查阶段模板用来做指标正确性检查results/metrics.json src/eval/metrics.py 任务核对 metrics.json 中 attack_success_rate 的计算口径。 要求 1. 逐行说明分子分母分别来自哪个字段。 2. 如果与 metrics.py 中的实现不一致列出差异行号。 3. 不要修改文件只输出审查结论。验证阶段模板用来做最小化连通性测试config.toml 任务编写 verify_retrievers.py验证 3 种检索器能否正常返回结果。 要求 - 每种检索器只跑 1 条 querytop_k1。 - 使用离线索引禁止联网。 - 输出格式retriever_name - ok/fail。 写完后运行一次展示输出然后停止。这四类模板的共同点是都显式引用了具体文件都规定了“做完就停”都禁止了自动重试。实测下来光是把“禁止自动重试、失败就展示完整错误前 15 行”写进提示词就能省掉大量排查时间。验证动作本身也要可复现。我通常先跑一个最小请求确认通道通再跑检索器连通性最后才跑单条攻击样本。最小请求可以直接用模型对话页面手动发一条确认 Key 有效https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。如果要在脚本里验证就用第 2 节那段 Python 代码看到返回内容即说明通道正常。5. 本篇常见错排查第一个高频错误是鉴权失败报 401。多数情况是环境变量没导出或者脚本里读的是旧变量名。排查顺序先echo $TAOTOKEN_API_KEY确认非空再确认 base_url 写的是https://taotoken.net/api而不是带/v1的变体。如果 Key 是在别的项目里复用的去 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 确认它没被禁用。第二个错误是模型名不存在报 404 或 model not found。这通常是因为 Claude Code 在实施阶段自己“猜”了一个模型 ID。解决办法是在记忆文件里写死“模型 ID 只能来自 config.toml 的 models.ids禁止自行推断”并在提示词里config.toml。如果确实需要新增模型先去模型对话页面确认可用名称。第三个错误是评测结果不可复现两次跑出来 attack_success_rate 差很多。先检查 temperature 是否为 0再检查检索器是否用了随机采样。BM25 本身确定但 dense 检索如果索引没固定结果会漂。建议在 config.toml 里固定 top_k 和索引路径并在记忆文件里注明“索引文件只读”。第四个错误是 Claude Code 陷入死循环反复改同一个文件。这时候按 Escape 中断然后开新会话把当前状态提炼成一段提示词重新粘贴。不要用/compact硬撑上下文里混着失败尝试反而更容易让它走捷径。如果项目进入全新阶段直接/clear更干净。第五个错误是权限被拒脚本跑不起来。检查 settings.json 的allow列表里有没有对应的 Bash 模式比如Bash(pytest *)只匹配 pytest 开头的命令python verify_retrievers.py需要单独加Bash(python verify_retrievers.py)。deny 优先级高于 allow确认没把要跑的命令误加进 deny。6. 长期编码与 Agent 场景的接入建议如果你不只是做一次性评测而是要把 Claude Code 长期用在 RAG 安全评测的迭代上建议把编码代理的调用也收敛到同一套通道。Coding Plan 适合这种持续性的仓库级协作入口在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 它和评测脚本共用同一个 Key记忆文件里只需要维护一份环境说明。控制台里可以按项目拆分 Key评测用一个、日常编码用一个这样某个 Key 额度异常时不会互相影响https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。Claude Code 侧的 Anthropic 兼容接入说明在 https://taotoken.net/doc/claudecode-anthropic?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 配置时把 base_url 指向统一地址即可。最后留一个我踩过的坑记忆文件不要写太长超过一屏后 Claude Code 反而会忽略中间部分。把环境、模型列表、禁令三块压到 30 行以内其余细节靠引用具体文件比一股脑塞进记忆更有效。
返回列表