dify4: test-doc

image

image

image

db.txt

复制代码

-- ================================
-- 学生与教师表结构(简化版)
-- 适用于 MySQL 8.0+
-- ================================

-- 创建数据库(如果不存在)
CREATE DATABASE IF NOT EXISTS school_management;
USE school_management;

-- 教师表
CREATE TABLE teachers (
    teacher_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '教师编号',
    name       VARCHAR(50)  NOT NULL COMMENT '姓名',
    gender     CHAR(1)      NOT NULL COMMENT '性别(M/F)',
    title      VARCHAR(30)          COMMENT '职称',
    phone      VARCHAR(20)          COMMENT '电话',
    email      VARCHAR(100)         COMMENT '邮箱'
) COMMENT='教师信息表';

-- 学生表
CREATE TABLE students (
    student_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '学号',
    name       VARCHAR(50)  NOT NULL COMMENT '姓名',
    gender     CHAR(1)      NOT NULL COMMENT '性别(M/F)',
    age        INT                  COMMENT '年龄',
    class_name VARCHAR(50)          COMMENT '班级名称',
    teacher_id INT                  COMMENT '指导教师编号(外键)',
    FOREIGN KEY (teacher_id) REFERENCES teachers(teacher_id)
) COMMENT='学生信息表';

复制代码

image

知识库设置

image

复制代码

app:
  description: ''
  icon: 🤖
  icon_background: '#FFEAD5'
  icon_type: emoji
  mode: advanced-chat
  name: test-doc
  use_icon_as_answer_icon: false
dependencies:
- current_identifier: null
  type: marketplace
  value:
    marketplace_plugin_unique_identifier: langgenius/siliconflow:0.0.59@8f02741bb210eac68b68263c1cbede0e0637f2d1ad082895906e03253461729c
    version: null
