自然语言交互式的数据库读写
临近年末,又迎来了投标季,编制如投标文件这类大型文档常常让人头疼。
不仅要确保内容准确专业,还要突出企业优势,既考验专业知识,又要求文案策划能力。即便两者兼具,仍然需要花费大量时间和精力逐字逐句地编写,工作量巨大,难度颇高。
于是,这个基于 Dify 框架的智能化文档编制工作流便成为了一个高效解决方案,其核心是使用 Dify-Chatflow 实现自然语言驱动的数据库读写操作,能够自动读取原文档、根据用户需求进行修改或编写新内容,同时自动生成文档概述并提炼出关键要点,最后完成保存。
这个工作流使用的是 dify 的聊天助手工作流编排模式,也叫 Chatflow。
Chatflow VS Workflow
Chatflow 适用场景:
面向对话类情景,包括客户服务、语义搜索、以及其他需要在构建响应时进行多步逻辑的对话式应用程序。该类型应用的特点在于支持对生成的结果进行多轮对话交互,调整生成的结果。
常见的交互路径:给出指令 → 生成内容 → 就内容进行多次讨论 → 重新生成结果 → 结束
Workflow 适用场景:
面向自动化和批处理情景,适合高质量翻译、数据分析、内容生成、电子邮件自动化等应用程序。该类型应用无法对生成的结果进行多轮对话交互。
常见的交互路径:给出指令 → 生成内容 → 结束
智能化文档编制 Chatflow 实现逻辑
Step1
我们将大型文档拆分成多个文本块。例如,投标文件中的常用内容:公司简介、质量保障措施、技术研发能力、售后服务保障等,都被分成独立的文本块。
Step2
将这些文本块存储到数据库中。选择数据库存储而非本地文件,主要是因为数据库便于共享,并且将文档内容结构化后,更易于后期处理,能应对多样的需求场景。我们的数据表包括 ID、标题、类别、概述、要点、内容和记录时间等字段,其中概述和要点是由大模型根据修改后的内容自动生成的。概述提供内容的高度概括,而要点则是条目化的总结,这些可以方便地用于后续制作 PPT 等。
Step3
通过 Dify 的 Chatflow 构建应用,用户可以通过自然语言交互完成两项任务:一是修改和完善现有的文档块,二是编写全新的内容。任务完成后,修改和新增的内容将通过自然语言自动提交到数据库,完成更新与保存。
由于整个 Chatflow 节点较为复杂且繁多,接下来我会对整体进行简要概述。
任务一:修改和完善现有的文档块
- 文档查询分支:
- 用户通过输入文本块 ID(如井号+数字)发起查询请求。
- 查询分支从数据库中检索出对应的文档块,提取并展示 ID、标题和内容。
- 查询结果通过代码执行节点处理,并判断是否存在有效的文档块。
- 文档修改分支:
- 用户输入修改要求后,系统根据内容判断是扩写还是修改文档块。
- 在修改分支,大模型将依据用户要求对已查询的文档进行修改,修改后的内容输出为代码块格式,方便复制。
- 用户对修改后的内容进行确认,如果满意可进入保存流程,若不满意,继续修改。
- 用户确认保存修改内容后,系统将修改的文本保存到数据库中,并展示修改的概述与要点。
任务二:编写全新内容
- 重置任务分支:如果用户选择重置,系统会清除之前查询的文档状态,为编写新内容做准备。
- 编写新内容分支:用户输入新的文本块要求,系统将根据新的任务进行创作,生成标题和内容。
- 新增内容标题提示分支:为用户提供新的标题建议,帮助他们更好地组织和编辑内容。
- 确认保存分支:用户确认编写的新内容,最终进入保存流程。
- 提交保存分支:新内容保存到数据库,并输出总结和要点。
关键功能和节点说明
- 分类器节点:对用户输入进行分类,识别查询、修改、保存等需求。
- 条件分支节点:根据不同情况(如内容是否为空)来决定工作流的走向。
- 代码执行节点:执行数据库查询、文本处理等操作。
- 大模型节点:负责生成或修改文本,根据用户的要求提供输出。
- 直接回复节点:向用户展示结果或提示操作。
- 变量赋值节点:管理会话中的变量,确保流程的逻辑顺畅。
以上就是任务一和任务二的整体流程和关键功能节点。通过清晰的设计,系统能够灵活应对用户需求,确保文档查询、修改和创作顺利进行。