news 2026/4/23 12:05:03

877-LangChain框架Use-Cases - LangGraph Studio多智能体系统分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
877-LangChain框架Use-Cases - LangGraph Studio多智能体系统分析

案例目标

本案例展示了如何使用LangChain和LangGraph Studio构建一个多智能体工作流系统,用于研究特定人物、职业背景、所属公司,并生成后续问题或面试提示。该系统通过多个专门的智能体协同工作,实现从信息收集、分析到问题生成的完整流程,并通过LangGraph Studio提供可视化调试和扩展功能。

核心目标:

  • 构建多智能体协同工作流,实现信息收集与分析的自动化
  • 集成LangGraph Studio,提供可视化调试界面
  • 实现人员、公司和项目信息的全面研究
  • 基于研究结果生成高质量的面试问题

技术栈与核心依赖

核心框架

LangChain LangGraph LangGraph Studio LangSmith

AI模型

Anthropic Claude OpenAI GPT

数据与工具

Tavily搜索 Docker Python 3.11

辅助库

Pydantic typing-extensions tavily-python

环境配置

# 安装核心依赖 %pip install -qU langchain-opentutorial langsmith langchain-anthropic langgraph tavily-python # 环境变量配置 import os os.environ["ANTHROPIC_API_KEY"] = "your-anthropic-api-key" os.environ["LANGCHAIN_TRACING_V2"] = "true" os.environ["LANGCHAIN_API_KEY"] = "your-langchain-api-key" os.environ["TAVILY_API_KEY"] = "your-tavily-api-key"

LangGraph Studio环境要求:

  • Docker Desktop(用于运行LangGraph Studio)
  • langgraph_studio目录结构,包含langgraph.json配置文件
  • requirements.txt文件定义项目依赖
  • .env文件存储环境变量

案例实现

1. 数据模型定义

# 人员信息模型 class Person(BaseModel): """要研究的人员""" name: str = Field(description="人员姓名") company: str = Field(description="所属公司") background: str = Field(description="职业背景") # 状态管理模型 class InputState(BaseModel): person: Person = Field(description="要研究的人员") class OverallState(BaseModel): person: Person = Field(description="要研究的人员") company_notes: Optional[str] = Field(description="公司研究笔记") person_notes: Optional[str] = Field(description="人员研究笔记") project_notes: Optional[str] = Field(description="项目研究笔记") questions: Optional[List[str]] = Field(description="生成的问题") reflection: Optional[ReflectionOutput] = Field(description="反思结果") class OutputState(BaseModel): questions: List[str] = Field(description="生成的问题")

2. 查询生成模块

# 人员研究查询生成 def generate_queries(state: OverallState) -> OverallState: """为人员研究生成搜索查询""" prompt = QUERY_WRITER_PROMPT.format( person_name=state.person.name, person_background=state.person.background, person_company=state.person.company ) queries = llm.invoke(prompt) return {"queries": queries} # 公司研究查询生成 def generate_queries_for_company(state: OverallState) -> OverallState: """为公司研究生成搜索查询""" prompt = SEARCH_COMPANY_PROMPT.format( company_name=state.person.company, person_name=state.person.name ) queries = llm.invoke(prompt) return {"company_queries": queries}

3. 信息研究模块

# 公司研究 def research_company(state: OverallState) -> OverallState: """研究公司信息""" queries = json.loads(state.company_queries) search_results = tavily_search.run(queries) prompt = COMPANY_INFO_PROMPT.format( company_name=state.person.company, person_name=state.person.name, search_results=search_results ) company_notes = llm.invoke(prompt) return {"company_notes": company_notes} # 人员研究 def research_person(state: OverallState) -> OverallState: """研究人员信息""" queries = json.loads(state.queries) search_results = tavily_search.run(queries) prompt = INFO_PROMPT.format( person_name=state.person.name, person_background=state.person.background, search_results=search_results ) person_notes = llm.invoke(prompt) return {"person_notes": person_notes}

4. 项目研究与信息整合

