ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

用Dify搭建Agent工作流:实现AI日报自动生成与信息汇总

用Dify搭建Agent工作流:实现AI日报自动生成与信息汇总 08/09 的 AI 讨论里OpenAI 暂停 Astra、Grok Image 2.0 疑似推送这类消息往往散落在新闻站、推文和社区帖子中。靠人工打开十几个页面再整理成日报既慢还容易漏。与其重复这种操作不如用 Dify 搭一个 Agent 工作流把“输入主题 - 搜索信息 - LLM 汇总 - 输出日报”固定成可视化流程。这篇文章会从 Dify 的部署开始逐步实现一个可复用的 AI 日报生成工作流然后解释节点设计、参数调整、运行验证和生产化注意点。学完之后这套流程可以直接扩展到竞品动态跟踪、技术周刊生成、内部情报汇总等场景。1. 先理解 Dify 中的 Agent 工作流在编排什么1.1 从普通问答到 Agent 工作流普通问答应用的结构是用户输入问题模型直接返回答案。这种方式适合常识问答但面对“今天的 OpenAI 有什么新动态”这类需要实时数据的问题模型会受限于训练截止日期无法给出可靠答案。Agent 工作流的核心差异是在模型回答之前插入一个外部信息获取环节模型先理解任务再调用搜索接口或数据库接口拿到结果之后才生成最终回答。在 Dify 中这个链路被可视化成一张工作流图。开发者不需要自己维护工具调用、API 鉴权、上下文拼接只需要把节点拖到画布上配置好输入输出变量。对大部分团队来说这比从零写一套 Agent 框架更容易维护也更容易排查问题。1.2 为什么选择 Dify 而不是直接写代码直接写一个 Agent 服务通常要解决这些问题如何接多个模型供应商并做密钥管理。如何封装搜索、网页抓取、数据库查询等工具。如何把工具的返回结果和系统提示词拼接到一次模型请求中。如何处理超时、重试、截断和错误日志。如何把能力封装成 API 给前端或定时任务调用。Dify 把这些能力内置了。模型供应商、工具节点、知识库、工作流编排、API 发布都能在界面上完成适合快速验证和长期维护。代价是学习曲线你需要理解节点类型、变量传递和不同模式工作流、Chatflow、Agent之间的差异。不过一旦理解了最小闭环后面扩展并不难。1.3 日报助手工作流的节点设计这篇文章要搭建的 AI 日报生成工作流包含四个核心节点节点作用核心输入核心输出开始节点接收用户传入的日报主题topic、datetopic、date搜索工具节点调用外部搜索 API 获取资料由 topic 生成的搜索词标题、链接、摘要列表LLM 汇总节点把搜索结果整理成日报搜索结果、提示词模板Markdown 日报结束节点把结果返回给调用方LLM 节点输出daily_report固定流程的优点是稳定。每个节点负责一件事出问题时可以通过节点日志快速定位。相比让模型自主决定调用哪些工具固定工作流更适合日报这种重复性任务。等流程跑通之后再考虑是否升级成完全由模型决策的 Agent 模式。2. 环境准备把 Dify 社区版跑起来并接入模型2.1 部署方式选择Dify 有云服务和社区版。云服务适合快速体验社区版适合本地开发、私有化部署或生产环境自托管。这篇文章以社区版为例因为部署过程本身也能让你理解 Dify 的依赖组件。学习环境一般只需要一台本地机器或开发机配置不用太高。生产环境则需要独立数据库、Redis、对象存储和日志系统。这里先以本地 Docker Compose 部署为准。2.2 使用 Docker Compose 部署 Dify部署前确认 Docker 已安装并且 Docker Compose 可用。docker --version docker compose version接下来从官方仓库拉取最新代码进入 docker 目录复制环境变量模板并启动服务。git clone https://github.com/langgenius/dify.git cd dify/docker cp .env.example .env docker compose up -d启动过程会拉取多个镜像耗时取决于网络环境。启动完成后检查容器状态。docker compose ps看到所有服务处于 running 或 healthy 状态后打开浏览器访问http://localhost/apps第一次访问会要求设置管理员账号。最低配置建议如下表项目最低要求推荐配置CPU2 核4 核及以上内存4 GB8 GB 及以上磁盘20 GB50 GB 及以上Docker20.1024如果机器内存不足容器启动时会因为 PostgreSQL 或 Weaviate 被 OOM 杀死而失败所以内存不是可选项。2.3 配置模型供应商进入 Dify 的“设置 - 模型供应商”添加你使用的模型服务。这里以 OpenAI 兼容接口为例需要关注四个配置项配置项说明注意点API Key模型服务的身份凭证存放在环境变量或凭据管理中不要硬编码在页面里展示Base URLAPI 请求地址使用第三方兼容服务时按服务商文档填写模型名称实际调用的模型标识不同供应商的模型名规则不同上下文长度模型单次请求可接收的 token 上限日报汇总场景建议选择 128K 以上的模型配置完模型供应商之后还要在“系统模型设置”中指定默认对话模型和默认推理模型。这是因为不同节点可能使用不同的模型如果系统默认模型没有设置运行工作流时会出现Model provider not initialized这类报错。2.4 准备搜索工具日报工作流需要实时信息因此需要一个可调用的搜索接口。常见选择包括 Tavily、SerpAPI、Bing Search也可以使用团队自建的搜索服务。以 Tavily 为例申请到 API Key 后在 Dify 工具节点中配置即可。如果 Dify 的工具市场里没有对应工具也可以在工具节点中通过自定义 OpenAPI 接入一个 HTTP 搜索接口。生产环境建议使用收费或自建服务免费接口的限流会直接影响日报稳定生成。3. 创建“AI 日报生成”工作流3.1 新建应用并选择工作流模式在 Dify 控制台点击“创建应用”选择“工作流”或“Agent”类型应用名称可以叫“AI日报生成器”。不同版本的入口名称可能有差异但核心都是在一张画布上编排节点。建议先用空白工作流开始因为固定节点顺序容易调试。等熟悉之后再尝试使用 Agent 节点或 Chatflow 模式。3.2 配置开始节点进入工作流画布后首先配置开始节点。添加两个输入字段topic字符串类型表示日报主题例如OpenAI。date字符串类型表示日报日期例如08/09。这两个变量会在后面的搜索节点和提示词模板中被引用。命名的目标是让人一眼看出用途不要用a、b这种无意义名称。3.3 配置搜索工具节点添加一个工具节点选择准备好的搜索服务。核心逻辑是拼出搜索词并调用搜索接口。如果工具节点支持模板变量可以把查询参数配置成{ query: {{#start.topic#}} {{#start.date#}} 最新动态, max_results: 10, search_depth: basic }其中{{#start.topic#}}表示引用开始节点的topic变量。实际变量名需要根据画布里的节点 ID 调整Dify 界面里可以直接点击选择变量不需要纯手写。如果工具节点不支持也可以使用 HTTP 请求节点手动指定请求地址、请求头和请求体。搜索服务的返回结果中至少应包含标题、链接和摘要这三个字段是日报生成的基础材料。3.4 配置 LLM 汇总节点添加 LLM 节点模型选择系统中已经配置好的模型。这里的关键是提示词模板。提示词模板可以这样写你是一名 AI 行业日报编辑。根据下面的搜索结果生成当天的 {{#start.topic#}} 日报。 要求 1. 只保留与 {{#start.topic#}} 相关的内容。 2. 每条信息必须包含标题、来源站点、原文链接和一句话摘要。 3. 如果某条信息没有官方确认必须在标题前标注 [未确认]。 4. 如果搜索结果不足直接写“今日没有可确认的动态”不要编造。 5. 最终输出使用 Markdown 格式按“头条 / 产品更新 / 社区讨论”分节。 搜索结果 {{#search_result.output#}}这里的{{#search_result.output#}}是示意写法实际引用搜索工具节点的输出变量。注意不要直接把变量名复制进代码块要在 Dify 界面中选择对应变量。3.5 配置结束节点最后添加结束节点把 LLM 节点的输出映射为最终结果。建议输出两个字段daily_reportMarkdown 日报正文。sources本次引用的来源列表方便后续二次核验。结束节点是工作流的出口。配置完成后整张工作流图就形成了“开始 - 搜索 - LLM - 结束”的闭环。4. 参数说明让日报更稳定、更可用4.1 模型参数速查LLM 节点里温度、最大 token、top-p 等参数会影响输出质量。对于日报这种偏向事实汇总的任务推荐参数如下参数推荐值调大影响调小影响temperature0.2 - 0.4更有创造性但容易偏离事实更稳定但可能过于机械max_tokens2000 - 4000能输出更长的日报但响应变慢日报容易被截断top_p0.9增加输出多样性降低输出多样性日报任务建议使用较低温度因为事实汇总需要的是准确而不是创意。4.2 搜索参数搜索节点的参数会直接影响日报质量。参数建议值说明max_results5 - 10太少信息不足太多 LLM 容易超上下文日期过滤当天或近一周日报需要时效性语言按目标读者设置可避免混入大量无关语种如果搜索返回的结果与主题无关通常是搜索词拼接有问题。可以先把搜索词的模板打印出来检查是否出现了不必要的字符。4.3 提示词里必须强调“来源”和“未确认”日报类自动化应用最大的风险是信息失真。自动生成的内容一旦被当成已确认事实转发会造成误导。因此提示词模板里要强制要求每条内容带来源链接。对“疑似”“可能”的消息保留不确定性。没有官方来源时不允许模型自行推断。这个设计不是多余而是生产环境的基本要求。4.4 可选加入知识库检索如果日报需要结合公司内部资料可以在搜索工具节点之后加入一个知识库检索节点把检索结果一并传给 LLM。知识库节点通常需要关注两个参数分段大小和 topK。分段太大检索命中精度下降topK 太小可能漏掉关键内容。一般建议先用默认值再根据测试结果微调。5. 运行验证与发布5.1 在工作流编辑器里运行测试配置完成后点击工作流右上角的“运行”按钮输入测试参数{ topic: OpenAI, date: 08/09 }运行后逐个检查节点状态搜索节点是否返回了数据。LLM 节点是否成功调用。结束节点是否输出了 Markdown 日报。如果某个节点变红点击节点打开日志面板查看具体报错。把搜索工具节点的输出先直接放到结束节点可以快速区分“搜索失败”和“LLM 汇总失败”。5.2 发布并获取 API工作流测试通过后点击“发布”。发布后在“API 访问”页面可以找到工作流的 API 地址和密钥。API 密钥以app-开头只能保存在服务端不能直接写到前端代码里。5.3 通过 curl 调用工作流 API工作流发布后可以通过 HTTP 接口调用curl --location --request POST https://your-app.example.com/v1/workflows/run \ --header Authorization: Bearer app-xxx \ --header Content-Type: application/json \ --data-raw { inputs: { topic: OpenAI, date: 08/09 }, response_mode: blocking, user: daily-news-bot }响应中会包含workflow_run_id和outputs字段。outputs.daily_report就是最终日报内容。示意响应结构如下{ workflow_run_id: run_abcdef, status: succeeded, outputs: { daily_report: # OpenAI 日报\n\n## 头条\n- [未确认] ..., sources: [] } }不同版本的 Dify 返回字段会有差异以实际接口文档为准。5.4 用 cron 定时触发生成每日日报日报适合定时生成。可以在服务器上写一个 cron 任务每天早上请求一次工作流 API。0 8 * * * curl --location --request POST https://your-app.example.com/v1/workflows/run \ --header Authorization: Bearer app-xxx \ --header Content-Type: application/json \ --data-raw {inputs:{topic:AI,date:$(date %m/%d)},response_mode:blocking,user:cron} \ /var/log/dify-news.log 21生产环境建议不要直接把 cron 输出丢弃至少要保留日志并在请求失败时发送告警。6. 常见问题排查从日志到节点状态逐层定位6.1 模型节点报错Model provider not initialized常见原因是模型供应商没有配置或者没有设置系统默认模型。检查项操作模型供应商是否配置进入设置 - 模型供应商确认 API Key 已填写系统默认模型是否设置进入系统模型设置指定默认对话模型和推理模型模型名称是否与供应商一致对照供应商文档检查模型名修复后重新运行工作流。如果仍报错重启 Dify 容器再测试。6.2 搜索工具提示 401、429 或超时根据 HTTP 状态码区分原因401API Key 无效或未配置。429请求超出配额需要等待或升级套餐。超时搜索服务不可达或网络策略限制。排查方式是先用 curl 单独调用搜索接口确认接口本身正常。如果外部搜索 API 在当前部署环境不可用建议改用本地可访问的搜索服务或者退一步使用知识库检索作为数据来源。6.3 日报内容为空或输出被截断可能原因有三个max_tokens设置过小日报太长被截断。搜索结果为空LLM 没有材料可写。提示词过于复杂模型没有严格遵循输出格式。排查顺序应该是先看搜索节点输出是否正常再看 LLM 节点实际接收的上下文最后调整max_tokens和提示词。6.4 知识库检索不到内容检查知识库文档是否成功分段和索引。如果文档更新后没有重新索引检索结果就不会包含新内容。另外检索的 topK 太小也可能导致无结果。先在知识库页面直接测试检索确认能召回内容再回到工作流里检查变量引用。6.5 Dify 服务启动失败使用docker compose logs -f查看容器日志。常见问题包括端口被占用。磁盘空间不足。内存不足导致容器退出。环境变量配置错误。排查顺序是先看日志再关注资源占用最后检查.env文件里是否有冲突配置。7. 用这个工作流追踪 08/09 的 AI 动态7.1 输入 “OpenAI Astra” 和 “Grok Image 2.0”08/09 的公开讨论中OpenAI 暂停 Astra 和 Grok Image 2.0 疑似推送都是比较受关注的话题。这类信息具有两个特点一是分散在不同平台二是多为“疑似”或“讨论中”状态。手动整理时很容易忽略来源或把猜测写成事实。使用刚才搭建的工作流把topic分别设为OpenAI Astra和Grok Image 2.0工作流会先搜索相关页面再根据提示词生成日报。由于提示词中已经要求对未确认消息标注[未确认]最终输出会更接近“信息摘要”而不是“新闻定论”。下面是输出结构的一个示意不代表真实搜索结果# OpenAI Astra 日报08/09 ## 头条 - [未确认] OpenAI 暂停 Astra 项目的相关讨论在社区扩散。 来源链接A / 链接B 摘要多个消息源都在讨论该项目状态官方尚未发布正式公告。 ## 社区讨论 - 开发者对 Astra 后续方向存在不同解读。 来源链接C这个结构能帮助读者快速判断哪些信息可以引用哪些还需要进一步确认。7.2 让工作流保留“疑似”信息自动生成日报时最重要的一件事是区分“事实”和“推测”。Grok Image 2.0 疑似推送这类信息很可能只有少数用户反馈还没有官方公告。如果提示词不强调“未确认标注”模型可能会根据上下文自行脑补成已确认事实。在提示词中加入这条规则对于没有官方来源的信息必须在标题前标注 [未确认]并在摘要中说明信息来源。这样生成的日报才不会误导读者。7.3 把日报推送到订阅渠道工作流 API 发布后可以把输出接入钉钉、飞书、企业微信或邮件。常见做法是写一个脚本请求工作流 API。解析outputs.daily_report。调用群机器人 Webhook 发送消息。失败时写入日志并重试。这个环节不需要 Dify 参与属于外部调度逻辑。生产环境建议单独监控。8. 生产化建议从“跑通”到“稳定”8.1 学习环境与生产环境的差异本地 Docker 部署跑通是第一步但生产环境还要考虑更多组件。维度学习环境生产环境数据库Docker 内置独立高可用实例RedisDocker 内置独立 Redis 服务模型 Key个人测试 Key企业 Key并加密存储搜索 API免费额度付费或自建服务日志控制台查看集中日志和告警权限管理员账号最小权限 多租户隔离回滚不涉及保留历史工作流版本支持回退不建议直接把学习环境的 Docker 容器搬到生产环境。至少要把数据库和 Redis 拆出来避免容器重启导致数据丢失。8.2 发布前检查清单上线前可以按下面的清单过一遍系统默认模型已配置且测试过多种长度输入。工具 API Key 使用环境变量或凭据管理。提示词中包含来源链接和未确认标注规则。搜索节点设置了超时和失败处理。测试覆盖空结果、结果过多、API 超时三种场景。工作流 API 密钥只保存在服务端。定时任务有日志、重试和失败告警。生产数据定期备份。每一条都对应实际事故案例。比如没有日志的定时任务一旦工作流发布新版本导致变量名变化你会很难定位问题。8.3 从“固定工作流”升级为真正的 Agent日报生成适合固定工作流因为任务边界清晰搜索、汇总、输出。固定工作流的好处是稳定和可控缺点是不够灵活。如果要把日报助手升级成真正的 Agent可以改为 Agent 模式让模型根据用户问题自动判断是否需要搜索、调用哪个工具、追问还是直接回答。这种模式适合开放式查询但会增加不可控性。实际项目中建议保留两种入口稳定流程走工作流探索性查询走 Agent。8.4 后续扩展方向日报工作流只是开始。后续可以加入更多工具节点比如抓取指定新闻源、查询数据库。加入知识库将历史日报入库做趋势分析。加入人工审核节点重要信息发布前由人确认。接入内容审核服务避免自动生成内容包含违规信息。把生成的日报归档到对象存储形成历史检索库。对于一个开发团队这套流程最大的价值不是省去写日报的时间而是把信息收集、过滤、摘要、分发环节标准化。任何以信息汇总为核心的任务都可以复用今天这个工作流模板。Dify 的版本迭代很快节点名称、配置入口和 API 字段会有变化。建议以官方文档为准同时保留本文理解的核心思路先定义数据流再配置节点最后在日志中验证每一步输出。日报助手是这样其他自动化工作流也是这样。
返回列表