【Agent智能体21 | 构建AI工作流的技巧-优化组件的常用方法】
声明:本篇博客是以吴恩达的【Agent智能体】教程为基础,并对其中的内容做了笔记整理以及个人收获的总结。
上一篇介绍了组件级评估的方式,端到端测试会受到“噪声”的影响,且成本很大,因此我们引入了组件级的评估方式,这可以让我们专注于优化某个具体的组件,提高优化组件的效果。并且解耦了团队协作流程!
这一篇介绍一些优化组件的方式,一个智能体工作流可能包含多种不同类型的组件,因此提升不同组件的工具也会有很大差异,下面会介绍一些通用的模式:
优化非大语言模型组件(non-LLM component)
在一个完整的AI系统中,除了核心的大语言模型外,通常还会结合许多外部工具和传统模型。例如:网络搜索、RAG的文本检索、代码执行、训练好的机器学习模型(用于语音识别、人员检测等)
这张图讲的是如何优化这些辅助组件。
1. Tune hyperparameters of component (调整组件的参数)这是指在不更换现有工具的情况下,通过修改其内部设置来获得更好的结果。
Web search (网络搜索):Number of results, date range (结果数量、日期范围)。
- 解释:比如让搜索引擎只返回前3个最相关的结果,或者只搜索最近一年的文章,以提高信息的精准度。
RAG (检索增强生成):Change similarity threshold, chunk size (更改相似度阈值、分块大小)。
- 解释:在从本地知识库检索信息时,可以调整相似度分数的要求(太低会导致无关信息混入),或者调整每次切分文本的长度(chunk size)。
ML models (机器学习模型):Detection threshold (检测阈值)。
- 解释:对于图像识别或语音模型,调整其判定置信度的阈值,比如只有超过90%确定的结果才被采纳,以减少误报。
2. Replace the component (替换组件)如果调整参数依然无法满足需求,就可以考虑直接更换底层的工具。
尝试不同的网络搜索引擎、RAG提供商等。(Try a different web search engine, RAG provider, etc.)
解释:例如把搜索工具从 Bing 换成 Google,或者把向量数据库从 Pinecone 换成 Milvus。
优化大语言模型组件(LLM component)
聚焦于系统中的核心大脑——大语言模型(LLM)本身的性能提升方法。按照实施成本和难度,通常由低到高分为以下四个策略:
1. Improve your prompts (改进你的提示词)这是最直接、成本最低的优化方式。
**添加更明确的指令。在提示词中添加一个或多个具体示例(少样本提示)**Add more explicit instructions. Add one or more concrete example to the prompt (few-shot prompting).
解释:如果模型回答不好,首先反思是不是指令不够清晰。你可以给出具体的规则,或者直接给模型提供几个“标准问答示范”(Few-shot),让模型照猫画虎。
2. Try a new model (尝试一个新模型)不同的模型擅长的领域和能力上限不同。
尝试多个大语言模型,并使用评估(evals)来挑选最好的一个。(Try multiple LLMs and use evals to pick the best.)
解释:如果提示词已经优化到极限,可能是当前模型的智商瓶颈了。这时可以在测试集上对比一下 GPT-4、Claude 3、Gemini 等不同模型,看哪个表现最好。
3. Split up the step (拆分步骤)降低单次推理的复杂度。
将任务分解成更小的步骤。(Decompose the task into smaller steps.)
解释:不要试图让模型一次性完成“阅读万字长文并写出包含三方面数据分析的总结报告”这种复杂任务。可以拆分为:第一步提取数据,第二步总结核心观点,第三步整合撰写报告。这能大幅降低模型的出错率(幻觉)。
4. Fine-tune a model (微调模型)这是成本最高但也最能打造垂直领域专属能力的方案。
使用内部数据进行微调以提升性能。(Fine tune on your internal data to improve performance.)
解释:当通用的提示词和模型都无法掌握你们公司特定的行话、格式或私有逻辑时,可以将大量的业务数据做成训练集,让模型“回炉重造”一下,从而在特定任务上达到甚至超越更大参数模型的表现。
但是注意:微调模型会很复杂,而且成本很高,一般都是前几个都没用的时候才会使用这个方法
遵循复杂指令(Instruction following)
这个图演示了如何通过编写多步骤、明确的提示词(Prompt),让大模型严格按照人类的要求处理数据。
原始输入数据 (Summary of customer call)
蓝色字体的文本是一段模拟的客服通话记录摘要。
- 2023年7月14日,居住在科罗拉多州博尔德市 1024 Maple Ridge Lane,邮编80301的 Jessica Alvarez(社会安全号码:555-44-3333)提交了一份支持工单……
- 这段文本中包含了明显的个人身份信息(PII, Personally Identifiable Information),如姓名、社保号(SSN)和详细家庭住址。
提示词拆解 (Prompt)
- 识别 (Identification):识别出下方文本中所有属于个人身份信息(PII)的内容。
- 分类与脱敏 (Classification & Redaction):然后返回一个按类型分类的已识别 PII 列表,接着用“*****”将所有识别出的 PII 进行打码(脱敏)
- 格式化输出 (Formatting):使用“REDACTED: ”这个词将“PII列表”和“脱敏后的文本”分隔开。
- 占位符:
{text}代表将上面的客服记录摘要插入到这里。
在较小的模型上运行
这个图展示了一个参数量较小的开源模型(Llama 3.1 8B)的输出结果。右侧的方框给出了结论:它失败了
- Didn’t follow the instructions properly(没有正确遵循指令)
- Missed some PII(遗漏了一些个人身份信息)
具体失败原因分析:
- 信息提取不全 (Missed some PII):在它列出的 PII 列表中,只提取了“Social Security Number (社保号)”和“Address (地址)”,完全遗漏了“客户姓名 (Jessica Alvarez)”。
- 无视格式指令 (Didn’t follow formatting):上一张图的提示词明确要求:“使用 'REDACTED: ’ 将列表和脱敏文本分开”。但这个模型并没有使用这个特定的词,而是自作主张地写了一句啰嗦的话:“Redacted text with “*****” replacing the identified PII:”。
- 输出逻辑混乱:在脱敏文本之后,它又莫名其妙地把 PII 列表重复输出了一遍,显得非常笨拙。
更好的模型
这个图展示了一个强大闭源模型(GPT-5)的输出结果。右侧的方框给出了结论:它完美完成了任务。
- Followed formatting instruction(遵循了格式化指令)
- Identified all PII(识别出了所有的个人身份信息)
具体成功原因分析:
- 精准提取 (Identified all PII):它准确地找出了所有三项敏感信息:Full Name (全名)、Social Security Number (社保号) 和 Physical Address (物理地址),没有遗漏。
- 严格遵守格式 (Followed formatting):它极其听话,在 PII 列表和脱敏文本之间,干净利落地使用了大写的
REDACTED:作为唯一的分隔符,没有任何多余的废话。 - 脱敏彻底:下方的文本中,对应的名字、社保号和地址都被完美地替换成了
*****。
Developing intuition for model intelligence (培养模型智能的直觉的方式)
这种“直觉”是指:当你面对一个具体任务时,你能凭经验下意识地判断出哪个模型能搞定、大概需要怎么写提示词、以及模型可能会在哪一步犯错。
建议一:Play with models often (经常把玩/使用模型)
建立直觉没有捷径,最好的方法就是大量、频繁地去实际使用它们。
**拥有一套你个人的评估标准(evals)**可能会有帮助。(Having a personal set of evals might be helpful )
- 解释:这里的“evals”指的是评估测试集。不要只看官方公布的跑分数据。建议你自己准备几个你非常熟悉的复杂问题(比如你所在行业的专业难题、或者你写过的一个逻辑题),每次出了新模型,都拿这套“私人题库”去考一考它,这样你立刻就能体会出它比上一个版本聪明了多少。
阅读其他人的提示词,以获取如何最好地使用模型的灵感。(Read other people’s prompts for ideas of how to best use models )
- 解释:提示词工程(Prompt Engineering)是一门实践科学。多看看开源社区或别人分享的优秀 Prompt,你会学到很多激发模型潜力的奇技淫巧。
建议二:Use different models in your agentic workflows (在你的智能体工作流中使用不同的模型)
在构建复杂的 AI Agent 系统时,不要死磕单一模型(比如只用 GPT-4o),而是要学会“组合拳”。
哪些模型适合哪些类型的任务?(Which models work for which types of tasks? )
- 解释:不同的模型有不同的“偏科”。有的代码能力极强(如 Claude 3.5 Sonnet),有的极其快速且便宜(如 Llama 3 8B 或 Gemini 1.5 Flash),有的擅长极长文本处理。你需要通过测试,为工作流中的每一步分配最合适的“员工”。
aisuite 使得快速切换/替换模型变得很容易。(aisuite makes it easy to quickly swap out models )
- 解释:
aisuite是一个具体的代码库(由吴恩达团队推出)。过去,切换不同的模型需要重写大量 API 调用代码;而使用类似aisuite这样的工具,它提供了一个统一的接口,让你只需改一行代码,就能无缝切换 OpenAI、Anthropic、Google 等不同厂商的模型,极大降低了测试成本。
- 解释:
除了提高工作流质量,后面会介绍一些优化延迟、成本的方式。
如果这篇文章对你有帮助,欢迎点赞、评论、关注、收藏。你们的支持是我前进的动力!
