如何用织梦猫做网站和后台,东莞网站建设管理,常州外贸网站建设公司,百度号码认证Dify与LangChain实战#xff1a;如何用自定义工具打造智能调研助手#xff08;附完整代码#xff09; 最近在和一些做AI应用落地的团队交流时#xff0c;我发现一个挺有意思的现象#xff1a;很多开发者对Dify的直观、低代码搭建能力赞不绝口#xff0c;但一旦涉及到需要…Dify与LangChain实战如何用自定义工具打造智能调研助手附完整代码最近在和一些做AI应用落地的团队交流时我发现一个挺有意思的现象很多开发者对Dify的直观、低代码搭建能力赞不绝口但一旦涉及到需要复杂逻辑链、多步骤推理或深度集成现有业务系统的场景就感觉有点“使不上劲”。比如你想让AI不仅回答问题还能自动规划调研步骤、调用多个外部API、处理中间数据最后生成一份结构化的报告——这种“智能体”Agent级别的任务单纯依赖Dify的可视化编排有时会显得捉襟见肘。另一方面LangChain以其强大的工具生态和灵活的链式Chain、智能体Agent构建能力在开发者社区中备受推崇。但它的学习曲线和代码量又让不少希望快速上线的团队望而却步。难道我们只能二选一吗当然不是。在我看来Dify和LangChain并非替代关系而是绝佳的互补搭档。Dify擅长应用管理、界面交互和知识库集成像一个友好的“前台”而LangChain则精于复杂逻辑编排、高级Agent行为和生态扩展如同强大的“后台引擎”。将它们结合起来你就能用Dify快速搭建出用户界面和基础流程同时利用LangChain处理那些需要深度定制的复杂任务。这篇文章我就带你亲手实践如何通过Dify的“自定义工具”功能无缝集成LangChain组件构建一个能自动执行网络调研、数据分析并生成报告的“智能调研助手”。我们会从需求拆解开始一步步完成代码实现、服务部署和Dify集成最终让你拥有一个可立即投入使用的强大AI工具。1. 理解核心架构Dify与LangChain如何分工协作在开始写代码之前我们得先搞清楚这两个平台如何协同工作。很多人误以为集成就是简单地把一个框架的代码塞进另一个里。实际上有效的集成建立在清晰的责任划分上。Dify的核心角色应用编排与用户界面提供直观的Workflow画布让非技术背景的产品经理也能设计AI对话流程。上下文与记忆管理内置的对话历史、知识库检索RAG功能为AI提供持续的上下文支持。多模型支持与统一接口轻松切换GPT、Claude、国产大模型等无需关心底层API差异。部署与监控一键发布为API或Web应用并提供使用量、效果等基础监控。LangChain的核心优势丰富的工具生态集成数百个现成工具从谷歌搜索、维基百科到数据库、各类SaaS应用如Notion、Gmail。高级抽象与执行模式提供Chain、Agent、Plan-and-Execute等多种范式专门解决需要多步决策和工具调用的复杂问题。灵活的自定义能力你可以轻松创建符合自己业务逻辑的工具Tool和链Chain实现高度定制化的AI行为。那么它们如何连接关键在于Dify的**自定义工具Custom Tool**功能。这个功能允许你定义一个HTTP接口Dify的Agent在需要时会向这个接口发起请求。我们的LangChain服务就部署为这样一个HTTP服务。整个协作流程可以概括为以下几步用户在Dify构建的应用中提出问题例如“帮我调研一下Llama 3的最新评测”。Dify Agent根据对话上下文和配置判断需要调用我们创建的“智能调研工具”。Dify向我们预先配置好的LangChain服务URL发送HTTP请求携带用户问题。LangChain服务接收到请求启动其内部复杂的Agent或Chain逻辑例如先搜索再分析最后总结。LangChain服务将结构化的结果返回给Dify。Dify接收结果整合到最终的回复中呈现给用户。这个架构的精妙之处在于解耦。你可以独立开发、测试和迭代LangChain的后端逻辑而Dify的前端交互、用户管理和知识库功能完全不受影响。任何一方的升级都不会拖累另一方。提示在设计架构时建议将LangChain服务视为一个独立的微服务。这有助于未来的水平扩展、独立部署和故障隔离。2. 环境准备与基础工具链搭建工欲善其事必先利其器。我们先来把开发环境搭建好。这个项目会涉及到Python后端服务和Dify的配置请确保你拥有以下基础Python环境建议使用Python 3.9或以上版本。使用conda或venv创建独立的虚拟环境是最佳实践。Dify账户你需要一个Dify Cloud账户或者已经在本地部署了Dify社区版。API密钥准备一个OpenAI或你选择的其他大模型如Azure OpenAI、Anthropic Claude的API密钥。代码编辑器VS Code、PyCharm等任选。首先创建一个新的项目目录并初始化虚拟环境。mkdir dify-langchain-research-assistant cd dify-langchain-research-assistant python -m venv venv # 激活虚拟环境 # Windows: venv\Scripts\activate # macOS/Linux: source venv/bin/activate接下来安装核心的Python依赖包。我们将使用langchain、langchain-openai来构建智能体使用flask来提供Web服务使用langchain-community来获取一些社区工具。pip install langchain langchain-openai langchain-community flask requests python-dotenv安装完成后创建一个.env文件来安全地管理你的敏感信息如API密钥。# 创建.env文件 touch .env在.env文件中填入你的配置OPENAI_API_KEY你的OpenAI API密钥 # 其他可能用到的API密钥例如SERPAPI等 # SERPAPI_API_KEYxxx最后创建一个requirements.txt文件记录依赖方便后续部署。pip freeze requirements.txt现在基础环境已经就绪。我们的项目结构将大致如下dify-langchain-research-assistant/ ├── venv/ # 虚拟环境目录 ├── .env # 环境变量配置文件 ├── requirements.txt # 依赖列表 ├── research_service.py # 主服务文件Flask LangChain ├── agents/ # 存放不同的LangChain Agent定义 │ └── web_research_agent.py └── utils/ # 工具函数目录3. 构建智能调研Agent从搜索到分析现在进入核心环节用LangChain构建一个能执行智能调研的Agent。这个Agent需要完成以下任务理解用户的研究主题在互联网上搜索最新、最相关的信息对获取的信息进行交叉验证和总结分析最后生成一份简洁明了的报告。我们将创建一个名为web_research_agent.py的文件。这个Agent将采用**ReActReasoning and Acting**框架这是让AI“思考再行动”的经典模式非常适合需要多步工具调用的调研任务。# agents/web_research_agent.py import os from dotenv import load_dotenv from langchain.agents import initialize_agent, AgentType from langchain_community.tools import DuckDuckGoSearchRun from langchain_openai import ChatOpenAI from langchain.callbacks.manager import CallbackManager from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler # 加载环境变量 load_dotenv() class WebResearchAgent: def __init__(self): # 初始化大语言模型这里使用gpt-4o你也可以换成gpt-4-turbo或claude-3 self.llm ChatOpenAI( modelgpt-4o, temperature0.2, # 温度设低一些让输出更稳定、事实性强 api_keyos.getenv(OPENAI_API_KEY), streamingFalse, callback_managerCallbackManager([StreamingStdOutCallbackHandler()]) ) # 初始化工具这里我们使用DuckDuckGo进行网页搜索。 # 注意DuckDuckGoSearchRun是免费工具但可能受网络环境影响。 # 对于生产环境建议使用更稳定、功能更强的搜索API如SerpAPI、Google Search API。 self.search_tool DuckDuckGoSearchRun(nameweb_search, description用于在互联网上搜索最新的新闻、文章和技术评测。输入应为一个明确的搜索查询语句。) # 将工具放入列表。未来你可以在这里添加更多工具比如维基百科、学术数据库等。 self.tools [self.search_tool] # 初始化ReAct Agent # verboseTrue会在控制台输出详细的推理步骤便于调试。 # handle_parsing_errorsTrue能更好地处理AI输出格式错误的情况。 self.agent initialize_agent( toolsself.tools, llmself.llm, agentAgentType.ZERO_SHOT_REACT_DESCRIPTION, # 使用Zero-shot ReAct Agent verboseTrue, handle_parsing_errorsTrue, max_iterations5, # 限制最大迭代次数防止无限循环 early_stopping_methodgenerate # 提前停止方法 ) def run(self, query: str) - str: 执行调研任务的主方法。 Args: query: 用户的调研问题如“Llama 3相比GPT-4有哪些优势和劣势” Returns: str: 调研分析报告 # 构建一个更明确的系统提示引导Agent进行深度调研 system_prompt 你是一个专业的科技分析师。请针对用户的问题进行深入调研。 你的工作流程是 1. 理解问题的核心拆解出需要搜索的关键词。 2. 使用搜索工具查找多个来源的信息。 3. 对比不同来源的信息识别共识和争议点。 4. 总结关键发现并以结构化的方式呈现如分点论述、对比表格。 5. 在最后注明你的分析主要基于哪些信息或假设。 请确保你的回答客观、全面并注明信息的时效性。 full_query f{system_prompt}\n\n用户问题{query} try: result self.agent.invoke({input: full_query}) return result[output] except Exception as e: # 记录错误并返回友好提示 print(fAgent执行出错: {e}) return f调研过程中出现错误{str(e)}。请稍后重试或简化您的问题。 # 示例本地测试这个Agent if __name__ __main__: agent WebResearchAgent() test_result agent.run(特斯拉FSD V12.5版本主要更新了哪些功能市场评价如何) print(\n *50) print(调研报告) print(*50) print(test_result)运行这个脚本你可以看到Agent是如何一步步“思考”Reason和“行动”Act的。它会先思考需要搜索什么关键词例如“特斯拉 FSD V12.5 更新 功能 评价”然后调用搜索工具获取结果后再进行分析和总结。注意DuckDuckGo搜索工具在有些地区可能访问不稳定。对于要求高可靠性的生产项目强烈建议使用付费的搜索API服务如SerpAPI或Google Custom Search JSON API。只需替换DuckDuckGoSearchRun工具即可LangChain的接口是统一的。4. 封装为HTTP服务并集成到Dify我们的智能调研Agent已经能在本地运行了下一步是把它变成一个Dify可以调用的HTTP服务。我们将使用轻量级的Flask框架来快速实现一个RESTful API。创建一个主服务文件research_service.py# research_service.py import os import logging from flask import Flask, request, jsonify from flask_cors import CORS from dotenv import load_dotenv from agents.web_research_agent import WebResearchAgent # 加载环境变量和配置 load_dotenv() # 配置日志 logging.basicConfig(levellogging.INFO) logger logging.getLogger(__name__) app Flask(__name__) # 启用CORS如果Dify和本服务不在同一个域名下这是必需的 CORS(app) # 初始化我们的调研Agent research_agent WebResearchAgent() app.route(/health, methods[GET]) def health_check(): 健康检查端点用于服务探活 return jsonify({status: healthy, service: langchain-research-assistant}) app.route(/api/v1/research, methods[POST]) def conduct_research(): 核心调研接口。 期望的JSON请求体{query: 需要调研的问题} 返回的JSON响应{success: true, data: 调研报告内容} 或错误信息 data request.get_json(silentTrue) or {} query data.get(query, ).strip() if not query: logger.warning(收到空查询请求) return jsonify({ success: False, error: 请求参数无效query字段不能为空 }), 400 logger.info(f收到调研请求: {query[:100]}...) # 日志只记录前100字符 try: # 调用LangChain Agent执行调研 research_report research_agent.run(query) logger.info(调研任务执行成功) # 返回成功结果 return jsonify({ success: True, data: research_report }) except Exception as e: # 捕获所有异常避免服务崩溃 logger.error(f处理调研请求时发生错误: {e}, exc_infoTrue) return jsonify({ success: False, error: f服务器内部错误{str(e)} }), 500 if __name__ __main__: # 获取端口默认5000 port int(os.environ.get(PORT, 5000)) # 在生产环境中应使用Gunicorn等WSGI服务器而不是Flask自带的开发服务器 app.run(host0.0.0.0, portport, debugFalse) # 生产环境务必设置debugFalse现在启动这个服务python research_service.py服务启动后会在http://localhost:5000监听。你可以用curl或Postman测试一下curl -X POST http://localhost:5000/api/v1/research \ -H Content-Type: application/json \ -d {query: 对比一下近期发布的DeepSeek-V3和Qwen2.5在开源社区的热度和主要应用场景}如果看到返回了结构化的JSON里面包含调研报告说明服务运行正常。接下来就是最关键的一步将这个服务集成到Dify中。登录Dify控制台进入你想要增强的应用或者创建一个新的“Agent”类型应用。在应用编辑界面找到左侧的“工具”选项卡点击“添加工具”-“自定义工具”。在弹出的表单中填写工具信息工具名称智能网络调研工具描述调用外部服务对指定主题进行深入的网络搜索和信息综合分析生成结构化报告。参数定义我们需要定义一个输入参数。点击“添加参数”参数名query参数类型string描述需要调研的具体问题或主题。是否必填是请求配置这里配置Dify如何调用我们的LangChain服务。URL填写你部署好的服务地址例如http://你的服务器IP:5000/api/v1/research。如果是本地测试可以使用内网穿透工具如ngrok生成一个公网URL。方法POST请求头如果需要认证可以在这里添加Authorization头。我们简单起见先不设置。请求体选择JSON并配置如下{ query: {{query}} }{{query}}是Dify的变量语法它会将用户输入或上一个节点的输出填充到这里。解析响应Dify需要知道如何从我们服务的响应中提取内容。在“响应内容提取”部分选择JSON。在“解析路径”中填入data。这意味着Dify会取响应JSON中data字段的值作为工具调用的结果。保存工具后你就可以在Dify的Agent编排中像使用内置工具一样使用这个“智能网络调研”工具了。将其拖入Workflow当Agent运行到该节点时就会自动调用你的LangChain后端服务。5. 进阶打造更强大的多工具Agent生态基础的网络调研助手已经能解决很多问题但真正的生产力来自于将多个专用工具组合起来。LangChain的生态优势在这里体现得淋漓尽致。我们可以轻松集成更多工具让我们的助手能力倍增。假设我们要构建一个“市场分析师助手”它不仅能调研还能分析数据、生成图表摘要并保存到笔记软件。我们需要集成以下工具工具类别具体工具LangChain Community功能描述适用场景信息检索DuckDuckGoSearchRun/SerpAPIWrapper获取公开网络信息市场动态、竞品新闻数据分析create_pandas_dataframe_agent直接与CSV/Excel数据对话分析销售数据、用户指标内容处理ArxivQueryRun检索学术论文摘要技术趋势深度调研生产力集成NotionToolkit创建、更新Notion页面将报告自动归档到知识库通讯集成GmailToolkit发送邮件将分析结果邮件周报下面我们展示如何将Notion集成进来实现“调研-保存”自动化流水线。首先安装Notion集成的依赖pip install langchain-notion然后创建一个更高级的market_analysis_agent.py# agents/market_analysis_agent.py from langchain.agents import initialize_agent, AgentType from langchain_community.tools import DuckDuckGoSearchRun from langchain_community.agent_toolkits.notion.toolkit import NotionToolkit from langchain_community.utilities.notion import NotionAPIWrapper from langchain_openai import ChatOpenAI import os class MarketAnalysisAgent: def __init__(self, notion_tokenNone, notion_database_idNone): self.llm ChatOpenAI(modelgpt-4o, temperature0.1) # 工具列表 tools [] # 1. 搜索工具 search_tool DuckDuckGoSearchRun(nameweb_search, description搜索最新的市场新闻和公司动态。) tools.append(search_tool) # 2. Notion工具 (如果提供了token和database_id) if notion_token and notion_database_id: notion NotionAPIWrapper(notion_access_tokennotion_token) notion_toolkit NotionToolkit.from_notion_api_wrapper(notion) # 获取创建页面的工具 notion_tools notion_toolkit.get_tools() # 通常我们需要的是创建页面的工具可以过滤或全部添加 tools.extend(notion_tools) # 这里添加了所有Notion工具 self.notion_database_id notion_database_id else: self.notion_database_id None # 初始化一个能使用多工具的Agent self.agent initialize_agent( tools, self.llm, agentAgentType.ZERO_SHOT_REACT_DESCRIPTION, verboseTrue, handle_parsing_errorsTrue, max_iterations8 # 因为工具更多允许更多迭代 ) def analyze_and_save(self, topic: str, save_to_notion: bool False): 分析一个市场主题并可选地保存到Notion。 prompt f请对以下市场主题进行综合分析{topic} 请执行以下步骤 1. 搜索该主题相关的近期3个月内重要新闻、财报或行业报告。 2. 总结出关键趋势、潜在机会和主要风险。 3. 以清晰的要点形式呈现你的分析。 if save_to_notion and self.notion_database_id: prompt f\n4. 最后将这份分析报告保存到Notion数据库ID: {self.notion_database_id}中页面标题请包含日期和主题。 try: result self.agent.invoke({input: prompt}) return result[output] except Exception as e: return f分析过程出错{e}对应的你需要更新research_service.py添加一个新的API端点来调用这个更强大的Agent并在Dify中创建对应的自定义工具。这样你的Dify应用就能根据用户选择执行简单调研或深度分析并归档的复杂任务了。通过这种方式你实际上是在用Dify搭建一个可插拔的工具平台。每一个复杂的LangChain智能体都可以被包装成一个独立的HTTP服务然后作为“自定义工具”接入Dify。Dify负责对话管理、上下文维护和用户交互而LangChain负责后端的重型计算和逻辑处理。这种架构既保持了Dify的易用性和可维护性又获得了LangChain的灵活性和强大功能。我在实际项目中采用这种模式后最大的感受是开发效率的提升和关注点的分离。前端产品同学可以专注于在Dify上优化对话流程和提示词而后端AI工程师则可以专心打磨LangChain的Agent逻辑双方通过清晰的API契约协作迭代速度非常快。