公司动态
基于Claude Agent SDK构建缺陷调查智能体:18个实战环节详解
1. 项目概述从“单次对话”到“专属驭具”的工程跃迁最近在搞一个挺有意思的事儿我把团队里最头疼的“缺陷调查”这个活儿用 Claude 的 Agent SDK 给彻底自动化了。这事儿听起来好像就是做个聊天机器人但实际做下来我发现它更像是在打造一件专属的“智能体驭具”。什么叫“驭具”你可以想象一下传统的 AI 对话就像让你徒手去驯服一匹野马每次都得重新建立信任、发出指令、纠正方向累人不说效果还不稳定。而“驭具”就是一套精心设计的马鞍、缰绳和脚蹬一旦套上你就能用最省力、最标准的方式精准地驾驭这匹“AI 骏马”去完成特定的任务——比如在我们的场景里就是去茫茫代码和日志里把那个该死的 Bug 给揪出来。这个项目我称之为“AI Harness 工程学”。Harness原意就是马具、安全带引申为一套控制系统。它的核心思想不是去“使用”一个现成的、通用的 AI 模型而是基于 Agent SDK 提供的“骨架”和“关节”为特定业务场景缺陷调查设计和焊接一套专属的“神经系统”与“肌肉记忆”。最终产出的不是一个聊天窗口而是一个封装了领域知识、调查逻辑、工具调用和决策流程的、可独立运行、可迭代升级的智能体应用。经过 18 个关键环节的实战打磨这套“驭具”已经能接手我们超过 70% 的中低复杂度缺陷初筛与根因定位工作把工程师从繁琐的信息搜集和初步排查中解放出来。接下来我就把这 18 节实战中的核心设计思路、踩过的坑和最终沉淀下来的工程实践毫无保留地分享给你。2. 核心设计构建缺陷调查智能体的“四梁八柱”在动手写第一行代码之前最关键的是想清楚一个能独立调查缺陷的智能体它的“心智模型”应该是什么样的它需要哪些核心能力这决定了我们整个工程架构的走向。2.1 智能体的“角色”与“任务”定义首先我们得给这个智能体一个明确的“人设”。它不是一个全知全能的超人而是一个专注、严谨、有条理的初级调查员。它的核心任务不是直接修复 Bug而是完成高质量的缺陷信息收集与初步根因分析报告。基于这个定位我明确了它的四大核心职责信息收集与结构化能从模糊的用户反馈或报警信息中主动追问关键上下文如环境信息、复现步骤、错误截图/日志片段并将这些零散信息整理成结构化的缺陷描述。多源数据探查具备访问和查询多种数据源的能力包括代码仓库Git、日志系统如 ELK、监控图表如 Grafana、工单系统如 Jira等。逻辑推理与假设验证能根据收集到的信息形成关于根因的初步假设例如“可能是服务 A 在时间点 T 的版本升级导致与下游服务 B 的兼容性问题”并知道通过查询哪些数据来验证或推翻这个假设。报告生成与建议将调查过程、发现的证据链、最可能的根因以及下一步行动建议如需要某位开发者介入审查某段代码变更整理成清晰、可操作的报告。这个定义直接避免了智能体陷入“空谈”或试图解决超出其能力范围的问题让它始终在预设的轨道上高效运行。2.2 工具链的选型与集成逻辑智能体要干活手头必须有趁手的“工具”。Claude Agent SDK 支持 Function Calling这是我们连接外部世界的桥梁。工具选型的原则是覆盖调查路径、操作轻量、返回结构化数据。代码仓库查询工具 (search_git_commits,get_file_content)为什么选它缺陷常常与最近的代码变更相关。我们需要智能体能根据时间、作者、文件路径或提交信息关键词来检索提交历史并能查看特定版本的代码内容以进行比对。实操要点这里我封装了一个中间层不是直接暴露 Git 命令行。这个中间层会处理认证、仓库克隆缓存机制、以及将git log的原始输出解析成包含hash、author、date、message、changed_files的 JSON 数组。这极大降低了智能体理解结果的难度。日志聚合平台查询工具 (query_system_logs,query_application_logs)为什么选它运行时错误、异常堆栈是定位问题的黄金信息。我们集成了 ELKElasticsearch, Logstash, Kibana的 API。实操要点这是坑最多的地方。最初我让智能体自己拼接 Lucene 查询语句结果经常语法错误或查询超时。后来我改为提供“高阶查询接口”工具函数接收service_name、time_range、log_level、keyword等参数在内部构建安全、高效的查询。同时工具会对返回的日志条数做限制例如最多 50 条并对超长的堆栈信息进行智能截断和摘要防止上下文爆炸。监控数据获取工具 (get_metrics)为什么选它用于验证性能下降、流量突增等假设。集成 Grafana 或 Prometheus API。实操要点监控指标成千上万不能让智能体盲目搜索。我预先定义好了一套“指标模板”例如针对“API 延迟高”的缺陷模板里预置了http_request_duration_seconds、container_cpu_usage等关键指标。智能体只需指定服务名和时间范围工具就按模板查询并返回图表链接和关键统计值P99 延迟、CPU 使用率峰值等。知识库检索工具 (search_knowledge_base)为什么选它很多问题是重复的或者有已知的解决方案文档如 Wiki、Confluence。实操要点我们为内部知识库建立了简单的向量索引用 Sentence Transformers 生成嵌入存入 FAISS。这个工具允许智能体进行语义搜索找到相关的故障处理手册、配置说明等作为其推理的参考。注意工具的设计哲学是“给勺子不给厨房”。即提供封装好的、安全的、易用的函数接口而不是让 AI 去直接操作底层系统或执行任意命令。每个工具函数都必须有清晰的输入参数说明、错误处理机制和返回格式约定。2.3 工作流与状态机设计缺陷调查是一个有逻辑顺序的过程。我们不能让智能体像无头苍蝇一样随机调用工具。我设计了一个简单的有限状态机FSM来引导它的工作流状态 - 需求澄清 (Clarify)初始状态。智能体主动与用户报告者交互补全缺陷的基本信息模板现象、环境、复现步骤、影响范围。状态 - 初步探查 (Initial Probe)根据澄清的信息并行或按优先级查询近期代码变更、相关错误日志。目标是找到“线索”。状态 - 深度调查 (Deep Dive)基于找到的线索形成假设并调用更具体的工具去验证。例如如果线索指向某次提交则深入查看该次提交的代码变更详情如果线索是某个错误日志则围绕该时间点查询相关服务的监控指标。状态 - 报告生成 (Report)收集到足够证据后整理时间线、证据链给出根因结论和后续建议并结束本次任务。这个状态机并非硬性规定每一步必须走完而是内化为智能体的“任务规划”逻辑。我会在系统提示System Prompt中清晰地描述这个流程并鼓励智能体在完成一个阶段后自我评估是否具备进入下一阶段的条件。3. 实战构建18节关键环节拆解与实现下面我就把这套“驭具”的打造过程拆解成 18 个关键环节带你一步步实现。3.1 环境搭建与SDK初始化首先你需要一个 Python 环境3.9。安装 Claude Agent SDK 非常简单pip install anthropic但仅仅安装 SDK 是不够的。我建议创建一个虚拟环境并初始化一个结构清晰的项目目录defect-investigator-agent/ ├── agent_core.py # 智能体核心类定义 ├── tools/ # 工具函数目录 │ ├── git_tool.py │ ├── log_tool.py │ ├── metrics_tool.py │ └── knowledge_tool.py ├── config.py # 配置管理API Keys 服务端点 ├── prompts/ # 提示词模板目录 │ └── system_prompt.j2 └── main.py # 应用入口在config.py中管理你的 Anthropic API Key 和其他服务的认证信息切勿硬编码在代码中推荐使用环境变量或配置文件。初始化 Agent 的核心代码如下import anthropic from anthropic.types import MessageParam import asyncio class DefectInvestigator: def __init__(self, api_key): self.client anthropic.Anthropic(api_keyapi_key) # 加载系统提示词 with open(prompts/system_prompt.j2, r) as f: self.system_prompt f.read() # 工具列表将在后续步骤中动态加载 self.tools [] async def run(self, user_input): messages [MessageParam(roleuser, contentuser_input)] # 初始调用传入系统提示和工具定义 response await self.client.messages.create( modelclaude-3-5-sonnet-20241022, # 建议使用最新版本 max_tokens4096, systemself.system_prompt, messagesmessages, toolsself.tools # 工具定义 ) # 处理响应可能包含工具调用请求 return response这里的关键是system_prompt和tools。它们定义了智能体的“大脑”和“双手”。3.2 系统提示词工程铸造智能体的“灵魂”系统提示词是 Harness 工程学的核心。它不是一个简单的指令而是一份详尽的“岗位说明书”和“操作手册”。我的提示词结构如下第一部分角色与使命你是一个专业的软件缺陷调查助手名叫“哨兵”。你的唯一目标是高效、准确地协助用户初步定位软件缺陷的根本原因。你并不直接修复代码而是通过询问、搜索、分析提供一份包含证据链的调查报告。第二部分核心工作流程嵌入状态机思想你的调查应遵循以下逻辑顺序但可以根据实际情况灵活调整 1. 信息收集首先确保你完全理解了问题现象、发生环境如测试/生产、版本号、复现步骤和影响范围。如果信息不全你必须主动、有条理地追问。 2. 线索发现基于已有信息规划你的调查动作。通常优先检查相关服务在问题时间点附近的a) 错误日志和异常b) 最近的代码部署或配置变更。 3. 假设与验证根据发现的线索形成一个或多个可能的根本原因假设。然后通过查询更详细的数据如特定提交的代码差异、相关监控指标来验证或排除这些假设。 4. 总结报告将你的调查过程、关键发现引用具体数据如提交哈希、日志时间戳、最可能的根因以及后续行动建议例如“建议前端团队审查 commit abc123 中对组件X的修改”整理成最终答案。第三部分工具使用规范非常重要你可以使用以下工具来获取信息。请严格遵守使用规范 - 使用 search_git_commits 时尽量提供具体的仓库路径、时间范围和关键词。 - 使用 query_application_logs 时如果错误信息模糊可以先尝试用 ERROR 或 WARN 级别进行宽时间范围搜索再逐步缩小范围。 - 在形成初步假设前避免进行过于宽泛、耗时的查询。你的目标是精准、高效。 - 每次工具调用后仔细分析返回的结果并思考它对你当前假设的支持或反驳程度。第四部分输出格式要求你的最终输出必须是一个结构化的 Markdown 报告包含以下章节 ## 缺陷摘要 ## 调查时间线 ## 关键证据 1. 证据一 (来源工具A 查询参数...) 2. 证据二 (来源工具B 查询参数...) ## 根因分析 ## 后续建议这份提示词长达数百字但它确保了智能体行为的高度可控和可预测。它是“驭具”中的缰绳。3.3 工具函数的实现与封装以git_tool.py中的search_git_commits为例展示如何实现一个健壮、好用的工具。首先定义符合 Claude Function Calling 规范的 Tool 描述import subprocess import json from datetime import datetime, timedelta from typing import List, Optional from pydantic import BaseModel class SearchGitCommitsArgs(BaseModel): repo_path: str since: Optional[str] 1 day ago # 默认查最近一天 author: Optional[str] None keyword: Optional[str] None file_path: Optional[str] None def search_git_commits(args: SearchGitCommitsArgs) - str: 在指定Git仓库中搜索提交历史。 Args: repo_path: 仓库的本地路径。 since: 搜索起始时间例如 2024-01-01 或 2 weeks ago。 author: 提交者姓名或邮箱。 keyword: 在提交信息中搜索的关键词。 file_path: 仅显示涉及特定文件的提交。 Returns: 一个格式化的字符串包含匹配的提交列表每个提交包含哈希、作者、日期、信息和更改的文件。 如果出错返回错误信息。 # 1. 构建 git log 命令 cmd [git, -C, args.repo_path, log, --oneline, --no-merges, --prettyformat:%H|%an|%ad|%s, --dateshort] if args.since: cmd.extend([--since, args.since]) if args.author: cmd.extend([--author, args.author]) if args.keyword: cmd.extend([--grep, args.keyword]) if args.file_path: cmd.extend([--, args.file_path]) # 2. 执行命令并处理错误 try: result subprocess.run(cmd, capture_outputTrue, textTrue, checkTrue, timeout30) output result.stdout except subprocess.CalledProcessError as e: return fGit命令执行失败: {e.stderr} except subprocess.TimeoutExpired: return Git查询超时请尝试缩小时间范围或关键词。 # 3. 解析并格式化结果 if not output: return f在仓库 {args.repo_path} 中根据给定条件未找到任何提交。 commits [] for line in output.strip().split(\n): if | not in line: continue hash_val, author, date, message line.split(|, 3) # 获取该提交更改的文件列表简化版 file_cmd [git, -C, args.repo_path, show, --name-only, --pretty, hash_val] try: file_result subprocess.run(file_cmd, capture_outputTrue, textTrue, checkTrue, timeout10) changed_files file_result.stdout.strip().split(\n) changed_files [f for f in changed_files if f] # 去除空行 except Exception: changed_files [获取文件列表失败] commits.append({ hash_short: hash_val[:8], author: author, date: date, message: message, changed_files: changed_files[:5] # 只显示前5个文件 }) # 4. 返回结构化的文本便于AI理解 response f在仓库 {args.repo_path} 中找到 {len(commits)} 个相关提交\n\n for i, commit in enumerate(commits, 1): response f{i}. **{commit[hash_short]}** ({commit[date]}) by {commit[author]}\n response f 信息: {commit[message]}\n response f 涉及文件: {, .join(commit[changed_files][:3])} if len(commit[changed_files]) 3: response f 等 {len(commit[changed_files])} 个文件 response \n\n return response然后在主程序中我们需要将工具描述注册到 Agent# 在 agent_core.py 的 __init__ 中 self.tools [ { name: search_git_commits, description: 在指定的Git代码仓库中搜索提交历史。用于查找可能引入缺陷的代码变更。, input_schema: { type: object, properties: { repo_path: {type: string, description: Git仓库的本地文件系统路径。}, since: {type: string, description: 搜索从何时开始例如2024-01-01或2 days ago。默认为1 day ago。}, author: {type: string, description: 按提交者过滤。}, keyword: {type: string, description: 在提交信息中搜索的关键词。}, file_path: {type: string, description: 只显示影响特定文件的提交。} }, required: [repo_path] } }, # ... 其他工具的定义 ]实操心得工具函数的返回值设计至关重要。直接返回原始的、未经处理的 JSON 或大段文本会浪费宝贵的上下文 Token且增加 AI 解析的难度。应该像上面那样在工具内部就做好摘要、格式化和关键信息提取返回一段对 AI 友好、对人类也易读的文本。3.4 主循环与工具调用处理智能体的核心是一个循环接收用户输入 - Claude 思考并可能请求调用工具 - 执行工具 - 将工具结果返回给 Claude - Claude 继续思考或输出最终答案。async def run_conversation(self, initial_input): messages [MessageParam(roleuser, contentinitial_input)] while True: # 1. 调用Claude response await self.client.messages.create( modelclaude-3-5-sonnet-20241022, max_tokens4096, systemself.system_prompt, messagesmessages, toolsself.tools ) # 2. 处理响应 # 2.1 如果是最终文本输出则返回 if response.stop_reason end_turn: final_text for content in response.content: if content.type text: final_text content.text return final_text # 2.2 如果是工具调用请求则执行工具 new_messages [] for content in response.content: if content.type text: new_messages.append(MessageParam(roleassistant, contentcontent.text)) elif content.type tool_use: # 记录AI想使用工具 tool_name content.name tool_args content.input new_messages.append(MessageParam(roleassistant, contentf[调用工具 {tool_name} 参数: {tool_args}])) # 查找并执行对应的工具函数 tool_result await self._execute_tool(tool_name, tool_args) # 将工具执行结果追加到消息历史 new_messages.append(MessageParam(roleuser, contentf[工具 {tool_name} 返回结果]: {tool_result})) # 将本轮的新消息追加到总历史中用于下一轮对话 messages.extend(new_messages) # 简单防止无限循环 if len(messages) 20: return 调查会话过长已自动终止。请提供更精确的初始信息重试。 async def _execute_tool(self, name, args): # 这里是一个简单的映射实际项目中可能需要更复杂的路由和错误处理 if name search_git_commits: from tools.git_tool import search_git_commits, SearchGitCommitsArgs try: parsed_args SearchGitCommitsArgs(**args) result search_git_commits(parsed_args) except Exception as e: result f调用工具 {name} 时参数解析错误: {e} return result # ... 处理其他工具 else: return f未知的工具调用: {name}这个循环逻辑是 Agent 的“发动机”。注意事项必须妥善管理对话历史 (messages)。每次工具调用和结果都需要被追加到历史中这样 Claude 才能拥有完整的上下文进行后续推理。同时要警惕上下文长度限制对于非常长的工具结果如大段日志需要在_execute_tool中进行智能截断或摘要。3.5 记忆与上下文管理优化随着调查步骤增多上下文会不断膨胀。Claude 3.5 Sonnet 有 200K 的上下文但合理管理依然重要。阶段性总结我修改了工作流在智能体完成“初步探查”状态后会强制它生成一个“当前线索摘要”。然后在开启“深度调查”前我会用这个摘要替换掉之前冗长的原始交互和工具调用细节只保留摘要作为新的上下文起点。这相当于为智能体做了一次“记忆快照”释放了 Token 空间。关键信息提取与注入对于工具返回的结果尤其是日志和代码变更我让工具函数在返回时不仅提供格式化文本还额外提取一个“关键信息”字段例如“在 14:05 发现NullPointerException位于com.example.Service.process()第 45 行”。在后续的提示词中我可以明确要求智能体“请基于之前提取的关键线索进行推理”从而减少对原始长文本的依赖。3.6 测试与迭代用真实缺陷案例喂养构建完成后不要急于上线。我收集了团队过去半年内 50 个已解决的、复杂度各异的缺陷报告脱敏后作为测试集。单案例测试将原始的缺陷描述输入给智能体让它独立调查。我则扮演“用户”回答它的追问。全程记录它的工具调用顺序、推理逻辑和最终报告。评估维度信息收集完整性它是否问对了关键问题调查路径合理性工具调用顺序是否符合逻辑有没有做无用功根因结论准确性最终报告指向的根因与实际解决时的根因是否一致或接近报告可读性与实用性报告是否清晰建议是否可操作迭代改进根据测试结果反向优化三个部分提示词如果智能体总是忽略某个重要数据源就在提示词中强调。如果它总爱做天马行空的假设就增加约束“优先考虑与最近变更相关的常见原因”。工具如果某个工具返回的信息格式不好用就调整工具的输出格式。如果缺少某个关键查询能力比如查询特定时间点的数据库慢日志就开发新工具。工作流如果发现智能体经常在“初步探查”和“深度调查”间跳来跳去就在提示词中更严格地定义状态转换的条件。这个过程大约持续了两周迭代了十几个版本。最大的收获是你喂给 AI 的案例质量直接决定了它能力的上限。那些描述清晰、解决过程记录完善的缺陷能训练出更靠谱的智能体。4. 避坑指南与效能提升技巧在 18 节实战中我踩了无数坑也总结出一些能极大提升智能体效能的技巧。4.1 提示词编写的“三要三不要”三要要具体不要抽象与其说“仔细分析日志”不如说“首先查找 ERROR 级别的日志条目关注其异常堆栈信息其次寻找在问题发生时间点前后出现的 WARN 日志作为上下文”。要结构化不要平铺使用清晰的编号、章节和格式要求如 Markdown这能引导 AI 产出结构化的思考过程和输出。要举例不要只讲道理在提示词中嵌入一两个简短的、正面的调查过程示例比一千句描述都管用。例如“当用户报告‘登录失败’时一个优秀的调查路径是1. 确认环境2. 查询认证服务在对应时间的错误日志3. 检查近期是否有涉及登录逻辑的代码发布...”三不要不要给 AI 它做不到的指令比如“直接修复代码”或“重启服务器”。指令必须与提供的工具能力匹配。不要使用容易产生歧义的词汇避免“可能”、“也许”、“尝试”等模糊词。用“应当”、“优先”、“如果...则...”等明确词汇。不要一次性提供过长的指令超过一定长度后AI 对后半部分指令的注意力会下降。将核心工作流程、工具规范、输出要求分块并在关键处使用## 重要 ##这样的标记进行强调。4.2 工具设计中的性能与安全陷阱超时与限流所有对外部系统Git、ELK、Grafana的调用都必须设置超时如 30 秒和重试机制。避免因为一个慢查询拖垮整个 Agent 会话。同时要遵守下游系统的 API 限流规则。结果大小限制日志查询工具必须内置limit参数默认返回前 20-50 条。对于确实需要更多数据的情况可以设计分页查询或“摘要模式”工具。输入验证与沙箱对工具的所有输入参数进行严格的验证和清洗防止路径遍历../../../etc/passwd、命令注入等安全风险。考虑在 Docker 容器或安全沙箱中运行工具函数。认证信息管理工具的认证信息如 SSH key、API Token必须通过安全的配置管理系统获取绝不能写在代码或提示词里。4.3 让智能体学会“求助”与“确认”最初的版本智能体遇到模糊信息会自己瞎猜导致调查方向走偏。我通过修改提示词赋予了它“求助”和“确认”的能力。求助机制在提示词中加入“如果你认为当前信息不足以做出任何合理的调查假设或者你需要用户提供某个特定信息才能继续例如确切的错误代码、服务名称请直接、明确地向用户提问。”确认机制对于重要的、影响后续调查方向的工具调用例如准备基于一个可疑的提交哈希进行深度代码分析让智能体在调用前先向用户简述它的推理和即将采取的行动。例如“我发现一个在问题发生前 2 小时由开发者‘张三’提交的关于支付模块的修改提交 hash: a1b2c3d。我计划详细分析这次提交的代码变更来验证它是否是根因。可以继续吗” 这增加了过程的透明度和可控性。4.4 评估与持续改进体系上线后需要建立评估体系。人工审核通道每一份智能体生成的报告在初期都必须有一个“确认”按钮由资深工程师快速浏览后确认或驳回。驳回的报告会进入改进池。关键指标监控自动化率有多少比例的缺陷单首先由智能体处理首次报告准确率智能体首次生成的报告中根因分析被工程师确认的比例。平均调查耗时对比人工调查和智能体辅助调查的平均时间。工具调用分布哪些工具最常用哪些很少用这反映了智能体的调查模式也提示了工具链的优化方向。反馈循环将工程师驳回或修正过的案例经过脱敏和格式化定期如每周作为新的训练数据微调提示词或用于测试新版本的智能体。5. 从“项目”到“产品”工程化与部署考量当这个智能体在团队内部跑起来并证明价值后就不能再只是一个脚本了。我们需要把它工程化变成一个团队可依赖的“产品”。5.1 架构升级从脚本到服务最初的单文件脚本需要重构。我将其改造成了一个简单的 Web 服务使用 FastAPI这带来了几个好处标准化接口提供统一的 HTTP API方便与现有的工单系统如 Jira、禅道集成。当有新的缺陷单创建时系统可以自动调用该 API 触发初步调查。异步处理缺陷调查可能耗时较长几十秒到几分钟Web 服务可以轻松实现异步任务队列Celery Redis避免 HTTP 请求超时。状态持久化将每次调查的会话Messages 历史、工具调用记录、最终报告存入数据库如 PostgreSQL便于后续复查、分析和模型训练。配置化管理将提示词模板、工具配置、模型参数等放到配置文件中支持热更新无需重启服务。5.2 与现有工作流集成真正的威力在于无缝集成。我们做了两件事与 Jira 集成开发了一个 Jira 插件。当工程师新建一个 Bug 单并填写了基础信息后插件会自动调用我们的智能体服务。智能体生成的初步报告会以评论的形式自动附加到该 Jira 单下并 相关的模块负责人。这相当于为每个新 Bug 配备了一个“第一响应员”。与 CI/CD 流水线告警集成在持续集成阶段如果自动化测试大规模失败或性能测试出现严重衰退告警信息会不仅通知人也会触发智能体。智能体立即去检查本次构建对应的代码变更、查看测试日志并在几分钟内生成一份“构建失败根因推测报告”随告警一并发出极大加速了排错过程。5.3 成本控制与优化使用 Claude API 是有成本的。我们需要关注Token 消耗长上下文和多次交互意味着高 Token 使用。优化方法包括前述的“阶段性总结”压缩上下文优化工具返回信息的密度减少冗余对于非常复杂的调查可以设置一个成本上限达到后自动转为“线索摘要”模式请人类介入。缓存策略对于相同的查询例如查询过去一小时内某服务的 ERROR 日志结果在短时间内是相同的。可以在工具层或服务层增加缓存如 Redis缓存时间为几分钟能有效减少对下游系统和 Claude API 的重复调用。模型选型对于信息收集和简单线索梳理可以尝试使用更便宜、更快的模型如 Claude 3 Haiku只在需要深度推理和报告生成时调用 Sonnet 或 Opus。这需要设计更精细的流程控制。6. 总结与展望智能体驭具的无限可能打造这个“缺陷调查智能体驭具”的过程是一次深刻的 AI 工程化实践。它让我意识到大模型的强大能力就像一股汹涌的洪流而Harness 工程学的目的就是为这股洪流修建精准的渠道和水车让它驱动具体的业务齿轮产生可衡量、可复现的价值。这套方法论绝不局限于缺陷调查。你可以将它应用到任何需要标准化流程、多源信息整合、逻辑推理的领域客服工单智能预处根据用户描述自动查询订单、日志给出初步解决方案或升级路径。内部知识问答驭具连接公司所有文档、代码库、会议纪要打造一个能深度推理的“超级新员工助手”。安全事件分析驭具接入 SIEM 系统日志自动关联分析可疑登录、异常流量生成初步事件报告。这个项目的 18 节实战从设计思想到工具封装从提示词打磨到工程化部署其核心脉络是“约束下的赋能”。我们通过精心的设计提示词、工具、工作流来约束 AI 的行动范围恰恰是为了让它在这个范围内能更安全、更高效、更可靠地发挥其推理和连接能力。当你开始用“驭具”的思维而非“聊天”的思维去构建 AI 应用时一个全新的、充满可能性的世界就打开了。