20分钟构建LangGraph多智能体系统与动态配置

本教程详细介绍了如何在20分钟内使用LangGraph构建多智能体系统,集成RAG搜索和LaunchDarkly AI配置,实现动态模型切换和行为调整,无需代码部署即可实时控制AI代理行为。

概述

使用LangGraph多智能体工作流、RAG搜索和LaunchDarkly AI配置,在20分钟内构建具有动态配置功能的多智能体系统。

这是系列文章"从混沌到清晰:实现目标的可防御AI系统"的第一部分(共三部分)。

您可能遇到过这种情况:AI聊天机器人在测试中表现良好,但进入生产环境后GPT-4成本失控。您切换到Claude,但欧洲用户需要不同的隐私规则。每次更改都意味着另一次部署、更多测试,并祈祷不会出现问题。

那些发布更快的团队?他们动态控制AI行为,而不是硬编码所有内容。

本系列将展示如何构建LangGraph多智能体工作流,这些工作流通过RAG搜索从业务文档中获取智能。这些工作流通过MCP工具增强实时外部数据访问,并通过LaunchDarkly AI配置进行控制——所有这些都无需部署代码更改。

本系列涵盖内容

  • 第1部分(本文):在20分钟内构建具有动态配置功能的多智能体系统
  • 第2部分:添加高级功能,如分段定位、MCP工具集成和成本优化
  • 第3部分:运行生产A/B实验以证明实际效果

到最后,您将拥有一个能够衡量自身性能并根据用户数据而非猜测进行适应的系统。

今天将构建什么

在接下来的20分钟内,您将拥有一个LangGraph多智能体系统,包括:

  • 监督代理:协调专业代理之间的工作流
  • 安全代理:检测PII和敏感信息
  • 支持代理:使用业务文档回答问题
  • 动态控制:通过LaunchDarkly更改模型、工具和行为,无需代码更改

先决条件

您需要:

  • Python 3.9+ 和 uv 包管理器(安装 uv)
  • LaunchDarkly 账户(免费注册)
  • OpenAI API 密钥(RAG架构嵌入必需)
  • Anthropic API 密钥(Claude模型必需)或 OpenAI API 密钥(GPT模型)

第1步:克隆和配置(2分钟)

首先,让我们在本地运行所有内容。我们将在构建过程中解释每个部分的作用。

1
2
3
4
5
6
7
8
9
# 获取代码
git clone https://github.com/launchdarkly-labs/devrel-agents-tutorial
cd devrel-agents-tutorial

# 安装依赖(LangGraph、LaunchDarkly SDK等)
uv sync

# 配置环境
cp .env.example .env

首先,您需要通过创建项目获取LaunchDarkly SDK密钥:

  1. 在 app.launchdarkly.com 注册LaunchDarkly(免费账户)
  2. 在侧边栏找到项目
  3. 创建名为"multi-agent-chatbot"的新项目

为第2部分兼容性使用确切名称:

  • 项目:multi-agent-chatbot
  • AI配置:supervisor-agent, security-agent, support-agent
  • 工具:search_v2, reranking
  • 变体:supervisor-basic, pii-detector, rag-search-enhanced

获取SDK密钥:

  1. 齿轮图标(侧边栏底部)→ 项目 → multi-agent-chatbot → 齿轮图标(右侧)→ 环境 → 生产 → SDK密钥
  2. 这是您的 LD_SDK_KEY

现在使用您的密钥编辑 .env:

1
2
3
LD_SDK_KEY=您的LaunchDarkly SDK密钥  # 从上一步获取
OPENAI_API_KEY=您的OpenAI密钥        # RAG嵌入必需
ANTHROPIC_API_KEY=您的Anthropic密钥  # Claude模型必需

这设置了一个使用LaunchDarkly控制AI行为的LangGraph应用程序。可以把它想象成在表演中途更换演员、导演甚至道具,而无需停止演出。不要将.env检入源代码控制。确保这些秘密的安全!

第2步:添加业务知识(2分钟)

系统包含一个强化学习教科书样本。将其替换为您特定领域的文档。

1
2
3
4
5
6
# 选项A:使用样本(AI/ML知识)
# 已包含:kb/SuttonBarto-IPRL-Book2ndEd.pdf

