在天通苑的隔断间里,我用Claude Agent SDK把RAG玩出了花
上周五晚上十一点半,我坐在天通苑那间月租1800的隔断间里,盯着屏幕上的报错日志发呆。我刚刚拿到了字节的offer,但心里清楚,能过面试纯属运气好——面试官问的RAG场景题,恰好是我上周在公司内部项目里踩过的坑。
从“调包侠”到被迫思考架构
年初我对RAG的理解还停留在“用LangChain搭个检索增强生成就完事了”。实习时做内部知识库,把wiki向量化存进ChromaDB,检索片段拼进prompt喂给GPT-4。三天搞出demo,老板直点头。但上线两周后问题频出:用户问“去年Q3销售数据”,系统返回不相干的报告,因向量检索默认余弦相似度,而“Q3”和“第三季度”表述不同。上下文窗口爆炸,2000多token的片段推高API成本,财务找我谈话时我后背冒汗。最离谱的是幻觉,系统把内部玩笑当事实输出,HR直接找技术老大,说再这样有法律风险。
Claude Agent SDK带来的思路转变
五月Anthropic发布Claude Agent SDK,我起初以为又来一个框架。细看后发现它与LangChain那套不同:核心不是编排工具调用链,而是把Claude本身当成能思考、规划、用工具的智能体,强调“让模型自己决定何时检索、怎么检索、检索后怎么用”。这理念正契合我踩的坑。传统RAG流程死板:检索→拼接→生成。但真实问题千奇百怪,有的需多步推理,有的需先反问澄清。硬编码流程根本cover不住。我决定用它重构系统,并作为毕设。导师提醒“想清楚评估指标”,这话后来救了我。
具体实现和踩坑记录
Claude Agent SDK无需显式定义工具调用顺序,配置好工具集后,模型自行决定策略。我配置了三个核心工具:
- 向量检索工具:底层用ChromaDB,但检索参数动态调整,Claude按问题类型自动设定
top_k和相似度阈值。 - 元数据过滤工具:按文档类型、时间范围、部门过滤,解决“Q3”匹配问题——先锁定时间范围再语义检索。
- 澄清反问工具:问题模糊时主动要求补充信息,避免瞎猜。
简化代码如下:
from anthropic import Anthropic
from claude_agent_sdk import Agent, Tool
@Tool.register("search_knowledge_base")
def search_kb(query: str, top_k: int = 5, filters: dict = None):
"""检索知识库,返回相关文档片段"""
results = chroma_collection.query(
query_embeddings=embed(query),
n_results=top_k,
where=filters
)
return format_results(results)
agent = Agent(
client=Anthropic(),
tools=[search_kb, filter_by_metadata, ask_clarification],
system_prompt="""你是企业内部知识库助手。
1. 判断问题是否清晰,不清晰则主动反问
2. 确定检索的信息维度和范围
3. 检索后评估结果充分性,不足则调整策略重试
4. 基于结果回答,不确定时明确告知
"""
)
response = agent.run(user_question)
跑起来后我遇到死循环问题:Agent会陷入“检索-不满意-再检索”循环,搜不到就换词再搜,直到token耗尽。解决方案是在系统提示加硬约束:“连续两次检索无高度相关结果,直接告知用户可能无信息,建议提供更多线索。”这使API成本降低40%。
RAG是系统设计问题
折腾两个月,我认识到RAG更是系统设计问题。
第一,检索质量重于生成质量。 垃圾进垃圾出。我投入大量精力在文档预处理:分块策略、元数据标注、查询改写。一次发现表格被按段落切分后表头内容分离,检索出无意义数字。专门写表格解析逻辑后,准确率提升20个点。
第二,让模型有“自知之明”。 Claude Agent SDK允许模型在信息不足时说“我不知道”,这在传统RAG中难实现。我在系统提示明确:“目标是帮助用户,而非假装无所不知。”
第三,成本控制前置。 不加限制时,单个复杂问题API成本可达$0.5。现设置严格token预算,监控平均检索次数。对频繁触发多次检索的用户,前端提示“尽量具体描述问题”。
拿到offer后的反思
字节终面时面试官问:“RAG系统最难解决什么?”我想了三十秒答:“预期管理。用户觉AI应全知,产品经理觉加RAG能消幻觉,老板觉成本该趋零。好RAG系统需在准确性、成本和体验间大量权衡。”面试官笑了,说内部也头疼这些。那一刻我意识到,对问题本质的理解让你脱颖而出。
如果你在做RAG,我的建议:先想清系统在哪些维度取舍。多读Anthropic和OpenAI官方文档,其对最佳实践的思考比多数博客深刻。别迷信框架——Claude Agent SDK的价值在让你重新思考人机协作方式,而非提供黑盒。天通苑房租下月涨到2000,等发工资我打算搬去有独卫的房子,再不想debug到凌晨三点去公共厕所了。

评论 0