LazyLLM使用数据流构建简单RAG
LazyLLM使用数据流构建简单RAG
LazyLLM数据流的问题
1.LazyLLM数据流#的作用与静态图问题
数据流的核心作用
- 复杂应用一键部署
- 传统方式:需手动逐个启动各组件(文档管理器、多个大模型等)
- LazyLLM数据流:通过统一
start()并行启动所有模块 - 并行化支持:需配置REDIS服务器作为轻量网关实现高效并行
- 动态执行流程
- 允许模块独立运行(如单独使用Document Retriever或大模型)
- 无需强制依赖
Pipeline或Parallel等数据流工具
静态图 vs 动态图
| 特性 | 动态图 (LazyLLM采用) | 静态图 |
|---|---|---|
| 执行方式 | 边计算边执行 | 预先编译完整计算图 |
| 调试灵活性 | 支持中间结果输出、断点调试 | 难以实时调试 |
| 性能优化 | 灵活性优先 | 可做依赖分析、并行优化 |
| 适用场景 | 需要快速迭代的AI应用 | 高性能固定计算流程 |
结论:LazyLLM采用动态图设计,符合AI应用需灵活调整的需求。
2. LazyLLM对思维链(Chain-of-Thought)输出的支持
支持机制
- 线上模型
- 统一封装各供应商的思维链输出差异
- 新增
reason或JK字段标准化输出思考过程 - 数据格式扩展:
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}')

浙公网安备 33010602011771号