LazyLLM使用数据流构建简单RAG

LazyLLM使用数据流构建简单RAG

LazyLLM数据流的问题

1.LazyLLM数据流#的作用与静态图问题

数据流的核心作用

  • 复杂应用一键部署
    • 传统方式:需手动逐个启动各组件(文档管理器、多个大模型等)
    • LazyLLM数据流:通过统一start()并行启动所有模块
    • 并行化支持:需配置REDIS服务器作为轻量网关实现高效并行
  • 动态执行流程
    • 允许模块独立运行(如单独使用Document Retriever或大模型)
    • 无需强制依赖PipelineParallel等数据流工具

静态图 vs 动态图

特性 动态图 (LazyLLM采用) 静态图
执行方式 边计算边执行 预先编译完整计算图
调试灵活性 支持中间结果输出、断点调试 难以实时调试
性能优化 灵活性优先 可做依赖分析、并行优化
适用场景 需要快速迭代的AI应用 高性能固定计算流程

结论:LazyLLM采用动态图设计,符合AI应用需灵活调整的需求。


2. LazyLLM对思维链(Chain-of-Thought)输出的支持

支持机制

  • 线上模型
    • 统一封装各供应商的思维链输出差异
    • 新增reasonJK字段标准化输出思考过程
    • 数据格式扩展:user → think → assistant(原只有user → assistant
  • 本地模型
    • 通过vLLM或LazyLLM框架原生支持
    • 输出带特殊标记的Token序列(如<think>...</think>包裹思考过程)

使用数据流简单构建RAG

import lazyllm

# ===实例化Document组件===
# 选择data path为下载好的数据路径
documents = lazyllm.Document(dataset_path=r"D:\task\AI应用开发\LazyLLM_Test\Demo_01\data_kb")

prompt = ('你将扮演一个人工智能问答助手,并完成一段对话任务。',
          '在本次任务中,您需要根据所提供的背景信息和问题给出答案。')

with lazyllm.pipeline() as pipe:
    # ===检索组件定义===
    pipe.retriever = lazyllm.Retriever(
        # 基于文档管理组件
        doc=documents, 
        # 选择粗粒度节点组
        group_name="CoarseChunk", 
        # 使用 BM25 中文检索算法
        similarity="bm25_chinese", 
        # 设置检索的 topk 数量
        topk=3, 
        # output_metadata选择content(只要节点内容,不要meta信息)
        output_format='content', 
        join=" "
    )
    pipe.formatter = (lambda node, query: dict(context_str=node, query=query)) | bind(query=pipe.input)
    pipe.llm = lazyllm.OnlineChatModule(
        source= "glm",
        model="glm-4-plus",
        api_key="YOUR_API_KEY"
    ).prompt(lazyllm.ChatPrompter(instruction=prompt, extra_keys=['context_str']))

query = input('请输入您的问题\n')

res = pipe(query)

print(f'使用 RAG 答案: {res}')
posted @ 2025-07-13 22:05  张三删库跑路  阅读(71)  评论(0)    收藏  举报