概述
利用 LangGraph 多代理工作流程、RAG 搜索和 LaunchDarkly AI 配置,在 20 分钟内构建一个可运行的多智能体动态配置系统。
系列第一部分(共三部分):混沌到清晰:实现目标的可辩护人工智能系统
你经历过:你的AI聊天机器人在测试中表现良好,但生产卡关和GPT-4成本失控。你切换到 Claude,但现在欧洲用户需要不同的隐私规则。每一次变化都意味着又要部署一次,更多的测试,并祈祷一切顺利。
本系列将向您展示如何构建LangGraph多代理工作流程,通过RAG搜索获取您的业务文档中的智能。这些工作流程通过MCP工具增强,支持实时外部数据,并通过LaunchDarkly AI配置进行控制——无需部署代码变更。
本系列内容
- 第一部分(本帖):在20分钟内构建一个可运行的多智能体动态配置系统
- 第二部分:添加细分市场定位、MCP工具集成和成本优化等高级功能
- 第三部分:运行生产A/B实验,以证明什么真正有效
最终,你将拥有一个能够衡量自身性能并根据用户数据而非猜测进行调整的系统。
你今天要建造的东西
在接下来的20分钟内,你将拥有一个LangGraph多代理系统,具备:
- 主管代理:协调专业代理之间的工作流程
- 安全代理:检测个人身份信息和敏感信息
- 客服代理:使用您的商业文件解答问题
- 动态控制:通过 LaunchDarkly 更改模型、工具和行为,无需修改代码
先决条件
你需要:
- Python 3.9+ 带包管理器(install uv
uv) - LaunchDarkly账号(免费注册))
- OpenAI API 密钥(RAG 架构嵌入所需)
- Anthropic API 密钥(Claude 模型必用)或 OpenAI API 密钥(GPT 模型)
步骤1:克隆并配置(2分钟)
首先,让我们让所有设备在本地运行。我们会在制作过程中解释每个部件的作用。
# Get the code
git clone https://github.com/launchdarkly-labs/devrel-agents-tutorial
cd devrel-agents-tutorial
# Install dependencies (LangGraph, LaunchDarkly SDK, etc.)
uv sync
# Configure your environment
cp .env.example .env
首先,你需要通过创建一个项目来获得你的 LaunchDarkly SDK 密钥:
- 请在 app.launchdarkly.com(免费账户)注册LaunchDarkly。如果你是新用户,注册账户后需要验证你的电子邮件地址。之后你可以跳过新用户入职流程。
- 在侧边栏找到项目
- 创建一个名为“多代理聊天机器人”的新项目
使用确切名称以匹配第二部分:
- 项目:
multi-agent-chatbot - AI配置:, ,
supervisor-agentsecurity-agentsupport-agent - 工具:
search_v2reranking - 变化:
supervisor-basicpii-detectorrag-search-enhanced
获取您的SDK密钥:
- 齿轮图标(侧边栏底部) → 项目 → 多代理聊天机器人 → 齿轮图标(右侧) → 环境 → 生产 → SDK 密钥
- 这是你的
LD_SDK_KEY - 现在用你的按键编辑:
.env
LD_SDK_KEY=your-launchdarkly-sdk-key # From step above
OPENAI_API_KEY=your-openai-key # Required for RAG embeddings
ANTHROPIC_API_KEY=your-anthropic-key # Required for Claude models
这会建立一个使用 LaunchDarkly 来控制 AI 行为的 LangGraph 应用。可以把它想象成在表演中途更换演员、导演,甚至道具,但演出不会中断。不要把它检查到你的源码控制里。好好保管这些秘密!.env
第二步:添加你的商业知识(2分钟)
系统包含一本强化学习示例教材。用你针对特定领域的文档替换它。
# Option A: Use the sample (AI/ML knowledge)
# Already included: kb/SuttonBarto-IPRL-Book2ndEd.pdf
# Option B: Add your documents
rm kb/*.pdf # Clear sample
cp /path/to/your-docs/*.pdf kb/
运行良好的文档类型:
- 法律:合同、判例法、合规指南
- 医疗保健:方案、研究论文、护理指南
- SaaS:API 文档、用户指南、故障排除手册
- 电子商务:产品目录、政策、常见问题解答
这些文件将作为你RAG搜索的知识库,为你的代理人提供业务特定的背景信息。
步骤3:初始化你的知识库(2分钟)
将你的文档转化为可搜索的RAG知识:
# Create vector embeddings for semantic search
uv run python initialize_embeddings.py --force
这会利用OpenAI的文本嵌入模型和FAISS矢量数据库,构建你的RAG(检索增强生成)基础。RAG将文档转换为向量嵌入,捕捉语义意义而不仅仅是关键词,使搜索真正理解上下文。
步骤4:定义你的工具(3分钟)
定义你的经纪人将使用的搜索工具。
- 在LaunchDarkly应用侧边栏,点击AI部分的“库”。
- 在下一页,点击“工具”标签,然后选择“创建工具”。
创建RAG矢量搜索工具:
注意:我们将在第三部分学习实验时创建一个简单的search_v1。目前,请使用以下配置创建一个工具:
钥匙:
search_v2描述:
Semantic search using vector embeddings图式:
{ "properties": { "query": { "description": "Search query for semantic matching", "type": "string" }, "top_k": { "description": "Number of results to return", "type": "number" } }, "additionalProperties": false, "required": [ "query" ] }
完成后,点击保存。
创建重新排名工具:
回到工具部分,点击添加工具创建新工具。添加以下特性:
钥匙:
reranking描述:
Reorders results by relevance using BM25 algorithm图式:
{ "properties": { "query": { "description": "Original query for scoring", "type": "string" }, "results": { "description": "Results to rerank", "type": "array" } }, "additionalProperties": false, "required": ["query", "results"] }
完成后,点击保存。该工具通过 BM25 算法获取搜索结果并重新排序,以提高相关性。这种混合方法结合了语义搜索(向量嵌入)和词汇匹配(基于关键词的评分),使其在技术术语、产品名称和错误代码中尤为有用,因为这些领域对精确词的匹配比概念相似性更为重要。rerankingsearch_v2
你的RAG架构如何运作
你的RAG系统分为两个阶段:通过将查询转换为与文档相同的向量空间(通过OpenAI嵌入)进行FAISS语义相似性搜索,同时重新排序结果以获得最大相关性。这种RAG方法通过理解上下文,显著优于关键词搜索,因此问“我的应用坏了”可以找到提到“应用错误”或“系统故障”的故障排除指南。search_v2reranking
步骤5:在LaunchDarkly中创建你的AI代理(5分钟)
既然你已经创建了代理将使用的工具,接下来是配置代理本身的时候了。每个代理都有自己的AI配置,定义其行为、模型选择和具体指令。
创建 LaunchDarkly AI 配置,动态控制你的 LangGraph 多智能体系统。LangGraph 是 LangChain 用于构建有状态、多代理应用的框架,这些应用能够在代理交互中保持对话状态。你的LangGraph架构支持复杂的工作流程,代理间协作并传递上下文。
创建主管代理
- 在 LaunchDarkly 仪表盘侧边栏,进入 AI 配置,点击创建 AI 配置
- 选择
Agent-based - 给你的AI配置命名。这将是你代码中引用的密钥。
supervisor-agent - 在AI配置表单中配置以下字段:
变化:supervisor-basic模型配置:
Anthropic claude-3-7-sonnet-latest目标或任务:
You are an intelligent routing supervisor for a multi-agent system. Your primary job is to assess whether user input likely contains PII (personally identifiable information) to determine the most efficient processing route. PII Assessment: Analyze the user input and provide: - likely_contains_pii: boolean assessment - confidence: confidence score (0.0 to 1.0) - reasoning: clear explanation of your decision - recommended_route: either 'security_agent' or 'support_agent' Route to SECURITY_AGENT if the text likely contains: - Email addresses, phone numbers, addresses - Names (first/last names, usernames) - Financial information (credit cards, SSNs, account numbers) - Sensitive personal data Route to SUPPORT_AGENT if the text appears to be: - General questions without personal details - Technical queries - Search requests - Educational content requests Analyze this user input and recommend the optimal route:
5. 点击复查并保存。现在切换到“目标”标签,编辑默认规则以服务你刚创建的变体,从而启用你的 AI 配置。
6. 点击默认规则的编辑,将其更改为支持你的变体,并保存时注明“启用新代理配置”。然后输入“Production”以确认。主管代理通过基于内容分析而非僵化规则来演示LangGraph编排。LangGraph使该代理能够维护对话上下文,并根据用户需求和LaunchDarkly AI配置参数做出智能路由决策。supervisor-basic
创建安全代理
同样,创建一个名为security-agent
变化:
pii-detector模型配置:
Anthropic claude-3-7-sonnet-latest目标或任务:
You are a privacy agent that REMOVES PII and formats the input for another process. Analyze the input text and identify any personally identifiable information including: Email addresses, Phone numbers, Social Security Numbers, Names (first, last, full names), Physical addresses, Credit card numbers, Driver's license numbers, Any other sensitive personal data. Respond with: detected: true if any PII was found, false otherwise, types: array of PII types found (e.g., ['email', 'name', 'phone']), redacted: the input text with PII replaced by [REDACTED], keeping the text readable and natural. Examples: Input: 'My email is john@company.com and I need help', Output: detected=true, types=['email'], redacted='My email is [REDACTED] and I need help'. Input: 'I need help with my account', Output: detected=false, types=[], redacted='I need help with my account'. Input: 'My name is Sarah Johnson and my phone is 555-1234', Output: detected=true, types=['name', 'phone'], redacted='My name is [REDACTED] and my phone is [REDACTED]'. Be thorough in your analysis and err on the side of caution when identifying potential PII
该代理检测个人身份信息(PII),提供详细的遮蔽信息,准确显示发现了哪些敏感数据及其合规和透明度处理方式。
记得切换到“目标”标签页,启用该代理,就像我们为主管启用一样——编辑默认规则以提供你的PII检测变体并保存。
创建支持代理
最后,创作support-agent
变化:
rag-search-enhanced模型配置:
Anthropic claude-3-7-sonnet-latest→ 添加参数 → 点击自定义参数
{"max_tool_calls":5}点击“附加工具”。
选择:✓重新排序✓search_v2
目标或任务:
You are a helpful assistant that can search documentation and research papers. When search results are available, prioritize information from those results over your general knowledge to provide the most accurate and up-to-date responses. Use available tools to search the knowledge base and external research databases to answer questions accurately and comprehensively.
该代理将LangGraph工作流管理与你的RAG工具结合起来。LangGraph 使代理能够串联多个工具调用:首先使用 RAG 进行文档检索,然后进行语义重排序,同时保持对话状态并优雅地处理错误恢复。
记得切换到“目标”标签,并以同样方式启用该代理——编辑默认规则,以提供你的rag-search增强版本并保存。
完成后,你应该会启用三个AI配置代理。
步骤6:启动你的系统(2分钟)
启动系统:
# Terminal 1: Start the backend
uv run uvicorn api.main:app --reload --port 8000
# Terminal 2: Launch the UI
uv run streamlit run ui/chat_interface.py --server.port 8501
在浏览器中打开。你应该会看到一个干净的聊天界面。http://localhost:8501
注意:如果被要求认证,你可以将邮件字段留空,只需点击“继续”即可进入聊天界面。
步骤7:测试你的多智能体系统(2分钟)
用以下查询测试:
基础知识测试:“什么是强化学习?”(如果使用样本文档)或者问问你具体的域名:“我们的退款政策是什么?”
个人身份识别测试:“我的邮箱是[email],我需要帮助。”
工作流程详情显示:
- 哪些特工被激活
- 使用了哪些模型和工具
- 删节后文字
观看LangGraph的实际作:主管代理首先路由到安全代理,安全代理检测到PII。然后它将控制权交给支持代理,支持代理使用你的RAG系统进行文档搜索。LangGraph 在多代理工作流程中维护状态,使上下文在代理间无缝流动。
第八步:尝试新功能
通过实时更改代理,体验动态配置的力量,无需动用任何代码:
功能一:即时切换模型
- 在LaunchDarkly侧边栏中进入AI配置
- 点击
support-agent - 在模型配置部分,从以下方向更改:
- 当前:拟人文→ claude-3-7-sonnet-latest
- 新增功能:OpenAI → gpt-4-turbo
- 点击保存更改
- 返回您的聊天界面
http://localhost:8501 - 再问一次同样的问题——你会看到现在的回答来自GPT-4
- 你会注意到:不同的响应风格,可能不同的工具使用模式,以及工作流程细节中显示的模型名称
功能二:调整工具使用
限制你的客服在一次互动中可以调用工具的次数:
- 在配置中
support-agent - 查找自定义参数部分
- 将 JSON 从以下方向更新:
{"max_tool_calls": 5}{"max_tool_calls": 2} - 点击保存更改
- 在聊天中,提出一个通常会引发多次搜索的复杂问题
- 你会注意到:客服最多只能调用两次工具,迫使它在搜索时更加有选择性
特点三:变革推动者行为
将您的支持代理转变为研究专家:
- 在配置中,找到目标或任务字段
support-agent - 将现有说明替换为:
You are a research specialist. Always search multiple times from different angles before answering. Prioritize accuracy over speed. For any question, perform at least 2 different searches with varied search terms to ensure comprehensive coverage. Cite your sources and explain your search strategy. - 点击保存更改
- 用类似“功能标志的最佳实践是什么?”这样的问题来测试。
- 你会注意到:代理人现在会进行多次搜索,解释其搜索策略,并提供更全面、以研究为导向的回答
所有更改立即生效——无需部署、无需重启、无需停机。用户可以实时体验更新。
理解你所建立的一切
您的LangGraph多智能体系统包含RAG包括:
- LangGraph 编排:主管代理利用LangGraph状态管理,基于内容分析智能路由请求。
- 隐私保护:主管代理使用LangGraph状态管理智能路由请求。这种分离允许你为安全和监督代理分配可信模型,同时考虑为更昂贵且PII暴露风险较低的支持代理分配一个更不值得信赖的模型。
- RAG知识系统:支持代理将LangGraph工具链与你的RAG系统结合起来,用于语义文档搜索和重新排序。
- 运行时控制: LaunchDarkly 在不修改代码的情况下控制 LangGraph 的行为和 RAG 参数。
接下来是什么?
您的多智能体系统正在动态控制运行,准备进行优化。
在第二部分,我们将补充:
- 基于地理的隐私规则(欧盟严格,其他地区标准)
- 外部数据的MCP工具
- 商业层配置(免费,付费)
- 成本优化策略
在第三部分中,我们将进行A/B实验,以证明哪些配置在真实数据中效果最佳。
现在试试这个
尝试:
- 不同的指导:让客服人员更乐于助人、更谨慎或更细致
- 工具组合:添加/移除工具以观察质量影响
- 模型比较:为不同药物尝试不同模型
- 成本限制:找到质量与成本之间的平衡点
每一次变化都是瞬间、可测量且可逆的。
主要要点
- 多智能体系统在每个智能体拥有特定角色时效果最佳
- 动态配置比硬编码更好地处理变化的需求
- LaunchDarkly AI 配置可以控制和改变 AI 行为,无需部署
- 从简单开始,随着学习有效方法逐步增加复杂度
1230

被折叠的 条评论
为什么被折叠?