# 项目查询提取 def extract_project_queries(state: OverallState) -> OverallState: """从人员笔记中提取项目相关查询""" prompt = PROJECT_EXTRACTOR_PROMPT.format( person_notes=state.person_notes ) project_queries = llm.invoke(prompt) return {"project_queries": project_queries} # 项目研究 def research_projects(state: OverallState) -> OverallState: """研究项目信息""" queries = json.loads(state.project_queries) search_results = tavily_search.run(queries) prompt = PROJECT_INFO_PROMPT.format( person_name=state.person.name, search_results=search_results ) project_notes = llm.invoke(prompt) return {"project_notes": project_notes} # 信息整合 def combine_notes(state: OverallState) -> OverallState: """合并所有笔记""" combined = f""" # 人员笔记 {state.person_notes} # 公司笔记 {state.company_notes} # 项目笔记 {state.project_notes} """ return {"combined_notes": combined}

5. 问题生成与反思

# 问题生成 def generate_questions(state: OverallState) -> OverallState: """基于合并笔记生成面试问题""" prompt = QUESTION_WRITER_PROMPT.format( person_name=state.person.name, person_background=state.person.background, combined_notes=state.combined_notes ) questions = llm.invoke(prompt) return {"questions": questions} # 反思模块 def reflection(state: OverallState) -> OverallState: """评估信息质量并决定是否需要更多研究""" prompt = REFLECTION_PROMPT.format( person_name=state.person.name, person_background=state.person.background, person_notes=state.person_notes, company_notes=state.company_notes, project_notes=state.project_notes, questions=state.questions ) reflection_output = llm.with_structured_output(ReflectionOutput).invoke(prompt) return {"reflection": reflection_output}

6. LangGraph工作流构建

# 构建工作流图 builder = StateGraph(OverallState, input=InputState, output=OutputState) # 添加节点 builder.add_node("generate_queries", generate_queries) builder.add_node("research_person", research_person) builder.add_node("generate_queries_for_company", generate_queries_for_company) builder.add_node("research_company", research_company) builder.add_node("extract_project_queries", extract_project_queries) builder.add_node("research_projects", research_projects) builder.add_node("combine_notes", combine_notes) builder.add_node("generate_questions", generate_questions) builder.add_node("reflection", reflection) # 添加边 builder.add_edge(START, "generate_queries") builder.add_edge("generate_queries", "research_person") builder.add_edge("research_person", "generate_queries_for_company") builder.add_edge("generate_queries_for_company", "research_company") builder.add_edge("research_company", "extract_project_queries") builder.add_edge("extract_project_queries", "research_projects") builder.add_edge("research_projects", "combine_notes") builder.add_edge("combine_notes", "generate_questions") builder.add_edge("generate_questions", "reflection") # 添加条件边 builder.add_conditional_edges( "reflection", route_from_reflection, { "generate_more_queries": "generate_queries", "end": END } ) # 编译图 graph = builder.compile()

7. LangGraph Studio集成

# langgraph.json配置文件 { "dependencies": ["."], "graphs": { "multi_agent": "./langgraph_studio/output_script.py:graph" } } # 代码提取脚本 def extract_code_cells(notebook_path, output_path): """从Jupyter notebook提取代码单元格并转换为可执行脚本""" with open(notebook_path, 'r', encoding='utf-8') as f: notebook = json.load(f) # 处理代码单元格 for cell in notebook['cells']: if cell['cell_type'] == 'code': # 转换pip安装命令 # 处理可视化代码 # 去重并保存 # 保存转换后的代码 with open(output_path, 'w', encoding='utf-8') as f: for cell in unique_cells: f.write(cell + '\n\n')

案例效果

该多智能体系统实现了以下效果:

  • 全面信息收集:通过多个专门智能体,分别收集人员、公司和项目相关信息
  • 智能问题生成:基于收集的信息,生成针对性和专业性强的面试问题
  • 可视化调试:通过LangGraph Studio提供直观的工作流可视化界面,便于调试和优化
  • 自适应研究:通过反思机制,系统能够评估信息质量并决定是否需要进一步研究

生成的问题示例:

  1. 您能描述一下您从Tiffany & Co.的数据分析转向AI工程的转变过程,以及您之前的经验如何影响您当前在LLM和RAG系统方面的工作吗?
  2. 在开发"Ticki tacka"项目控制系统时,您遇到了哪些具体的NLP挑战,您是如何解决这些挑战的?
  3. 您能介绍一下"Ticki tacka"系统的核心AI组件以及您在开发过程中的角色吗?
  4. 您在实施RAG系统方面有哪些经验,在企业应用中遇到了哪些挑战?
  5. 您如何平衡AI解决方案中的模型性能和实际业务需求?

案例实现思路

