基于Dify工作流的多阶段检索与筛选系统

Dify工作流中实现查询优化(QO):将查询复杂度分类法与QOL框架融入工作流

假设用户输入的问题是:“请帮我整理2026年1月1日至今在GitHub上发布的金融商业行业开源项目”

为了整理2026年1月1日至今在GitHub上发布的金融商业行业开源项目,Dify工作流应设计为一个多阶段检索与筛选系统,结合GitHub API与智能过滤机制,确保获取到准确、相关且最新的项目信息。以下是详细的工作流设计:

一、核心工作流设计

1. 参数提取与时间范围确认节点

  • 功能:明确用户需求中的关键参数
  • 实现
    - type: llm
      name: parameter_extractor
      prompt: |
        请从用户问题中提取以下关键参数:
        - 时间范围:起始日期为2026-01-01,结束日期为当前日期
        - 行业领域:金融商业
        - 排序方式:按热度(stars)和时间双重维度
        
        用户问题:{{input}}
        
        请以JSON格式返回结果:
        {
          "start_date": "2026-01-01",
          "end_date": "{{current_date}}",
          "industry_keywords": ["finance", "financial", "banking", "trading", "stock", "investment"],
          "sort_criteria": ["stars", "created_at"]
        }
      response_mode: blocking
    

2. GitHub API检索节点

  • 功能:调用GitHub API获取符合条件的项目
  • 实现
    - type: http_request
      name: github_api_call
      config:
        url: "https://api.github.com/search/repositories?q=created:>={{parameter_extractor.output.start_date}}+language:Python+or+TypeScript+or+JavaScript&sort=stars&order=desc&per_page=100"
        method: GET
        headers:
          Authorization: "Bearer {{github_token}}"
        response_mode: blocking
    

3. 金融领域过滤节点

  • 功能:从API返回结果中筛选真正属于金融商业领域的项目
  • 实现
    - type: llm
      name: finance_filter
      prompt: |
        请判断以下GitHub项目是否属于金融商业行业:
        
        项目名称:{{repo.name}}
        项目描述:{{repo.description}}
        项目标签:{{repo.topics}}
        
        判断标准:
        - 项目是否涉及金融数据分析、交易、投资、银行、保险等领域
        - 项目是否提供金融工具、API或解决方案
        - 项目是否被明确标记为金融相关
        
        请以JSON格式返回判断结果:
        {
          "is_finance": true/false,
          "reason": "判断理由",
          "confidence_score": 0-100
        }
      response_mode: blocking
      input: 
        repo: "{{github_api_call.output.items}}"
    

4. 时效性验证节点

  • 功能:确保项目确实在指定时间范围内创建
  • 实现
    - type: python
      name: date_validator
      code: |
        import json
        from datetime import datetime
        
        data = json.loads(input())
        valid_projects = []
        
        for project in data:
            created_at = datetime.fromisoformat(project['created_at'].replace('Z', '+00:00'))
            start_date = datetime(2026, 1, 1)
            current_date = datetime.now()
            
            if start_date <= created_at <= current_date:
                valid_projects.append(project)
        
        print(json.dumps(valid_projects))
      input: "{{github_api_call.output.items}}"
    

5. 结果排序与聚合节点

  • 功能:对筛选后的项目进行排序和聚合
  • 实现
    - type: python
      name: result_sorter
      code: |
        import json
        data = json.loads(input())
        
        # 按stars和创建时间双重排序
        sorted_data = sorted(data, key=lambda x: (x['stargazers_count'], x['created_at']), reverse=True)
        
        # 聚合结果
        result = {
            "total_projects": len(sorted_data),
            "top_10": sorted_data[:10],
            "by_month": {}  # 按月份分组
        }
        
        # 按月份分组
        for project in sorted_data:
            month = project['created_at'][0:7]
            if month not in result['by_month']:
                result['by_month'][month] = []
            result['by_month'][month].append(project)
        
        print(json.dumps(result))
      input: "{{date_validator.output}}"
    

