厨房噩梦:LangChain Agent 版
我开发了一款健康应用,用于解析食谱并制定饮食计划。
Web 应用使用了 FastAPI 和 React。Agent 部分使用了 LangChain。我使用 LangSmith 来观察我的 Agent 都在做什么。
目标很简单。用户提供一个 URL,应用获取食谱并将其拆分为主菜、配菜和酱料等组件。用户随后可以进行混搭以构建餐食或追踪卡路里。
我遇到了 Agent 可靠性方面的重大问题。
起初,我使用一个 Agent 来对食谱进行分组并格式化输出。但它经常失败:产生重复项、遗漏指令,或者将所有内容合并成一大块。
我尝试通过双 Agent 设置来解决这个问题:
- Agent 1(分组):识别不同的食谱组件,并整理食材和指令。
- Agent 2(结构化):将整理好的文本转换为整洁的 JSON 格式。
这套方案只奏效了一天。第二天,错误又回来了。结构化 Agent 开始返回缺失所有食材和指令的 JSON。
我停止使用 print 语句,开始使用 LangSmith。
LangSmith 可以向我展示延迟、Token 使用量和成本。最重要的是,它能准确指出 Chain 在哪里断裂。
在我的案例中,分组 Agent 的表现非常完美,它能生成包含所有细节的优质 Markdown。失败发生在第二个 Agent,它在转换过程中丢失了数据。
现在我正在进行三项修复工作:
- 提高 Agent 可靠性:我注意到结构化 Agent 会尝试猜测原始 Prompt 中并未包含的“菜系 (cuisine)”字段。这种混淆导致了错误。
- 添加校验:我将使用 Python 函数来检查输出。我希望确保 Markdown 正确且没有重复项。
- 更好的可观测性:我希望将每次 Agent 执行与特定的用户请求关联起来,以便于追踪。
使用 Agent 进行开发并非一劳永逸的任务。它是一个不断测试和修复的循环过程。
Source: https://dev.to/kristianroopnarine/kitchen-nightmares-langchain-agents-edition-45co
Optional learning community: https://t.me/GyaanSetuAi