本案例的实现基于以下思路:

  1. 模块化设计:将复杂任务分解为多个专门模块,每个模块负责特定功能
  2. 状态管理:使用Pydantic模型定义工作流状态,确保数据结构的一致性和类型安全
  3. 智能体协同:通过LangGraph构建智能体工作流,实现信息收集、处理和生成的自动化
  4. 反馈循环:引入反思机制,评估工作流输出质量并决定是否需要迭代优化
  5. 可视化调试:集成LangGraph Studio,提供直观的工作流可视化界面,便于调试和优化

关键技术点:

  • 使用LangGraph的StateGraph构建复杂工作流
  • 通过条件边实现基于状态的流程控制
  • 利用结构化输出确保LLM响应的一致性
  • 通过LangGraph Studio实现工作流可视化调试

扩展建议

功能扩展

  • 增加更多研究维度,如行业趋势、竞争对手分析
  • 实现多语言支持,扩展非英语信息收集能力
  • 添加信息可信度评估机制
  • 实现问题分类和难度评级

技术优化

  • 引入缓存机制,减少重复搜索请求
  • 实现并行处理,提高研究效率
  • 添加用户反馈机制,持续优化问题质量
  • 集成更多数据源,提高信息全面性

总结

本案例展示了如何使用LangChain和LangGraph Studio构建一个复杂的多智能体工作流系统。通过模块化设计、智能体协同和可视化调试,该系统能够自动收集、分析信息并生成高质量的面试问题。LangGraph Studio的集成大大简化了复杂工作流的开发和调试过程,为构建高级AI应用提供了强大支持。

该系统的核心价值在于将复杂任务分解为多个专门模块,通过智能体协同工作实现自动化处理,同时通过可视化工具提供直观的调试和优化界面。这种设计模式可以广泛应用于各种需要多步骤、多维度信息处理的AI应用场景。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 19:04:53

终极人脸识别解决方案:Double Take完整使用指南

在人工智能技术飞速发展的今天,人脸识别已成为智能安防、社交应用、智能家居等领域的核心技术。然而,面对市面上众多的人脸识别引擎,如何选择和管理成为了用户面临的一大难题。Double Take应运而生,这个开源项目通过统一的UI界面和…

作者头像 李华
网站建设 2026/4/18 1:16:10

15、定制Knoppix Live CD全攻略

定制Knoppix Live CD全攻略 1. 制作Live CD的项目工具 在制作Live CD时,有两个项目提供了用于运行修改版安装程序以生成Live CD ISO镜像的工具: - Fedora Kadischi项目(搭配anaconda) :使用Fedora同名项目的 kadischi 命令,可启动一个流程,该流程会调用Fedora安装…

作者头像 李华
网站建设 2026/4/22 5:35:09

3DS自制系统升级指南:从A9LH迁移到B9S的完整流程

3DS自制系统升级指南:从A9LH迁移到B9S的完整流程 【免费下载链接】Guide_3DS A complete guide to 3DS custom firmware, from stock to boot9strap. 项目地址: https://gitcode.com/gh_mirrors/gu/Guide_3DS 对于已经熟悉3DS自制系统的玩家来说,…

作者头像 李华
网站建设 2026/4/18 12:19:09

【资源对接会】落地实施全流程复盘:构建高效对接模型并验证可复

【资源对接会】落地实施全流程复盘:构建高效对接模型并验证可复制性在当前经济结构深度调整与产业协同加速发展的背景下,资源对接会已成为推动企业间信息互通、要素整合与项目落地的关键载体。尤其对于中小企业主、运营负责人及技术管理者而言&#xff0…

作者头像 李华
网站建设 2026/4/18 1:25:45

10秒鬼脸特效:AI如何帮你快速开发惊吓小游戏

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个网页小游戏,页面初始显示10秒倒计时,倒计时结束后突然弹出恐怖鬼脸图片并伴随尖叫音效。要求:1.使用HTML/CSS/JavaScript实现 2.倒计时数…

作者头像 李华
网站建设 2026/4/21 5:12:43

16、定制Knoppix和Fedora Live CD全攻略

定制Knoppix和Fedora Live CD全攻略 1. 定制Knoppix Live CD 1.1 创建Knoppix ISO镜像 在创建Knoppix Live CD时,使用 mkisofs 命令,其中 -hide-rr-moved 选项会将 RR_MOVED 目录(如果存在)移动到文件系统树顶部名为 .rr_moved 的目录,从而将其隐藏。 -boot-lo…

作者头像 李华