# 选项B:添加您的文档
rm kb/*.pdf  # 清除样本
cp /path/to/your-docs/*.pdf kb/

效果良好的文档类型:

  • 法律:合同、案例法、合规指南
  • 医疗:协议、研究论文、护理指南
  • SaaS:API文档、用户指南、故障排除手册
  • 电子商务:产品目录、政策、常见问题解答

这些文档将作为RAG搜索的知识库,为您的代理提供特定业务上下文。

第3步:初始化知识库(2分钟)

将文档转换为可搜索的RAG知识:

1
2
# 创建向量嵌入以进行语义搜索
uv run python initialize_embeddings.py --force

这使用OpenAI的文本嵌入模型和FAISS向量数据库构建您的RAG(检索增强生成)基础。RAG将文档转换为捕获语义含义而非仅关键字的向量嵌入,使搜索真正理解上下文。

第4步:定义工具(3分钟)

定义您的代理将使用的搜索工具。

在LaunchDarkly应用侧边栏中,点击AI部分中的Library。 在以下屏幕上,点击Tools选项卡,然后点击Create tool。

创建RAG向量搜索工具: 注意:在第3部分学习实验时,我们将创建简单的search_v1。使用以下配置创建工具:

键: search_v2 描述: 使用向量嵌入进行语义搜索 模式:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
{
  "properties": {
    "query": {
      "description": "用于语义匹配的搜索查询",
      "type": "string"
    },
    "top_k": {
      "description": "要返回的结果数量",
      "type": "number"
    }
  },
  "additionalProperties": false,
  "required": [
    "query"
  ]
}

完成后,点击Save。

创建重新排名工具: 回到Tools部分,点击Add tool创建新工具。添加以下属性:

键: reranking 描述: 使用BM25算法按相关性重新排序结果 模式:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
{
  "properties": {
    "query": {
      "description": "用于评分的原始查询",
      "type": "string"
    },
    "results": {
      "description": "要重新排序的结果",
      "type": "array"
    }
  },
  "additionalProperties": false,
  "required": ["query", "results"]
}

完成后,点击Save。重新排名工具获取search_v2的搜索结果,并使用BM25算法重新排序以提高相关性。这种混合方法结合了语义搜索(向量嵌入)和词汇匹配(基于关键字的评分),使其特别适用于技术术语、产品名称和错误代码,其中精确术语匹配比概念相似性更重要。

您的RAG架构如何工作

您的RAG系统分两个阶段工作:search_v2通过将查询转换为与文档相同的向量空间(通过OpenAI嵌入)来使用FAISS执行语义相似性搜索,而reranking为最大相关性重新排序结果。这种RAG方法通过理解上下文显著优于关键字搜索,因此询问"我的应用程序坏了"可以找到提及"应用程序错误"或"系统故障"的故障排除指南。

第5步:在LaunchDarkly中创建AI代理(5分钟)

现在您已经创建了代理将使用的工具,是时候配置代理本身了。每个代理都有自己的AI配置,定义其行为、模型选择和特定指令。

创建LaunchDarkly AI配置以动态控制您的LangGraph多智能体系统。LangGraph是LangChain的框架,用于构建有状态的多代理应用程序,在代理交互之间维护对话状态。您的LangGraph架构支持复杂的的工作流,其中代理协作并在彼此之间传递上下文。

创建监督代理

  1. 在LaunchDarkly仪表板侧边栏中,导航到AI配置并点击Create AI Config
  2. 选择Agent-based
  3. 将AI配置命名为supervisor-agent。这将是您在代码中引用的键。
  4. 在AI配置表单中配置以下字段:
  • 变体:supervisor-basic
  • 模型配置:Anthropic → claude-3-7-sonnet-latest
  • 目标或任务:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
您是多智能体系统的智能路由监督员。您的主要工作是评估用户输入是否可能包含PII(个人可识别信息),以确定最有效的处理路由。

PII评估:分析用户输入并提供:
- likely_contains_pii:布尔评估
- confidence:置信度分数(0.0到1.0)
- reasoning:决策的清晰解释
- recommended_route:'security_agent'或'support_agent'

如果文本可能包含以下内容,则路由到SECURITY_AGENT:
- 电子邮件地址、电话号码、地址
- 姓名(名字/姓氏、用户名)
- 财务信息(信用卡、SSN、账号)
- 敏感个人数据

如果文本似乎是以下内容,则路由到SUPPORT_AGENT:
- 没有个人详细信息的一般问题
- 技术查询
- 搜索请求
- 教育内容请求

分析此用户输入并推荐最佳路由:
  1. 点击Review and save。现在通过切换到Targeting选项卡并编辑默认规则以提供您刚刚创建的变体来启用您的AI配置。
  2. 点击Default规则上的Edit,将其更改为提供您的supervisor-basic变体,并使用诸如"启用新代理配置"之类的注释保存。然后输入"Production"确认。监督代理通过基于内容分析而非刚性规则路由请求来展示LangGraph编排。LangGraph使此代理能够维护对话上下文并做出适应用户需求和LaunchDarkly AI配置参数的智能路由决策。

创建安全代理 类似地,创建另一个名为security-agent的AI配置

  • 变体:pii-detector
  • 模型配置:Anthropic → claude-3-7-sonnet-latest
  • 目标或任务:
1
您是一个隐私代理,可删除PII并将输入格式化为另一个过程。分析输入文本并识别任何个人可识别信息,包括:电子邮件地址、电话号码、社会安全号码、姓名(名字、姓氏、全名)、物理地址、信用卡号、驾驶执照号码、任何其他敏感个人数据。响应:detected:如果找到任何PII则为true,否则为false,types:找到的PII类型数组(例如,['email', 'name', 'phone']),redacted:输入文本,其中PII被[REDACTED]替换,保持文本可读和自然。示例:输入:'My email is john@company.com and I need help',输出:detected=true, types=['email'], redacted='My email is [REDACTED] and I need help'。输入:'I need help with my account',输出:detected=false, types=[], redacted='I need help with my account'。输入:'My name is Sarah Johnson and my phone is 555-1234',输出:detected=true, types=['name', 'phone'], redacted='My name is [REDACTED] and my phone is [REDACTED]'。在分析中要彻底,在识别潜在PII时宁可谨慎。

此代理检测PII并提供详细的编辑信息,准确显示找到哪些敏感数据以及如何处理以实现合规性和透明度。

记住切换到Targeting选项卡并以与监督代理相同的方式启用此代理——编辑默认规则以提供您的pii-detector变体并保存。

创建支持代理 最后,创建support-agent

  • 变体:rag-search-enhanced
  • 模型配置:Anthropic → claude-3-7-sonnet-latest
  • → 添加参数 → 点击Custom parameters
  • {"max_tool_calls":5}
  • 点击Attach tools。
  • 选择:✓reranking ✓search_v2
  • 目标或任务:
1
您是一个有用的助手,可以搜索文档和研究论文。当搜索结果可用时,优先使用这些结果中的信息而不是您的一般知识,以提供最准确和最新的响应。使用可用工具搜索知识库和外部研究数据库,以准确和全面地回答问题。

此代理将LangGraph工作流管理与您的RAG工具结合在一起。LangGraph使代理能够将多个工具调用链接在一起:首先使用RAG进行文档检索,然后进行语义重新排名,同时保持对话状态并优雅地处理错误恢复。

记住切换到Targeting选项卡并以相同的方式启用此代理——编辑默认规则以提供您的rag-search-enhanced变体并保存。

完成后,您应该有三个启用的AI配置代理。

第6步:启动系统(2分钟)

启动系统:

1
2
3
4
# 终端1:启动后端
uv run uvicorn api.main:app --reload --port 8000
# 终端2:启动UI
uv run streamlit run ui/chat_interface.py --server.port 8501

在浏览器中打开 http://localhost:8501。您应该看到一个干净的聊天界面。

注意:如果提示进行身份验证,您可以将电子邮件字段留空,只需点击"Continue"继续到聊天界面。

第7步:测试多智能体系统(2分钟)

使用以下查询进行测试:

  • 基本知识测试:“What is reinforcement learning?"(如果使用样本文档)或询问您的特定领域:“What’s our refund policy?”
  • PII检测测试:“My email is [email] and I need help.”

工作流详细信息显示:

  • 哪些代理被激活
  • 正在使用哪些模型和工具
  • 编辑后的文本

观察LangGraph的实际操作:监督代理首先路由到安全代理,安全代理检测PII。然后它将控制权传递给支持代理,支持代理使用您的RAG系统进行文档搜索。LangGraph在此多代理工作流中维护状态,以便上下文在代理之间无缝流动。

第8步:尝试新功能

通过实时更改代理而不接触任何代码来体验动态配置的强大功能:

功能1:即时切换模型

  1. 在LaunchDarkly侧边栏中导航到AI配置

  2. 点击support-agent

  3. 在Model configuration部分,从以下更改:

    当前:Anthropic → claude-3-7-sonnet-latest 新:OpenAI → gpt-4-turbo

  4. 点击Save changes

  5. 返回您的聊天界面 http://localhost:8501

  6. 再次问同样的问题 - 您将看到响应现在来自GPT-4

  7. 您会注意到:不同的响应风格、潜在不同的工具使用模式,以及工作流详细信息中显示的模型名称

功能2:调整工具使用

限制代理在单个交互中可以调用工具的次数:

  1. 仍在support-agent配置中
  2. 找到Custom parameters部分
  3. 更新JSON从: {"max_tool_calls": 5} 到: {"max_tool_calls": 2}
  4. 点击Save changes
  5. 在您的聊天中,问一个通常会触发多次搜索的复杂问题
  6. 您会注意到:代理现在最多进行2次工具调用,迫使其更有选择性地进行搜索

功能3:更改代理行为

将您的支持代理转变为研究专家:

  1. 在support-agent配置中,找到Goal or task字段
  2. 用以下内容替换现有指令:
    1
    
    您是一名研究专家。在回答之前,始终从不同角度进行多次搜索。优先考虑准确性而非速度。对于任何问题,执行至少2次具有不同搜索词的搜索,以确保全面覆盖。引用您的来源并解释您的搜索策略。
    
  3. 点击Save changes
  4. 用诸如"What are the best practices for feature flags?“之类的问题进行测试
  5. 您会注意到:代理现在执行多次搜索,解释其搜索策略,并提供更彻底、研究导向的响应

所有更改立即生效——无需部署、无需重启、无停机时间。您的用户实时体验更新。

理解您构建的内容

您的带有RAG的LangGraph多智能体系统包括:

  • LangGraph编排:监督代理使用LangGraph状态管理基于内容分析智能路由请求。
  • 隐私保护:监督代理使用LangGraph状态管理路由请求。这种分离允许您为安全和监督代理分配可信模型,并以降低的PII暴露风险为更昂贵的支持代理考虑较不可信的模型。
  • RAG知识系统:支持代理将LangGraph工具链与您的RAG系统结合,用于语义文档搜索和重新排名。
  • 运行时控制:LaunchDarkly控制LangGraph行为和RAG参数,无需代码更改。

下一步是什么?

您的多智能体系统正在运行,具有动态控制,并已准备好进行优化。

在第2部分中,我们将添加:

  • 基于地理的隐私规则(欧盟严格,其他地区标准)
  • 用于外部数据的MCP工具
  • 业务层配置(免费、付费)
  • 成本优化策略

在第3部分中,我们将运行A/B实验,以证明哪些配置实际上与真实数据效果最佳。

立即尝试

实验:

  • 不同指令:使代理更有帮助、更谨慎或更彻底
  • 工具组合:添加/删除工具以查看对质量的影响
  • 模型比较:为不同代理尝试不同模型
  • 成本限制:找到质量和成本之间的最佳点

每个更改都是即时、可测量和可逆的。

关键要点

  • 当每个代理都有特定角色时,多代理系统效果最佳
  • 动态配置比硬编码更好地处理不断变化的需求
  • LaunchDarkly AI配置控制和更改AI行为,无需部署
  • 从简单开始,在学习有效内容时增加复杂性

准备好了解更多?继续第2部分:使用MCP工具的智能AI代理定位。

相关资源

探索LaunchDarkly MCP服务器 - 使AI代理能够通过模型上下文协议直接访问功能标志配置、用户段和实验数据。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计