Agent开发挑战:如何在敏捷与可靠之间做到既要、又要、还要?

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. Agent开发挑战 : 如何在敏捷与可靠之间做到既要、又要、还要? 演讲人:王志宏
2. 01 引言 02 面向敏捷开发的 Agent 架构设计理念 03 实现“敏捷 + 稳定”的架构平衡 04 未来展望与生态共建
3.
4. AI风潮席卷全球,大模型渗透千行万业 以大模型为核心的AI技术取得突破,推动从通用生成能力到行业特定能力的全 面升级。大模型引领的AI风潮正席卷全球,推动各行业迈入智能化新阶段。 目前纯大模型及微调无法满足实际的场景需求,AI Agent俨然成为2025年最中 心的产品议题。相关数据显示,整体AI Agent 市场规模在2025年将达到73.8亿 美元,到2030年达到470亿美元。 褒贬不一的评价 优秀的开源工具 应用开发框架 LangChain / AutoGen / AutoGPT RAG开发框架 LLamaIndex / RagFlow / … 拖拽编排平台 Dify / Flowise / LangGraph / Coze /… 在实际案例方面,AI Agent能作用于各种广泛领域,包括电商、财管等多种领 域,根据相关调研,九成公司都对 AI Agent 有计划和需求,大约 51% 的受访者 已在生产中使用,78% 的受访者积极计划尽快将代理投入生产。
5. 主流 Agent 框架问题 敏捷开发的需求 稳定上线的需求
6. 员工才做选择题,老板当然全都要 Agent应用定价趋势(万) 1200 1000 1000 800 600 600 400 200 250 300 180 0 2022年底 RAG 2023年底 模型管理平台 300 120 30 100 20 5 2024年底 2025年中 应用编排平台
7. 01 引言 02 面向敏捷开发的 Agent 架构设计理念 03 实现“敏捷 + 稳定”的架构平衡 04 未来展望与生态共建
8. 多模态-Agentic-RAG的能力展示
9. 多模态-Agentic-RAG的架构介绍和演进
10. 福利时间:限时免费的RAG课程 全链路掌握 RAG, 别再被术语吓退! 性能 + 工程化, 一站式部署上线没烦恼 • 深入浅出拆解 RAG 原理,搞懂“检 索增强生成”背后的机制; • 缓存机制、异步处理、向量引擎集成,全链路 加速; • 从最小可用系统搭建,到工程化上 线,零基础也能实战落地。 • 支持模块化开发、打包部署,真正走向产品化。 企业级落地方案, 全场景实战演练 效果提升不是玄学, 全靠评测 + 优化 • 教你打造高质量 Reader,精准解析 HTML/PDF 等复杂文档; • 涵盖权限控制、标签管理、内容安全 与拒答机制; • 提供系统化评测工具与优化策略, 召回更准、问答更强。 • 适配团队/组织级部署需求 ,一站式 RAG 架构搭建指南。 多模态 × SQL × 大模型, 能力全面扩展 • 图文混合问答、多模态 RAG 轻松搭建; • 接入 SQL-call,支持业务统计类问答, 实现从检索到计算的跨模态融合。 高阶进阶, 走向智能体与知识图谱 • RAG × Agent 构建具备工具调用能力的智能问 答助手; • 融合知识图谱,支持结构化问答与更精准召回。 扫码进群,学习课程
11. 如何避免“上线即落后” 开放 自由算法 敏捷部署应用 轻松高效构建应用 • • 各个模块支持完全自定义 无缝集成优质开源组件 • 最小代价实现算法替换 • 支持中间件灵活选型 • • 一键自动化构建与上线 多环境部署流程高度一致 • 模块化设计降低开发门槛 • 数据流驱动,快速完成核心搭建
12. 复杂应用一键部署的设计 1 2 3 4 5 6 7 8 9 10 11 12 13 import lazyllm from lazyllm import (pipeline, parallel, bind, SentenceSplitter, Document, Retriever, Reranker, OnlineEmbeddingModule) prompt = ('You will play the role of an AI Q&A assistant and complete‘ 'a dialogue task. In this task, you need to provide your ‘ 'answer based on the given context and question.') documents = Document(dataset_path="rag_master", embed=lazyllm.TrainableModule(”bge-large-zh-v1.5"), manager=False) documents.create_node_group(name="sentences", transform=SentenceSplitter, chunk_size=1024, chunk_overlap=100) with pipeline() as ppl: with parallel().sum as ppl.prl: prl.retriever1 = Retriever(documents, group_name="sentences", similarity="cosine", topk=3) prl.retriever2 = Retriever(documents, "CoarseChunk", "bm25_chinese", 0.003, topk=3) ppl.reranker = Reranker(‘ModuleReranker‘, model= TrainableModule(”bge-reranker-large"), output_format='content', join=True) | bind(query=ppl.input) ppl.formatter = (lambda nodes, query: dict(context_str=nodes, query=query) ) | bind(query=ppl.input) ppl.llm = lazyllm.TrainableModule("internlm2-chat-7b", stream=False).prompt( lazyllm.ChatPrompter(prompt, extro_keys=["context_str"])) web = lazyllm.WebModule(ppl) 服务 发现 依赖 分析 一键 启动
13. 复杂应用一键部署的设计 LLM Embedding 文档管理服务 主服务 网关 GateWay Embedding 输入 大模型 文档管理 意图识别 召回器 重排器 大模型 输出
14. 数据流价值 业务逻辑 结构简洁、语义清晰 全自动的 服务发现和依赖分析 原生具备 可插拔的监控与调试 用户透明的 进程级数据传输
15. 数据流的“反面教材” 在langchain中,| 左边应 1. def get_name(): 该是一个重载了__or__的 return {"name": "张三"} 2. Runnable对象 3. 4. chain = get_name | {"name": lambda x: f"你好,{x['name']}"} 1. 2. 3. 4. 5. 6. 7. 1 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. from langchain.prompts import PromptTemplate from langchain_openai import ChatOpenAI from langchain_core.runnables import RunnableParallel prompt1 = PromptTemplate.from_template("你好,{name}") prompt2 = PromptTemplate.from_template("再见,{name}") llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0) chain = RunnableParallel({ PromptTemplate 需要输入 "greet": prompt1 | llm, {"name": "张三"} 才能替换模板。传 "bye": prompt2 | llm "张三",RunnableParallel 会把这个 }) 字符串直接交给 prompt1 和 prompt2,它们找不到 name 这个 print(chain.invoke("张三")) key,报错。 3 from langchain_core.runnables import RunnableParallel get_name = lambda x: {"name": x} chain = get_name | RunnableParallel({ "greet": (lambda d: f"你好,{d['name']}"), "shout": (lambda d: d["name"].upper()), }) 2 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. from langchain.prompts import PromptTemplate from langchain_openai import ChatOpenAI from langchain_core.runnables import RunnableLambda prompt = PromptTemplate.from_template("翻译成英文:{text}") llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0) post_process = RunnableLambda(lambda x: x.upper()) ChatOpenAI输出的是 chain = prompt | llm | post_process AIMessage对象,不是纯文 print(chain.invoke({"text": "你好"})) 本,中间需要 加 attrgetter("content") 提取 4
16. LazyLLM的数据流设计 import lazyllm from lazyllm import pipeline, parallel, bind, SentenceSplitter, Document, Retriever, Reranker, OnlineEmbeddingModule 1. 2. 3. prompt = (‘You will play the role of an AI Q&A assistant and complete a dialogue task. In this task, you need ‘ 'to provide your answer based on the given context and question.') documents = Document(dataset_path=“rag_master”, embed=lazyllm.TrainableModule("bge-large-zh-v1.5"), manager=False) documents.create_node_group(name=“sentences”, transform=SentenceSplitter, chunk_size=1024, chunk_overlap=100) 4. with pipeline() as ppl: with parallel().sum as ppl.prl: 5. prl.retriever1 = Retriever(documents, group_name=“sentences”, similarity="cosine", topk=3) 6. prl.retriever2 = Retriever(documents, “CoarseChunk”, "bm25_chinese", 0.003, topk=3) 7. ppl.reranker = Reranker(‘ModuleReranker‘, ...) 8. ppl.formatter = (lambda nodes, query: dict(context_str=nodes, query=query)) 9. 10. ppl.llm = lazyllm.TrainableModule("internlm2-chat-7b").prompt(lazyllm.ChatPrompter(prompt, extro_keys=["context_str"])) 11. web = lazyllm.WebModule(ppl)
17. 非顺序参数传递
18. 不同框架针对非顺序参数传递的策略 LangChain • • # 任何后续节点都能用x["user_id"] chain=RunnablePassthrough.assign(user_id=RunnableLambda( lambda x: x[“token”].split(“.”)[0])) | RunnableLambda(lambda x: {“greet”: f“你好, {x['user_id']}", **x}) print(chain.invoke({"token": "42.xxx"})) # => {'token': '42.xxx', 'user_id': '42', 'greet': '你好 ,42'} LangGraph • • 显示建模,专门用来定义有状态工作流 add_node(), set_entry_point() ... 朴素的想法: 做一个ArgSaver,手动存储结果到全局的位置,再在需要的位置取出
19. LazyLLM的非顺序参数传递策略 import lazyllm from lazyllm import (pipeline, parallel, bind, SentenceSplitter, Document, Retriever, Reranker, OnlineEmbeddingModule) 1 prompt = (‘You will play the role of an AI Q&A assistant and complete a dialogue task. In this task, you need ‘ 'to provide your answer based on the given context and question.') 2 documents = Document(dataset_path=“rag_master”, embed=lazyllm.TrainableModule("bge-large-zh-v1.5"), manager=False) 3 documents.create_node_group(name=“sentences”, transform=SentenceSplitter, chunk_size=1024, chunk_overlap=100) 4 with pipeline() as ppl: 5 with parallel().sum as ppl.prl: 6 prl.retriever1 = Retriever(documents, group_name=“sentences”, similarity=“cosine”, topk=3) 7 prl.retriever2 = Retriever(documents, “CoarseChunk”, "bm25_chinese", 0.003, topk=3) 8 ppl.reranker = bind(Reranker(‘ModuleReranker‘, ...), query=ppl.input) ppl.reranker = Reranker(‘ModuleReranker‘, ...) | bind(query=ppl.input) 9 ppl.formatter = bind(lambda nodes, query: dict(context_str=nodes, query=query), query=ppl.input) ppl.formatter = (lambda nodes, query: dict(context_str=nodes, query=query)) | bind(query=ppl.input) 10 11 ppl.llm = lazyllm.TrainableModule("internlm2-chat-7b").prompt(lazyllm.ChatPrompter(prompt, extro_keys=["context_str"])) web = lazyllm.WebModule(ppl) 只溯来处, 不问归程!
20. LazyLLM技术架构 1. 工作流编排 2. 上层模块 • • • • • MCP 客户端 智能体 召回器 工具管理 … 3. 模型 • • • 在线模型 本地模型 … 4. 基础组件 • • • • 训练框架 推理服务 MCP服务 …
21. LazyLLM支持的主流技术选型 统一调用 在线服务 统一部署 统一服务 LazyLLM 模型服务 数据库服务 本地模型 本地 数据库 在线 数据库 … Prompt 推理服务 微调服务 API服务 Mi ndI E
22. LazyLLM的组件注册机制 对于类,继承即注册 对于函数,注册即继承 >>> import lazyllm >>> import lazyllm >>> hasattr(lazyllm.deploy, 'a') False >>> lazyllm.module_register.new_group('mymodules') >>> @lazyllm.module_register('mymodules') >>> class A(lazyllm.LazyLLMDeployBase): ... def m(input): ... ... pass return f'module m get input: {input}' ... ... >>> hasattr(lazyllm.deploy, 'a') >>> lazyllm.mymodules.m()(1) True 'module m get input: 1' >>> m = lazyllm.mymodules.m() 功能扩展变得自动化、可发现 并进行统一管理 >>> m.evalset([1, 2, 3]) >>> m.eval().eval_result ['module m get input: 1', 'module m get input: 2', 'module m get input: 3']
23. LazyLLM的组件注册机制 注册训推框架 注册工具 注册数据库 注册Launcher
24. 总结:LazyLLM面向敏捷的核心设计 以数据流为核心的应用开发范 式 复杂应用一键部署 跨平台 LazyLLM支持Pipeline、Parallel、 Switch、If、Loop、Diverter、Warp、 Graph等数据流 LLM Embedding 文档管理服务 利用轻量网关实现分布式应用一键部 主服务 网关 GateWay 署,助力用户快速实现产品落地 Embedding 兼容多个操作系统 大模型 输 入 意图识别 文档管理 召回器 重排器 大模型 输 出 兼容多种IaaS平台 • 简洁代码设计 精细化模块设计,符合直觉的代码风格 帮你集中精力打造爆款产品 不同技术选型间的统一体验 对齐同一模块在不同技术选型上的使用 RAG场景的灵活适配 裸金属、K8S、Slurm、公有云 多Agent编排 • 内置封装FunctionCall、React、 体验,让您灵活试验各种基模型、训推 ReWOO、PlanAndSolve等多种 框架与数据库 Agent • 灵活调配不同组件进行功能拓展 • 简单的工具配置与使用
25. 01 引言 02 面向敏捷开发的 Agent 架构设计理念 03 实现“敏捷 + 稳定”的架构平衡 04 未来展望与生态共建
26. 企业级场景的核心诉求 并发体验 4. 配额与计费 多用户 1. 分层授权 2. 加密与安全 3. 审计与合规 生命周期管理 1. 版本管理 2. 异步任务队列 2. 热更新 3. 流式响应 3. 回滚机制 权限体系
27. 支持企业级服务的RAG++架构设计详解 每个模块对应 一到多个算法
28. 支持企业级服务的RAG++架构设计详解 • • • 算法可灵活替换 • • • 快速替换算法实现,降 低对系统其他部分的影 响 降低算法升级与回滚的 成本与风险 适配不同硬件或运行环 境的需求 团队协作高效顺畅 • 前端、后端、算法团队 独立测试, 精准验证 • 可独立并行开发 • 依赖关系减少,减少等 • 待和交付延迟 • 支持针对单个模块进行 客户定制化开发与交付 • 算法可单独进行功能与 性能测试 降低回归测试的范围与 时间 提高故障恢复的速度与 成功率 部署运维更加灵活 • • • • 组件可单独上线、下线 或替换 根据业务需求动态扩容 或缩容 降低运维变更对整体系 统的影响 更精准的计算和利用计 算与存储资源
29. 技术细节1:大规模并发的算法设计思路
30. 技术细节2:离线解析与在线检索分离策略 Algo for Document_1 1 DocumentProcessor 入库文档 Algo for Document_2 Algo for Document_3 部署文档 解析 服务 → url 入库文档 路径读取 或 接口上传 Document() store Retriever …… 2 Document1 (processer=…) Document2 (processer=… ) Document3 (processer=… ) Embedding reader 部署文档 召回 服务 → url 文档解析与信息检索依赖同一个 Document Node groups 3 Document(url=…) Document(url=…) 离线解析与在线检索分离部署
31. 技术细节2:离线解析与在线检索分离策略 1. docs = Document(dataset_path=None, name='algo1‘, embed=OnlineEmbeddingModule(), store_conf=MILVUS_STORE_CONF, doc_fields=CUSTOM_DOC_FIELDS, server=8525) 2. docs.add_reader("*.pdf", MagicPDFReader(magic_url=magic_pdf_url)) 3. docs.create_node_group(name='block’, display_name='段落切片‘, group_type=NodeGroupType.CHUNK transform=lambda x:x) 4. docs.activate_group("block") 5. doc.start() # 离线解析管理服务启动 1. doc_processor = DocumentProcessor(port=8523) 2. doc_processor.start() 1 # 算法注册至doc_processor 2 3. docs = Document(dataset_path=None, name='algo1‘, embed=OnlineEmbeddingModule(), store_conf=MILVUS_STORE_CONF, manager=DocumentProcessor(url=“http://0.0.0.0:8523”), doc_fields=CUSTOM_DOC_FIELDS, server=8525) 4. 5. docs.add_reader("*.pdf", MagicPDFReader(magic_url=magic_pdf_url)) 6. docs.create_node_group(name='block', display_name='段落切片‘, group_type=NodeGroupType.CHUNK, transform=lambda x:x) 7. docs.activate_group("block") 8. doc.start() 3 # 使用UrlDocument远程连接Document 9. doc = lazyllm.Document(url="http://10.119.24.212:8525") 1. r1 = lazyllm.Retriever(doc=doc, group_name="block", topk=25, embed_keys=["bge_m3_dense"]) 2. q = "工作环境温度为?" 3. nodes1 = r1(query=q)
32. 技术细节3:多会话的算法架构设计思路 设计目标 • 支持多用户/多会话并发运 • 保证各会话运行空间独立 • 支持参数透传给某个模块 • 提供灵活的配置存储方式 块。 • 支持跨进程调用时的会话 上下文传递 • 支持流式输出 独立运行空间:每个 Session 拥有相对隔离的 资源与配置。 • (内存 / 数据库) • 配置中心管理用户配置:通过配置中心维护会 • 话 ID和用户配置,并实现参数透传到某一模 行 • 优势 核心思路 跨服务上下文传递:如果是内存型配置中心, 则将 Session 配置信息打包进请求头。 • 通过消息队列流式输出:通过基于文件系统的 消息队列(Sqlite,Redis或DB)实现中间结 果的流式输出。 灵活:可切换配置中心的 存储实现(内存/数据库) • 可扩展:支持跨进程和分 布式部署 • 低耦合:配置中心与算法 逻辑分离
33. 技术细节3:多会话的算法架构设计思路 LLM 文档管理服务 Embedding 主服务 网关 GateWay 配置中心 Session 1 Session 2 登记Session ID 写入参数 输 入 • • • • 内存 Sqlite Redis …… Embedding 大模型 文档管理 意图识别 召回器 重排器 消息队列 Session 1 Session 2 大模型 输 出
34. 技术细节4:权限的算法架构设计思路 上传文档 添加文档信息 和知识库标签 用户在前端 添加文档权限 和知识库标签 后端 • 知识库(文档)管理 • 权限管理 切片及其 附加信息 算法 • 切片和转换 • 向量化 • 企业运营中权限需求复杂,目前通用的做法是: • 文档上传时绑定预定义标签,包括部门信息,密级等 • 鉴权逻辑由后端统一管理,后端进行权限鉴定和标签添加。 数据库 • 存储文档和附 加信息 • 存储向量
35. 技术细节4:权限的算法架构设计思路 上传文档 添加文档信息 和知识库标签 离线 解析 用户在前端 添加文档权限 和知识库标签 • 算法 后端 提出问题 在线 召回 切片及其 附加信息 补充用户信息 和权限信息 db_id: xxx department: xxx permission: [1, 2] 企业运营中权限需求复杂,目前通用的做法是: • 文档上传时绑定预定义标签,包括部门信息,密级等 • 算法侧根据标签信息进行无状态的检索 • 鉴权逻辑由后端统一管理,后端进行权限鉴定和标签添加。 数据库
36. 技术细节5:知识库存储的算法架构设计 - store_conf 参数一键配置 - 内存/持久化 灵活选择 - 新增类型轻量化适配 class LazyLLMStoreBase(ABC): capability: StoreCapability need_embedding: bool = True supports_index_registration: bool = False @abstractmethod def connect(self, *args, **kwargs) @abstractmethod def upsert(self, collection_name: str, data: List[dict]) -> bool @abstractmethod def delete(self, collection_name: str, criteria: dict, **kwargs) -> bool LazyLLM 双层Store架构设计 @abstractmethod def get(self, collection_name: str, criteria: dict, **kwargs) -> List[dict] @abstractmethod def search(self, collection_name: str, query: Optional[str] = None, query_embedding: Optional[Union[dict, List[float]]] = None, topk: int = 10, filters: Optional[Dict[str, Union[str, int, List, Set]]] = None, embed_key: Optional[str] = None, **kwargs) -> List[dict]
37. 技术细节5:知识库存储的算法架构设计 store_config = { "vector_store": { "type": "milvus", "kwargs": { "uri": os.getenv("MILVUS_URI", "http://127.0.0.1:19530"), "index_kwargs":{ 'index_type': 'FLAT', 'metric_type': 'COSINE' } } }, "segment_store":{ 'type': 'opensearch', 'kwargs': { 'uris': os.getenv("OPENSEARCH_URI", "https://127.0.0.1:9200"), 'client_kwargs': { "http_compress": True, "use_ssl": True, "verify_certs": False, "user": os.getenv("OPENSEARCH_USER", "admin"), "password": os.getenv("OPENSEARCH_PASSWORD", "demo@123"), } } } } document = lazyllm.Document(dataset_path="./datasets", ..., store_conf=store_config) 1. 支持同时定义切片与向量的存储类型 2. 每个配置中,仅需定义type与kwargs - type: 存储类型 - kwargs: 存储 Client 配置信息(路径、鉴权、索引 配置等),与原生配置方式差异很小,迁移学习成本低 3. 使用时仅需把配置参数传入Document
38. 01 引言 02 面向敏捷开发的 Agent 架构设计理念 03 实现“敏捷 + 稳定”的架构平衡 04 未来展望与生态共建
39. 案例讲解:多模态RAG落地实践
40. 案例讲解:可视化应用编排平台
41. 案例讲解:可视化应用编排平台 灵活可配的知识库,精准掌控准确率 • 支持自定义多路召回策略,提升检索准确率 • 相比Dify等框架的固定知识库策略,用户可自主 优化知识库效果 离线解析:多维度节点组配置 • 预置节点组:支持段落、句子、关键词、摘要等 检索方式,可勾选并配置向量化 • 自定义节点组:灵活定义文本切分(如段落/句 子)或转换方式(如信息提取) • 每个节点组可独立选择向量模型,不配置则跳过 向量化 在线检索:智能策略优化生成效果 • 支持“小块检索,大块生成”策略(如用摘要检 索,返回粗粒度原文) • 通过倒排索引关联检索结果与原文,提升大模型 输入质量 原型搭建 → 数据回流 → 迭代优化 可视化编排与强校验机制 • 连线参数实时检查:错误配置(如类型不匹配) 自动报错(绿色对号提示) 23 13 • 模块化设计降低出错率,如重排器输出校验、大 模型输入校验 画布控件 资源控件 无限 画布嵌套 协同 多人同时编辑
42. 开源协同,共同打造 Agent开发生态 LazyLLM 是一款构建多Agent大模型应用的开发框架,协 助开发者用极低的成本构建复杂的AI应用,并可以持续的 迭代优化效果。基于LazyLLM的AI应用构建流程是: 原型搭建 → 数据回流 → 迭代优化 用户可以先基于LazyLLM快速跑通应用的原型,再结合场 景任务数据进行bad-case分析,然后对应用中的关键环节 进行算法迭代和模型微调,进而逐步提升整个应用的效 果 。 目前,LazyLLM 已经在GitHub上开源。 ➢ 项目地址:https://github.com/LazyAGI/LazyLLM ➢ 项目文档:docs.lazyllm.ai 扫码加群,学习硬核RAG教程 和LazyLLM的开发者0距离交流
43.
44.
45. Click to add text Click to add text Click to add text Click to add text
46. Amet ut stet nulla no ea takimata aliquip aliquyam et. Lorem no autem minim velit tincidunt rebum aliquam. Takimata sit et magna est dolore lorem invidunt erat stet. Diam consequat sit consequat sanctus takimata aliquyam.
47. Click to add text Click to add text Click to add text Click to add text
48.
49. 二级标题 苹方字体 18号字 中黑体 蓝色
50. 二级标题 18号字 苹方字体 中黑体 二级标题 18号字 苹方字体 中黑体

Home - Wiki
Copyright © 2011-2025 iteam. Current version is 2.146.0. UTC+08:00, 2025-10-22 16:55
浙ICP备14020137号-1 $Map of visitor$