kind: app
version: 0.7.0
workflow:
  conversation_variables: []
  environment_variables: []
  features:
    file_upload:
      allowed_file_extensions:
      - .JPG
      - .JPEG
      - .PNG
      - .GIF
      - .WEBP
      - .SVG
      allowed_file_types:
      - image
      allowed_file_upload_methods:
      - local_file
      - remote_url
      enabled: false
      fileUploadConfig:
        attachment_image_file_size_limit: 2
        audio_file_size_limit: 50
        batch_count_limit: 5
        file_size_limit: 15
        file_upload_limit: 20
        image_file_batch_limit: 10
        image_file_size_limit: 10
        single_chunk_attachment_limit: 10
        video_file_size_limit: 100
        workflow_file_upload_limit: 10
      image:
        enabled: false
        number_limits: 3
        transfer_methods:
        - local_file
        - remote_url
      number_limits: 3
    opening_statement: ''
    retriever_resource:
      enabled: true
    sensitive_word_avoidance:
      enabled: false
    speech_to_text:
      enabled: false
    suggested_questions: []
    suggested_questions_after_answer:
      enabled: false
    text_to_speech:
      enabled: false
      language: ''
      voice: ''
  graph:
    edges:
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: llm
        targetType: answer
      id: llm-answer
      selected: false
      source: llm
      sourceHandle: source
      target: answer
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: start
        targetType: knowledge-retrieval
      id: 1786783370869-source-1786783377015-target
      source: '1786783370869'
      sourceHandle: source
      target: '1786783377015'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: knowledge-retrieval
        targetType: llm
      id: 1786783377015-source-llm-target
      source: '1786783377015'
      sourceHandle: source
      target: llm
      targetHandle: target
      type: custom
      zIndex: 0
    nodes:
    - data:
        selected: false
        title: 用户输入
        type: start
        variables: []
      height: 73
      id: '1786783370869'
      position:
        x: 80
        y: 281
      positionAbsolute:
        x: 80
        y: 281
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 242
      zIndex: 0
    - data:
        context:
          enabled: false
          variable_selector: []
        memory:
          query_prompt_template: '{{#sys.query#}}


            {{#sys.files#}}'
          role_prefix:
            assistant: ''
            user: ''
          window:
            enabled: false
            size: 10
        model:
          completion_params:
            temperature: 0.7
          mode: chat
          name: Qwen/Qwen3-14B
          provider: langgenius/siliconflow/siliconflow
        prompt_template:
        - id: 2538014c-8419-4758-bc2a-1ea0a0f0dc72
          role: system
          text: '# 角色

            你是一位严谨的数据库查询助手,职责是根据公司内部的“数据库知识库”(包含表结构、字段含义、业务规则等)为开发人员或业务人员提供准确的 SQL
            查询建议或数据解读。你**必须**严格遵循以下规则,**不得**越界。


            # 核心原则(铁律)

            1. **绝对忠于知识库**:你的所有回答**仅限**使用下方 `{{#context#}}` 中提供的数据库知识库内容(如数据字典、表关系、字段枚举值、计算规则等)。**禁止**引用任何外部数据库规范、通用
            SQL 惯例或常识性推测。

            2. **零推算、零编造**:**严禁**虚构不存在的表名、字段名、数据类型或关系。如果知识库中未明确给出某个字段的含义、取值规则或表间关联方式,**必须**直接回复:“该问题暂无相关数据说明,请确认知识库内容后重试”。

            3. **严格区分查询类型**:对于用户的问题,明确区分是“查询数据”(生成 SELECT)还是“获取表结构信息”或“解释业务规则”,回答方式应相应调整。

            4. **仅生成安全查询**:若用户要求生成 SQL,**只生成 SELECT 语句**,不得包含 INSERT、UPDATE、DELETE、DDL
            等任何修改操作。若用户意图不明,应反问澄清。

            5. **禁止复制大段知识库原文**:须提炼为精简易懂的描述,但保留必要的字段名、表名和约束条件,确保准确无误。


            # 回答结构规范

            请按以下顺序组织回答(若某部分无信息,可跳过):

            1. **结论先行**:用一句话直接回答用户的核心问题(如“该查询结果可从 `students` 和 `teachers` 表联查获得”“您需要的字段为
            `name` 和 `age`”)。

            2. **依据说明**:简要说明知识库中对应的表、字段或规则(例如:“根据知识库,`students` 表的 `gender` 字段取值为
            ''M'' 或 ''F''”)。

            3. **SQL 语句(如适用)**:提供可直接执行的 SELECT 语句,使用表别名,格式清晰,并添加必要的注释说明关键逻辑。

            4. **注意事项**:如有知识库提及的限制(如“仅支持单表查询”“日期字段存储为字符串”等),需**加粗**提示。

            5. **多问题分类**:若用户同时询问多个表或查询需求,按“一、二、三”分点回答。


            # 特殊情况处理

            - 如果用户问题涉及知识库中未覆盖的表或字段,统一回复:“该问题暂无相关数据说明,请确认知识库内容后重试”。

            - 如果用户问题模糊(如“查一下数据”),请反问澄清(如“请指定要查询的表名或业务场景”)。

            - 如果用户要求生成复杂关联查询,但知识库未明确关联条件,应询问或拒绝推算。


            # 知识库内容

            以下是公司“数据库知识库”的完整原文,你的所有依据均来源于此:

            {{#context#}}


            # 示例对话(仅作格式参考,具体内容以知识库为准)

            **用户**:查询所有女教师的姓名和邮箱。

            **助手**:

            结论:可从 `teachers` 表中获取,性别字段 `gender` 取值为 ''F''。

            依据:知识库中 `teachers` 表包含 `name`、`email`、`gender` 字段,其中 `gender` 为 CHAR(1),M表示男,F表示女。

            SQL:

            ```sql

            SELECT name, email

            FROM teachers

            WHERE gender = ''F'';'
        selected: false
        title: LLM
        type: llm
        vision:
          enabled: false
      height: 88
      id: llm
      position:
        x: 299
        y: 506
      positionAbsolute:
        x: 299
        y: 506
      selected: true
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 242
      zIndex: 0
    - data:
        answer: '{{#llm.text#}}'
        selected: false
        title: 直接回复
        type: answer
        variables: []
      height: 102
      id: answer
      position:
        x: 680
        y: 282
      positionAbsolute:
        x: 680
        y: 282
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 242
      zIndex: 0
    - data:
        dataset_ids:
        - e02VAcx032pYWRl94c8siLOZ9rQvyANq3EewdfBjygrmvwM2zwpB9v+DEx7EuEZH
        multiple_retrieval_config:
          reranking_enable: true
          reranking_mode: reranking_model
          reranking_model:
            model: netease-youdao/bce-reranker-base_v1
            provider: langgenius/siliconflow/siliconflow
          top_k: 4
        query_attachment_selector: []
        query_variable_selector:
        - '1786783370869'
        - sys.query
        retrieval_mode: multiple
        selected: false
        title: 知识检索
        type: knowledge-retrieval
      height: 90
      id: '1786783377015'
      position:
        x: 238
        y: 384
      positionAbsolute:
        x: 238
        y: 384
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 242
      zIndex: 0
    viewport:
      x: -301.5
      y: 56
      zoom: 1
  rag_pipeline_variables: []

复制代码

内容概要:本文是一份系统性的Go语言并发编程实战教程,通过构建一个可运行的并发URL健康检查器项目,全面讲解了Go中goroutine、channel、select、WaitGroup、Mutex、context、超时控制、worker pool、限流、错误收集和优雅退出等核心并发机制。文章从基础概念入手,结合代码示例与实战项目,深入剖析常见并发模式如Worker Pool、Pipeline、Fan-out/Fan-in,并指出典型陷阱及修复方法,最后提供增强功能与测试建议,帮助开发者掌握生产级并发编程的最佳实践。; 适合人群:已掌握Go基础语法,具备一定开发经验(工作1-3年)的后端或云原生开发人员;希望深入理解Go并发模型并提升高并发系统设计能力的工程师。; 使用场景及目标:① 学习如何正确使用goroutine与channel进行任务调度和数据通信;② 掌握context在取消、超时和请求链路追踪中的应用;③ 构建可控并发度的worker pool避免资源耗尽;④ 实现错误汇总、限流、优雅退出等生产级特性;⑤ 避免goroutine泄漏、死锁、数据竞争等常见问题。; 阅读建议:建议边阅读边动手实现文中的URL健康检查器项目,结合-race检测工具验证并发安全性,并尝试完成文末练习任务以深化理解;重点关注context传播、channel所有权、单一状态持有者等设计原则,在实践中体会“不要通过共享内存来通信”的Go哲学。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值