6. 结果格式化与输出节点

  • 功能:生成用户友好的最终输出
  • 实现
    - type: llm
      name: result_formatter
      prompt: |
        请根据以下数据生成一份结构清晰、内容丰富的GitHub金融开源项目报告:
        
        项目总数:{{result_sorter.output.total_projects}}
        按月份分布:{{result_sorter.output.by_month}}
        热门项目:{{result_sorter.output.top_10}}
        
        报告要求:
        1. 总结2026年1月至今金融开源项目的整体趋势
        2. 按月展示项目发布情况
        3. 详细介绍Top 5项目(名称、描述、特点、适用场景)
        4. 分析这些项目的技术栈和创新点
        5. 提供项目链接和实用建议
        
        请用中文撰写,保持专业性和可读性,使用Markdown格式。
      response_mode: blocking
      input: "{{result_sorter.output}}"
    

二、关键优化点

1. 多维度检索策略

  • 时间维度:使用created:>=2026-01-01精确筛选时间范围
  • 领域维度:结合关键词搜索(financetrading等)和LLM语义理解
  • 技术维度:优先关注Python/TypeScript项目(金融领域主流技术栈)

2. 证据质量评估机制

  • 置信度评分:为每个项目的分类结果添加置信度评分
  • 人工验证接口:对低置信度项目提供人工复核选项
  • 结果溯源:记录每个项目被筛选的详细理由

3. 动态调整策略

  • 反馈闭环:用户可标记结果准确性,系统自动调整过滤规则
  • 参数优化:根据检索结果数量动态调整API查询参数
  • 缓存机制:对高频查询结果进行缓存,减少API调用

三、预期输出结构

1. 整体趋势概览

  • 项目总数、月度分布、技术栈分布
  • 关键趋势:如"AI+金融"融合趋势、本地化部署需求增长等

2. 月度项目分析

  • 按月展示项目数量和特点
  • 重点分析1月和2月的金融开源项目爆发式增长现象

3. Top 5项目详解

  • dexter:自主金融研究智能代理,支持实时市场数据分析
  • OpenBB:金融数据平台,支持全品类金融分析
  • ai-hedge-fund:AI对冲基金项目,提供策略制定与风险评估工具
  • ZhuLinsen/daily_stock_analysis:LLM驱动的智能分析器,支持多数据源行情
  • TradingAgents:多智能体LLM金融交易框架,模拟专业交易公司运作

4. 技术洞察与建议

  • 技术栈分析:Python主导(80%+),TypeScript次之
  • 创新点:AI Agent架构、多数据源整合、本地化部署
  • 实用建议:适合个人投资者的轻量级工具推荐

四、潜在方案

1. GitHub API限制问题

  • 问题:GitHub REST API有5000次/小时的调用限制
  • 解决方案
    • 使用分页技术,合理控制per_page参数
    • 实现缓存机制,避免重复查询
    • 优先使用GraphQL API减少请求次数

2. 项目分类准确性问题

  • 问题:自动化分类可能产生误判
  • 解决方案
    • 采用双层过滤机制:先用关键词筛选,再用LLM精筛
    • 设置置信度阈值,低于阈值的项目进行人工复核

3. 时效性问题

  • 问题:GitHub Trending没有官方API,数据可能滞后
  • 解决方案
    • 结合多个数据源(如GitHub Search API、第三方趋势服务)
    • 使用Webhook实时监控新项目

通过以上工作流设计,能够系统性地收集、筛选和整理2026年1月1日至今的GitHub金融商业开源项目,为用户提供准确、全面、有价值的行业洞察
当然,作为普通用户来讲,在进行联网检索多数调用的为第三方api接口,有一定局限性存在,那么最好的方式依旧是通过相关理论对用户输入的问题进行拆解以及多重组合的多问题生成前提进行检索。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