写点什么

万字干货分享最新 AI 指南:用 LazyLLM 把 Deep Research 做成赛博屠龙刀!

  • 2025-03-19
    北京
  • 本文字数:25547 字

    阅读完需:约 84 分钟

最近 OpenAI、Jina、perplexity 等各大厂商纷纷推出了自家的 Deep Research 应用。Deep research 是什么?为什么这个应用引起了大家的关注?能不能使用 lazyllm 搭建一个属于自己的 deep research?带着这些问题,本文将对 OpenAI 发布的 Deep Research 进行简要介绍,并依托于 lazyllm 强大的能力,使用极少代码量实现一个自己的 deep research。

什么是 Deep Research?

Deep Research 是 OpenAI 在 2025.2 月发布的一种新型的代理(Agent)能力,其被集成在 ChatGPT 中,能够通过大模型的推理能力和工具调用能力,自主从网络检索、整合信息,同时支持读取用户提供的文件,并通过编写和执行 Python 代码来分析数据,通过深度分析数据,对用户的问题进行深度解答,最终输出专业的长篇报告。

随着现有模型能力的增强,大模型应用逐渐朝着 AI Agent 方向发展,Agentic-RAG 也迅速成为大模型应用落地的一个主要方向,其相比于传统意义上的 RAG(Naive RAG or Advanced RAG),Agentic rag 能够分析用户查询的复杂语义,利用提供的工具集完成复杂多跳的查询,随后阅读查询内容并汇总后,最终回答用户的问题。agentic rag 无论从回答深度还是广度,相比之前都有着大幅的提高。


Deep Research 本质上是 RAG(检索增强生成)的衍生物,其查询范围不再局限于本地的知识库,同时具备了网页查询、阅读的能力。同时随着推理大模型技术的发展,其性能相比之前的 agentic rag 更是跨越至一个新的 level。DeepResearch 的出现,能够很大程度节省专业人士查询资料的时间,与大多数 RAG 系统试图一步到位地回答问题不同,Deep Research 的核心在于其循环推理机制,通过这种机制,它会持续搜索信息、阅读相关来源并进行推理,直到找到答案或耗尽 token 预算。

以下是使用 OpenAI 的 Deep Research 调研 lazyllm 应用场景的全过程:应用首先会分析用户的问题,随之进行反问,以更好的理解用户意图。随后应用经过分析,会调用自身的搜素工具,从问题的各个角度进行信息搜集。最后综合这些信息,输出专业的长篇报告。


ChatGPT DeepResearch 入口



提问-反问-搜索示意图



信息搜集完毕,生成专业报告

从使用体验上来说,deep research 给人一种非常靠谱的感觉,用户能够实时观察其是如何自主思考并查询信息的,这一过程往往需要花费 5~10 分钟,更有甚者可以持续半个小时!这一过程的展现给用户提供了极强的”情绪价值“(与 deepseek 展示思维链的作用相似):安排任务、等待输出专业的长篇报告,这不是老板才有的待遇???拥有 Deep Research,你就相当于拥有了一位集高效搜索、缜密推理、专业写作为一体的”赛博员工“,助你成功当上赛博老板。

Deep Research 强大吗?强大。但通过观察其输出的内容,不难发现,大模型一直以来的通病——“幻觉”仍然存在,deepresearch 虽然利用检索增强生成技术已经尽可能降低了模型幻觉的情况,但其生成的报告中仍然存在一些与事实不符的信息。例如在其生成的内容当中有一段”上海银行数字人客服“员工”:上海银行引入两位 AI 数字员工(由商汤 LazyLLM 方案支持),在手机 App 等渠道为客户提供交互式服务。“,文字后面信誓旦旦的附上了参考链接(https://www.sensetime.com/cn/case-detail?categoryId=51134352#:~:text=%E8%90%BD%E5%9C%B0%E6%88%90%E6%9E%9C ),打开进去一看,网页中只是提及了商汤科技与上海银行合作,并未提及使用 LazyLLM 支持。


对应网站中并未提及相关信息

虽然仍有幻觉,但这并不妨碍 DeepReseach 成为新一代 AI Agent 应用中的佼佼者(拜托,已经很强了~~~)。这么有趣的应用,少了 LazyLLM 怎么行?本着”万物皆可 Lazy“的原则,下面我们从技术层面把 Deep Research 的实现框架进行拆解,并尝试使用 LazyLLM 复现!GoGoGo!

Deep Research 框架介绍

首先我们来构建 Deep Research 这个应用的框架。通过对 Deep Research 的试用可以发现,应用主要分为三个阶段:意图理解与规划、信息搜索与汇总、专业报告生成。框架示意图如下:



deep research 框架示意图

1.意图理解与规划:在这一阶段,Deep Research 会根据用户的输入分析并理解用户的意图,期间可能会存在通过反问用户获取更精确信息的过程。待 DeepResearch 认为获取到足够信息后,便会进入下一阶段。(需要指出的是,OpenAI 的 deep research 并未在这一阶段结束后显式的给出写作大纲之类的东西。但为了能生成专业的长篇报告,以及方便指导后续的信息搜索,这里我们认为生成有指导意义的写作大纲是有必要的。类似 Plan-and-Solve 的思路,先充分规划,再有效执行)

2.信息搜索与汇总:在这一阶段,agent 会依照上一阶段的理解,自主得从互联网上搜索并总结有效信息(其中包含了网页搜索、网页浏览、文件阅读等步骤),这一阶段其实是 ReactAgent 的设计思路,给 agent 输入 query,agent 反复利用所提供的工具自主搜索网页、阅读网页、总结信息并反思,直到任务完成。

3.上一阶段结束后,deepresearch 已经具备了完成写作的所有知识,结合这些知识,最终生成一个专业的长篇报告。


使用 LazyLLM 实现 Deep Research

准备阶段

根据第二部分的框架可知,deep research 的重要组成部分有三:强大的大模型(LLM)、多样的工具(Tools)以及智能体组件(Agents),巧了么这不,lazyllm 全都有——现成的 llm 模块(TrainableModule/OnlineChatModule)、工具注册模块(fc_register)和智能体模块(ReactAgent/PlanAndSolveAgent/ReWOOAgent),妙~~啊~~。本次为了实现“快速复现”的目标,咱们一切从简,看看实现这个应用到底需要几行代码。

首先安装一下 lazyllm 的环境。


pip install lazyllmlazyllm install standard
复制代码


大模型(LLM)

然后我们从大模型开始吧,本次我们选择“线上调用模型”的方式,借助通义千问的模型 API 实现模型的调用功能。假设你已经拥有了自己的 api-key(如果没有,请访问https://www.aliyun.com/product/bailian 获取,并做好储值工作),随后将 api key 加入至环境变量中:


export LAZYLLM_QWEN_API_KEY=<your own api key>
复制代码


随后即可使用 lazyllm 创建大模型模块聊天啦~


>>> from lazyllm import OnlineChatModule>>> llm = OnlineChatModule(source="qwen", model="qwen-plus", stream=False)>>> llm("hello")'Hello! How can I assist you today?'
复制代码


工具集(Tools)

巧妇难为无米之炊,To great LazyLLM, It's also very hard to run deep research without powerful tools. 通过了解 AI Agent 的工作原理可知,其本质上是为大模型提供多种多样的工具,引导大模型主动使用正确的工具完成特定任务,最终实现目标。因此,要实现 deep research,一系列好用的工具集是非常必要的。

观察 OpenAI 的 DeepResearch 以及其他已有应用可以发现,此类应用需要网络搜索工具、网页操作工具(浏览、解析文件、滑动页面等)、本地知识库检索工具(其实就是 RAG,软广:https://mp.weixin.qq.com/s/9-wlmpSbZU40YctoiP2ugQ?mpshare=1&scene=1&srcid=0312JOH9wNTxyWzUUvwWPb7r&sharer_shareinfo=20291331b41834b5fdc559ca94396331&sharer_shareinfo_first=20291331b41834b5fdc559ca94396331#rd )以及一些针对特定场景设计的小工具。此处我们只关注网络搜索、网页阅读以及一些基础的必要工具(比如反问用户以理解更精确的意图)。

工具其实就是函数,我们创建若干函数,最后使用 lazyllm 的注册机制将其注册为工具。举例说明,下面是使用 lazyllm 提供的谷歌搜索引擎组件编写的网络搜索工具 web_search(注:使用 GoogleSearch 需要自行注册账号并创建引擎,同样需要 api key,具体参考https://programmablesearchengine.google.com/about/ ):

import osimport json
from lazyllm.tools import fc_registerfrom lazyllm.tools.tools.google_search import GoogleSearchfrom lazyllm import LOGfrom dotenv import load_dotenvload_dotenv()
search_engine = GoogleSearch(os.getenv('GOOGLE_SEARCH_API_KEY'), os.getenv('GOOGLE_SEARCH_CX'))
@fc_register("tool")def web_search(query: str) -> str: """ 使用google search搜索与query相关的网页,搜索结果包含每个搜索结果的标题、简介和链接。
Args: query (str): The search query string. """ LOG.info(f"[tool - Web Search] Searching the web for query '{query}'...") response = search_engine(query=query, date_restrict='m1') if response.get('status_code') != 200: return f"Error: Received status code {response.status_code}" search_res = json.loads(response.get('content')) res_str = "" cnt = 0 for item in search_res.get('items'): if cnt >= 5: break link = item.get("link") title = item.get("title") snippet = item.get("snippet") res_str += f"Title: {title}\nSnippet: {snippet[:50]}...\nURL: {link}\n\n" cnt += 1 return res_str
复制代码

需要注意的是,使用 lazyllm 创建的工具,必须使用 @fc_register("tool")进行“注册”,同时需要在对应函数下方加入必要的注释,解释工具的用途以及所需要的入参信息。我们按照同样的方式创建网页访问(visit_url)、反问用户(get_more_info_from_user)的工具:


@fc_register("tool")def visit_url(url: str, encoding: str = None) -> str:    """    使用这个工具来浏览一个网页的详细内容,并返回解析后的文本内容。
Args: url (str): The URL of the webpage to visit. encoding (str, optional): The encoding of the webpage. If not specified, the encoding will be automatically detected. """ import requests from bs4 import BeautifulSoup from readability import Document headers = { "User-Agent": "Mozilla/5.0 (compatible; my-bot/1.0)" }
try: response = requests.get(url, headers=headers, timeout=10) except Exception as e: return f"Error: Failed to fetch URL. Exception: {e}"
if response.status_code != 200: return f"Error: Received status code {response.status_code}"
if encoding: response.encoding = encoding else: response.encoding = response.apparent_encoding or response.encoding
doc = Document(response.text) main_content = doc.summary() main_text = BeautifulSoup(main_content, "html.parser").get_text(separator="\n", strip=True)
return main_text if main_text else "Error: Failed to extract main content."
@fc_register("tool")def get_more_info_from_user(prompt: str) -> str: """ 该工具用于反问用户,以获取更多有效信息。当你认为有必要主动询问用户时,使用这个工具。
Args: prompt (str): Markdown formatted prompt which contains your understanding of the task, the current state, and a series of questions you want to ask to the user. """ LOG.info("Now I think I need more information from you...") LOG.info(prompt) res = input("Please provide more information: ") return res
复制代码


这里我们使用了 readability 和 beautifulsoup 实现了较为简单的解析网页功能,后续的调优中,该部分可以进行一定的优化。

智能体(Agent)

有了工具后,我们便可以尝试使用 lazyllm 自带的 agent 模块进行一些简单的功能了。本次的 deepresearch 复现过程中,我们主要实现两种 agent:planner agent(用于第一阶段的意图识别与规划大纲)和 searcher agent(用于第二阶段的信息检索与总结)

lazyllm 提供了一些主流的 agent 模块供大家使用(参考https://docs.lazyllm.ai/zh-cn/latest/API%20Reference/tools/ ):

ReactAgent:React agent 主要包括以下的流程:

  1. 思考(Thought): Agent 在收到 query 后,它会先给出下一步要采取的行动;

  2. 行动(Action): Agent 会采取并执行一个行动,比如使用工具(或者继续思考);

  3. 观察(Observation): Agent 观察行动的反馈,比如工具的输出;

agent 按照“思考-行动-观察-反思-...”的流程执行任务,直至任务完成;



ReactAgent 工作示意图

PlanAndSolveAgent:由两个组件组成,首先,由 planner 将整个任务分解为更小的子任务,然后由 solver 根据计划执行这些子任务,主要包括以下的流程:

  1. 计划(Plan):Agent 在收到 query 后,它会将这个任务分解为更小的子任务;

  2. 行动(Action): Agent 对当前的子任务进行执行;

  3. 观察(Observation): Agent 观察当前行动的结果,如果解决问题就返回,如果仅解决当前子任务就继续执行计划,如果没解决当前子任务就重新计划后续步骤;



PlanandSolveAgent 工作示意图

ReWOOAgent:包含三个部分:Planner、Worker 和 Solver。其中,Planner 使用可预见推理能力为复杂任务创建解决方案蓝图;Worker 通过工具调用来与环境交互,并将实际证据或观察结果填充到指令中;Solver 处理所有计划和证据以制定原始任务或问题的解决方案。ReWOO 的主要流程如下:

  1. 计划(Plan):Agent 在收到 query 后,它会生成一个计划表,计划表中包含了这个任务分解的更小子任务,子任务间的执行结果用占位符表示;

  2. 行动(Action): Agent 对每个子任务依次进行执行(调用工具),将结果都填入计划表的占位符中;

  3. 解决(Solve): Agent 观察所有行动的反馈,将结果 response 返回给用户;



ReWOOAgent 工作示意图

根据实际需求,仅使用机制最简单的 ReactAgent,即可满足两种 Agent 的创建。我们首先实现具备网络搜索及网页浏览的 Searcher Agent,这里 max_retries=20,代表如果 agent 在执行 20 次动作之后还没有完成任务,则自动退出,以避免陷入死循环。


from lazyllm.tools.agent import ReactAgent# tools的定义和实现在此忽略,详情在前面searcher_agent = ReactAgent(llm=OnlineChatModule(source="qwen", model="qwen-plus", stream=False), tools=["web_search", "visit_url"], max_retries=20, return_trace=True)
复制代码


一行代码就可以把 agent 创建出来,是不是很 easy?接下来测试一下效果:


>>> searcher_agent = ReactAgent(llm=llm, tools=["web_search", "visit_url"])>>> searcher_agent("what is lazyllm?")471166: 2025-03-12 19:58:31 lazyllm INFO: (__main__:9) [tool - Web Search] Searching the web for query 'lazyllm'...471166: 2025-03-12 19:58:40 lazyllm INFO: (__main__:11) [tool - Visit URL] Visiting URL 'https://https://www.aibase.com/news/15757'...'LazyLLM is an open-source, low-code development platform introduced by SenseTime at the 2025 Global Developer Pioneer Conference. It aims to simplify and accelerate the process of building AI applications, allowing developers to create complex and customized multi-agent large model applications with as little as 10 lines of code. This tool lowers the barrier for developing AI applications, making it accessible even to those without extensive coding expertise.\n\nFor more information, you can visit the official announcement [here](https://www.aibase.com/news/15757).'
复制代码


效果还可以哈,按照相同的套路,我们把 planner agent 也实现了,其实只是加上一个反问的工具:

planner_agent = ReactAgent(        llm=OnlineChatModule(source="qwen", model="qwen-plus", stream=False),        tools=["get_more_info_from_user", "web_search", "visit_url"],        max_retries=10,        return_trace=True    )
复制代码

经过测试后,我们发现 ReactAgent 实现“反思、搜索、阅读”这一流程很简单,但是让它规划一个大纲却无从下手。

查看 ReactAgent 的源代码可以发现,agent 组件中内置了默认的提示词,这个提示词只说明了“要完成任务”,但没有说明具体该给出什么样子的输出。于是我们决定继承 ReactAgent,对其进行改造,使其能够接受我们自己写的提示词!我们创建 class CustomReactAgent:


from typing import Listfrom lazyllm.tools.agent import ReactAgentfrom lazyllm.tools.agent.functionCall import FunctionCallfrom lazyllm.module import ModuleBasefrom lazyllm import loopclass CustomReactAgent(ReactAgent):    """    继承自lazyllm.tools.agent.ReactAgent    添加自定义提示词、agent流式输出    """    #  继承的目的只是为了自定义提示词。。。    def __init__(self, llm, tools: List[str], custom_prompt: str, max_retries: int = 5, return_trace: bool = False, stream: bool = False):        # 先调用父类的基础检查和属性设置(如果有必要可以直接调用 ModuleBase.__init__)        ModuleBase.__init__(self, return_trace=return_trace)        self._max_retries = max_retries        assert llm and tools, "llm and tools cannot be empty."        # 使用自定义的 prompt 来构造 _agent        self._agent = loop(            FunctionCall(llm, tools, _prompt=custom_prompt, return_trace=return_trace, stream=stream),            stop_condition=lambda x: isinstance(x, str),            count=self._max_retries        )
复制代码


使用以上自定义 agent 类,结合我们自己设计的 planner、searcher 提示词,agent 就能按照我们的要求完成意图理解、生成大纲以及信息搜集等定制化的工作啦~

接下来让我们复测一下 planner agent 的效果:


>>> planner_agent = CustomReactAgent(...     llm=OnlineChatModule(source="qwen", model="qwen-plus", stream=False),...     tools=["get_more_info_from_user", "web_search", "visit_url"],...     custom_prompt=TOC_PLAN_INSTRUCTION,...     max_retries=10,...     return_trace=True... )>>> planner_agent("写一篇关于lazyllm的调研")471166: 2025-03-13 10:22:28 lazyllm INFO: (__main__:9) Now I think I need more information from you...471166: 2025-03-13 10:22:28 lazyllm INFO: (__main__:10) 您好!为了更好地完成这篇关于LazyLLM的调研,请您提供以下信息:1. LazyLLM是指什么?它是一种技术、一个项目还是一种特定的算法或模型?2. 是否有具体的背景或者使用场景需要涵盖在报告中?3. 是否有任何特别关注的方面(例如性能、应用案例、优缺点等)?4. 报告的目标读者是谁?这将帮助我们调整内容深度和技术术语的使用。
请提供更多细节,以便我们能更准确地满足您的需求。感谢您的配合!Please provide more information: lazyllm是一个大模型应用框架;我想主要了解一下他的优缺点和应用场景;目标读者是大模型开发爱好者471166: 2025-03-13 10:23:28 lazyllm INFO: (__main__:9) [tool - Web Search] Searching the web for query 'LazyLLM 大模型应用框架 优缺点 应用场景'...'Thought: 通过网络搜索,我已经找到了一些关于LazyLLM的信息。根据这些信息,LazyLLM是由商汤科技推出的一个开源、低代码的大模型应用开发框架,它能帮助开发者以低至10行左右代码轻松构建复杂、定制化的多Agent大模型应用。现在我将基于这些信息生成写作大纲。\n[\n {\n "title": "# LazyLLM调研报告",\n "desc": "本报告旨在对LazyLLM进行深入研究,分析其优缺点,并探讨其应用场景。",\n "need_know": "了解LazyLLM的基本概念、背景和目标读者。"\n },\n {\n "title": "## LazyLLM简介",\n "desc": "介绍LazyLLM的定义、特点以及由哪家公司推出的背景。",\n "need_know": "收集有关LazyLLM的具体信息,如其功能、使用方法等。"\n },\n {\n "title": "### LazyLLM的优势",\n "desc": "详细描述LazyLLM相比其他类似工具的优点,例如简化开发过程、降低进入门槛等。",\n "need_know": "找出LazyLLM相对于其他工具的独特之处。"\n },\n {\n "title": "### LazyLLM的劣势",\n "desc": "指出LazyLLM可能存在的不足之处,如适用范围有限或某些特定情况下的性能问题。",\n "need_know": "调查并总结LazyLLM在实际应用中遇到的问题。"\n },\n {\n "title": "## 应用场景",\n "desc": "列举LazyLLM可以应用于哪些领域,如自然语言处理、计算机视觉等。",\n "need_know": "寻找LazyLLM成功案例及其具体应用实例。"\n },\n {\n "title": "## 总结与展望",\n "desc": "对LazyLLM进行全面评价,并对其未来发展提出建议。",\n "need_know": "根据现有资料预测LazyLLM的发展趋势。"\n }\n]'
复制代码


可以看到,起初 agent 会根据自己的理解,反问用户以获取更多消息,这有助于它进行精确的意图识别。随后 agent 进行了网络搜索,以更好的理解任务主题,随后 agent 结合搜索信息,给出了较为完整的报告大纲,这个大纲既可以指导最后的写作过程,同时其中的“need_know”更是可以引导 searcher_agent 执行更精确的信息搜集。

实现完整的 Deep Research

有了大模型、工具集以及组装完成的智能体后,接下来到了关键时刻——组装 DeepResearch。了解 lazyllm 的小伙伴们肯定知道,得益于强大而精致的 Flow 组件,在 lazyllm 的世界中,简单几行代码就可以组装得到一个强大的应用。接下来我们就使用 lazyllm 的 flow 组件组装我们自己的 deepresearch,完整的代码如下(其中调用了一些功能函数,详情见附件二):


# 创建deepresearch pipelinedef create_deep_research_pipeline():    # 单次搜索pipeline    with lazyllm.pipeline() as s_ppl:        s_ppl.gen_query = lambda x: f"{x.get('desc')}\n{x.get('need_know')}"  # 从部分大纲组装query        s_ppl.search_agent = create_search_agent_and_run  # 执行searcher agent        s_ppl.gen_output = (lambda x, origin_dict: {**origin_dict, "search_info": x}) | lazyllm.bind(origin_dict=s_ppl.input)  # 搜集信息嵌入写作大纲        with lazyllm.pipeline() as dr_ppl:        dr_ppl.planner_ins = StreamResponse(prefix="[Planner] Receive instruction:", prefix_color=Color.red, color=Color.magenta, stream=True)  # 显示输入        dr_ppl.planner = create_plan_agent()    # planner 执行意图识别与大纲规划        dr_ppl.planner_out = StreamResponse(prefix="[Planner] ToC Completed:", prefix_color=Color.red, color=Color.magenta, stream=True)  #  显示planner agent输出        dr_ppl.toc_parser = table_of_content_parser  # 提取写作大纲        dr_ppl.searcher = lazyllm.warp(lambda x: s_ppl(x)).aslist  # 使用warp并行调度searcher agent搜集信息        dr_ppl.search_parser = lambda x: json.dumps(            [                {"title": item.get("title"),                 "desc": item.get("desc"),                 "search_info": item.get("search_info")} for item in x            ], ensure_ascii=False            )  # 提取大纲中写作所需信息        dr_ppl.gen_report = OnlineChatModule(source="qwen", model="qwen-plus").prompt(            lazyllm.ChatPrompter(instruction=REPORT_INSTRUCTION)        )  # 最终生成报告    return dr_ppl
复制代码


注:使用 lazyllm 提供的 StreamResponse 可以让输出内容变得绚丽多彩哦~

代码解读:

  1. 使用 lazyllm.pipeline 分别创建 searcher_agent 信息搜集管道和 deepresearch 主流程管道;

  2. 主流程管道中,首先将用户 query 输入给 planner_agent,智能体自动执行意图识别与信息搜集,并生成报告大纲;

  3. 随后 planner 的输出内容经过 toc_parser 处理,以提取 json 格式的完整大纲;

  4. 利用 lazyllm.warp,将大纲列表中各部分以并行的方式输入至信息搜索管道,以提高整个流程的执行效率,同时设置 warp 流程结束后同样以列表的形式输出给下一节点;

  5. 在信息搜索 pipeline 中,首先将输入的部分大纲中的有效内容提取,以生成 searcher 所需要的有效指令,随后创建 searcher agent 并执行任务,最后将 searcher agent 的输出作为新的字段(search info)加入到原部分大纲中;

  6. 待所有搜索任务完成后,整理并提取有效字段(标题、描述、搜索信息)形成最终的写作大纲,并指导大模型最终生成专业的长篇报告。

数据流示意图:


最后是运行 deep research 的入口代码,其中 lazyllm.FileSystemQueue().dequeue()用于获取过程中的输出内容:


import asynciofrom dotenv import load_dotenv
load_dotenv()
import lazyllmfrom core.flow.deep_research import create_deep_research_pipeline

async def main(): deep_research_ppl = create_deep_research_pipeline() question = input("Lazy Deep Research Demo...\nPlease enter your question:\n") all_process = "" lazyllm.globals._init_sid() with lazyllm.ThreadPoolExecutor(1) as executor: future = executor.submit(deep_research_ppl, question) while True: if value := lazyllm.FileSystemQueue().dequeue(): print("".join(value)) all_process += "".join(value) elif future.done(): break else: await asyncio.sleep(0.3) log_filename = f"{question}_all_process.log" with open(log_filename, "w", encoding="utf-8") as f: f.write(all_process) print(f"结果已保存至 {log_filename}")
if __name__ == "__main__": asyncio.run(main())
复制代码


完成以上研发,一个崭新的,基于 lazyllm 的 deepresearch 复现便新鲜出炉了!虽然工具集还有很大的进步空间,但已经能够实现简单的搜索、访问页面和收集信息了。下面让我们来测试一下基于 lazyllm 的 deepresearch 的完整效果。

效果展示

我们询问“如何熟练掌握 lazyllm”,详细输出如下:

python -m core.mainLazy Deep Research Demo...Please enter your question:如何熟练掌握lazyllm714495: 2025-03-13 12:55:07 lazyllm INFO: (core.tools.plan_tools:13) Now I think I need more information from you...714495: 2025-03-13 12:55:07 lazyllm INFO: (core.tools.plan_tools:14) 为了帮助您更好地了解如何熟练掌握lazyllm,我需要一些额外的信息:- 您提到的lazyllm具体是指什么?它是一种技术、工具、库还是其他东西?- 您是希望从零开始学习lazyllm,还是已经有一定的基础并希望进一步深入?- 您希望通过掌握lazyllm达到什么样的目标或解决什么问题?Please provide more information: lazyllm是一个大模型应用框架;希望能够掌握落地应用方法714495: 2025-03-13 12:55:18 lazyllm INFO: (core.tools.web_tools:21) [tool - Web Search] Searching the web for query 'lazyllm 大模型应用框架'...714495: 2025-03-13 12:55:25 lazyllm INFO: (core.tools.web_tools:46) [tool - Visit URL] Visiting URL 'https://www.qbitai.com/2025/02/257657.html'...714495: 2025-03-13 12:55:32 lazyllm INFO: (core.tools.web_tools:46) [tool - Visit URL] Visiting URL 'https://finance.sina.com.cn/roll/2025-02-24/doc-inemqprn0854836.shtml'...714495: 2025-03-13 12:56:25 lazyllm INFO: (core.tools.utils:29) 报告写作大纲生成成功:[{'title': '# 如何熟练掌握LazyLLM', 'desc': '本报告将详细介绍如何熟练掌握LazyLLM,包括其基本概念、使用方法和应用场景等内容。', 'need_know': '了解用户对LazyLLM的需求和期望,以便更好地指导他们学习和使用。'}, {'title': '## LazyLLM简介', 'desc': '介绍LazyLLM的基本情况,如其定义、特点和发展历程等。', 'need_know': 'LazyLLM的具体定义、特点和发展历程。'}, {'title': '### LazyLLM的功能与优势', 'desc': '详细描述LazyLLM的功能和优势,如低代码、快速部署和支持多种数据流抽象等。', 'need_know': 'LazyLLM的所有功能及其具体实现方式;与其他类似工具相比的优势。'}, {'title': '## LazyLLM的安装与配置', 'desc': '讲解如何安装和配置LazyLLM,确保用户能够在自己的环境中顺利运行该框架。', 'need_know': 'LazyLLM的安装步骤和配置要求;可能遇到的问题及解决方案。'}, {'title': '### 环境准备', 'desc': '列出安装LazyLLM前需要准备的工作,如环境搭建、依赖项安装等。', 'need_know': '安装LazyLLM所需的系统环境和其他依赖项。'}, {'title': '### 安装过程', 'desc': '提供详细的安装步骤,让用户可以按照指示完成安装。', 'need_know': '具体的安装命令和操作流程;可能出现的错误提示及解决办法。'}, {'title': '## LazyLLM的应用场景', 'desc': '探讨LazyLLM在实际项目中的应用场景,帮助用户理解其适用范围。', 'need_know': 'LazyLLM已有的成功案例;不同领域的潜在应用场景。'}, {'title': '### 成功案例分析', 'desc': '选取几个典型的成功案例进行分析,展示LazyLLM的实际效果。', 'need_know': '具体的成功案例及其实施过程;这些案例带来的收益或改进。'}, {'title': '### 潜在应用场景', 'desc': '预测LazyLLM在未来可能的应用领域,激发用户的创造力。', 'need_know': '当前市场上对于此类工具的需求趋势;未被发掘但具有潜力的应用方向。'}, {'title': '## LazyLLM的最佳实践', 'desc': '分享一些使用LazyLLM时的最佳实践,提高用户的开发效率。', 'need_know': '使用LazyLLM时的经验总结;常见的误区和避免方法。'}, {'title': '### 开发技巧', 'desc': '介绍一些有助于提高开发效率的小技巧,如代码优化、调试技巧等。', 'need_know': '使用LazyLLM编写高效代码的方法;常见问题的排查技巧。'}, {'title': '### 性能调优', 'desc': '讲解如何对基于LazyLLM的应用程序进行性能调优,以获得更好的运行效果。', 'need_know': '影响应用程序性能的因素;具体的调优策略和技术手段。'}, {'title': '# 总结与展望', 'desc': '对全文进行总结,并对未来的发展趋势做出预测。', 'need_know': '回顾本文的重点内容;根据现有技术和市场需求预测LazyLLM未来的发展方向。'}]714495: 2025-03-13 12:56:29 lazyllm INFO: (core.tools.web_tools:21) [tool - Web Search] Searching the web for query 'LazyLLM 定义 特点 发展历程'...714495: 2025-03-13 12:56:29 lazyllm INFO: (core.tools.web_tools:21) [tool - Web Search] Searching the web for query 'LazyLLM 成功案例 实施过程 收益 改进'...714495: 2025-03-13 12:56:29 lazyllm INFO: (core.tools.web_tools:21) [tool - Web Search] Searching the web for query '什么是LazyLLM 功能'...714495: 2025-03-13 12:56:29 lazyllm INFO: (core.tools.web_tools:21) [tool - Web Search] Searching the web for query 'LazyLLM 功能 优势'...714495: 2025-03-13 12:56:29 lazyllm INFO: (core.tools.web_tools:21) [tool - Web Search] Searching the web for query 'LazyLLM'...714495: 2025-03-13 12:56:30 lazyllm INFO: (core.tools.web_tools:21) [tool - Web Search] Searching the web for query '如何安装和配置LazyLLM 框架'...714495: 2025-03-13 12:56:30 lazyllm INFO: (core.tools.web_tools:21) [tool - Web Search] Searching the web for query 'LazyLLM best practices, common pitfalls and avoidance methods'...714495: 2025-03-13 12:56:30 lazyllm INFO: (core.tools.web_tools:21) [tool - Web Search] Searching the web for query '安装LazyLLM前需要准备的工作 环境搭建 依赖项安装'...714495: 2025-03-13 12:56:30 lazyllm INFO: (core.tools.web_tools:21) [tool - Web Search] Searching the web for query '提高开发效率的小技巧 代码优化 调试技巧 使用LazyLLM编写高效代码的方法 常见问题的排查技巧'...714495: 2025-03-13 12:56:30 lazyllm INFO: (core.tools.web_tools:21) [tool - Web Search] Searching the web for query 'LazyLLM 基本概念 使用方法 应用场景'...714495: 2025-03-13 12:56:31 lazyllm INFO: (core.tools.web_tools:21) [tool - Web Search] Searching the web for query 'LazyLLM performance optimization strategies and techniques'...714495: 2025-03-13 12:56:31 lazyllm INFO: (core.tools.web_tools:21) [tool - Web Search] Searching the web for query 'LazyLLM 应用领域 创造力 需求趋势 未被发掘 潜力'...714495: 2025-03-13 12:56:33 lazyllm INFO: (core.tools.web_tools:46) [tool - Visit URL] Visiting URL 'https://www.qbitai.com/2025/02/257657.html'...714495: 2025-03-13 12:56:35 lazyllm INFO: (core.tools.web_tools:46) [tool - Visit URL] Visiting URL 'https://www.qbitai.com/2025/02/257657.html'...714495: 2025-03-13 12:56:35 lazyllm INFO: (core.tools.web_tools:46) [tool - Visit URL] Visiting URL 'https://www.qbitai.com/2025/02/257657.html'...714495: 2025-03-13 12:56:35 lazyllm INFO: (core.tools.web_tools:46) [tool - Visit URL] Visiting URL 'https://www.qbitai.com/2025/02/257657.html'...714495: 2025-03-13 12:56:35 lazyllm INFO: (core.tools.web_tools:46) [tool - Visit URL] Visiting URL 'https://www.qbitai.com/2025/02/257657.html'...714495: 2025-03-13 12:56:37 lazyllm INFO: (core.tools.web_tools:46) [tool - Visit URL] Visiting URL 'https://www.qbitai.com/2025/02/257657.html'...714495: 2025-03-13 12:56:37 lazyllm INFO: (core.tools.web_tools:21) [tool - Web Search] Searching the web for query 'LazyLLM 成功案例 应用场景'...714495: 2025-03-13 12:56:37 lazyllm INFO: (core.tools.web_tools:21) [tool - Web Search] Searching the web for query '大模型应用开发框架 需求趋势 未来 应用方向'...714495: 2025-03-13 12:56:38 lazyllm INFO: (core.tools.web_tools:21) [tool - Web Search] Searching the web for query 'LazyLLM 功能 实现方式'...714495: 2025-03-13 12:56:39 lazyllm INFO: (core.tools.web_tools:46) [tool - Visit URL] Visiting URL 'https://www.qbitai.com/2025/02/257657.html'...714495: 2025-03-13 12:56:39 lazyllm INFO: (core.tools.web_tools:46) [tool - Visit URL] Visiting URL 'https://finance.sina.com.cn/roll/2025-02-24/doc-inemqprn0854836.shtml'...714495: 2025-03-13 12:56:39 lazyllm INFO: (core.tools.web_tools:46) [tool - Visit URL] Visiting URL 'https://finance.sina.com.cn/roll/2025-02-24/doc-inemqprn0854836.shtml'...714495: 2025-03-13 12:56:39 lazyllm INFO: (core.tools.web_tools:46) [tool - Visit URL] Visiting URL 'https://www.qbitai.com/2025/02/257657.html'...714495: 2025-03-13 12:56:42 lazyllm INFO: (core.tools.web_tools:46) [tool - Visit URL] Visiting URL 'https://www.qbitai.com/2025/02/257657.html'...714495: 2025-03-13 12:56:42 lazyllm INFO: (core.tools.web_tools:46) [tool - Visit URL] Visiting URL 'https://finance.sina.com.cn/roll/2025-02-24/doc-inemqprn0854836.shtml'...714495: 2025-03-13 12:56:42 lazyllm INFO: (core.tools.web_tools:46) [tool - Visit URL] Visiting URL 'https://finance.sina.com.cn/roll/2025-02-24/doc-inemqprn0854836.shtml'...714495: 2025-03-13 12:56:42 lazyllm INFO: (core.tools.web_tools:46) [tool - Visit URL] Visiting URL 'https://finance.sina.com.cn/roll/2025-02-24/doc-inemqprn0854836.shtml'...714495: 2025-03-13 12:56:44 lazyllm INFO: (core.tools.web_tools:46) [tool - Visit URL] Visiting URL 'https://finance.sina.com.cn/roll/2025-02-24/doc-inemqprn0854836.shtml'...714495: 2025-03-13 12:56:44 lazyllm INFO: (core.tools.web_tools:46) [tool - Visit URL] Visiting URL 'https://github.com/sensetime/LazyLLM'...714495: 2025-03-13 12:56:49 lazyllm INFO: (core.tools.web_tools:46) [tool - Visit URL] Visiting URL 'https://finance.sina.com.cn/roll/2025-02-24/doc-inemqprn0854836.shtml'...714495: 2025-03-13 12:56:50 lazyllm INFO: (core.tools.web_tools:46) [tool - Visit URL] Visiting URL 'https://github.com/LazyAGI/LazyLLM'...714495: 2025-03-13 12:56:50 lazyllm INFO: (core.tools.web_tools:21) [tool - Web Search] Searching the web for query '代码优化 调试技巧 常见问题排查技巧'...714495: 2025-03-13 12:57:01 lazyllm INFO: (core.tools.web_tools:21) [tool - Web Search] Searching the web for query '提高开发效率的技巧 代码优化 调试技巧 常见问题排查技巧'...714495: 2025-03-13 12:57:02 lazyllm INFO: (core.tools.web_tools:21) [tool - Web Search] Searching the web for query 'LazyLLM 成功案例 实施过程 收益 改进 应用场景'...714495: 2025-03-13 12:57:07 lazyllm INFO: (core.tools.web_tools:46) [tool - Visit URL] Visiting URL 'https://www.stcn.com/article/detail/1535042.html'...714495: 2025-03-13 12:57:12 lazyllm INFO: (core.tools.web_tools:46) [tool - Visit URL] Visiting URL 'http://news.pconline.com.cn/1888/18880280.html'...714495: 2025-03-13 12:57:19 lazyllm INFO: (core.tools.web_tools:21) [tool - Web Search] Searching the web for query '软件开发 提高效率的小技巧 代码优化 调试技巧 常见问题排查技巧'...714495: 2025-03-13 12:57:31 lazyllm INFO: (core.tools.web_tools:46) [tool - Visit URL] Visiting URL 'https://www.stdaily.com/web/gdxw/2025-02/24/content_300493.html'...714495: 2025-03-13 12:57:44 lazyllm INFO: (core.tools.web_tools:21) [tool - Web Search] Searching the web for query '软件开发效率提升方法 代码优化 调试技巧 常见问题排查技巧'...714495: 2025-03-13 12:58:01 lazyllm INFO: (core.tools.web_tools:46) [tool - Visit URL] Visiting URL 'https://www.jfdaily.com/news/detail?id=861805'...714495: 2025-03-13 12:58:08 lazyllm INFO: (core.tools.web_tools:46) [tool - Visit URL] Visiting URL 'https://finance.sina.com.cn/roll/2025-02-24/doc-inemqprn0854836.shtml'...714495: 2025-03-13 12:58:18 lazyllm INFO: (core.tools.web_tools:21) [tool - Web Search] Searching the web for query '软件开发 提高效率的方法 代码优化 调试技巧 常见问题排查技巧'...714495: 2025-03-13 12:58:18 lazyllm INFO: (core.tools.web_tools:46) [tool - Visit URL] Visiting URL 'https://github.com/LazyAGI/LazyLLM'...714495: 2025-03-13 12:58:31 lazyllm INFO: (core.tools.web_tools:46) [tool - Visit URL] Visiting URL 'https://www.stdaily.com/web/gdxw/2025-02/24/content_300493.html'...结果: # 如何熟练掌握LazyLLM
## LazyLLM简介
LazyLLM是由商汤科技在2025全球开发者先锋大会上推出的一个开源、低代码的大模型应用开发框架。其设计目标是让开发者能够以低至10行左右的代码构建复杂、定制化的多Agent大模型应用。此外,LazyLLM已经在GitHub上开源,开发者可以访问该项目的官方页面进行学习和使用。
### LazyLLM的功能与优势
LazyLLM是一个功能强大且易于使用的工具,具有以下主要特点和优势:
- **低代码开发**:LazyLLM允许开发者使用大约10行代码构建复杂且定制化的多Agent大模型应用。这意味着即使是没有深厚编程背景的人也可以轻松上手。 - **快速部署**:通过利用轻量网关,LazyLLM实现了复杂应用的一键部署,大大缩短了从开发到上线的时间周期。 - **支持多种数据流抽象**:LazyLLM以数据为核心,支持在应用开发过程中持续迭代数据,从而不断提升数据效果。这一特性使得开发者能够更容易地处理和优化不同类型的数据流。
与其他类似工具相比,LazyLLM的优势在于其极简主义的设计理念,即用最少的代码实现最强大的功能,同时保持高度的灵活性和可扩展性。此外,作为一个开源项目,LazyLLM还拥有活跃的社区支持,有助于加速创新和技术进步。
## LazyLLM的安装与配置
为了确保用户能够在自己的环境中顺利运行LazyLLM框架,以下是详细的安装步骤和配置要求:
### 环境准备
1. **环境搭建**: - LazyLLM支持跨平台兼容,可以在裸金属服务器、开发机、Slurm集群、公共云等平台上运行。因此,在安装之前,请确保你已经选择并配置好了相应的计算平台。
2. **依赖项安装**: - 如果你是从源代码安装LazyLLM,你需要先克隆仓库并进入项目目录: ```bash git clone git@github.com:LazyAGI/LazyLLM.git cd LazyLLM ``` 然后根据需求安装依赖项。如果你只需要安装LazyLLM及其必要依赖,可以使用以下命令: ```bash pip install -r requirements.txt ``` 如果你还想进行微调、部署或构建RAG应用,则还需要安装额外的依赖项: ```bash pip install -r requirements.full.txt ```
- 如果你是通过pip安装LazyLLM,你可以选择只安装LazyLLM及其必要依赖: ```bash pip3 install lazyllm ``` 或者安装LazyLLM以及所有依赖项: ```bash pip3 install lazyllm[lazyllm install full] ```
3. **配置API密钥(如需)**: - 对于某些功能(例如与在线服务交互),可能需要设置环境变量或配置文件来提供必要的API密钥。例如,对于ChatBots示例中提到的OpenAI API Key,可以通过设置环境变量`LAZYLLM_OPENAI_API_KEY=xx`或在配置文件`~/.lazyllm/config.json`中添加`openai_api_key=xx`来实现。
4. **准备数据集(如需)**: - 如果你要使用LazyLLM构建基于检索增强生成的应用程序(如RAG),则需要准备好相应的数据集,并确保数据路径正确无误。例如,在本地部署示例中,你需要指定数据集路径为`/file/to/yourpath`。
5. **了解基本概念和组件**: - 在开始构建应用程序之前,建议先熟悉LazyLLM的基本概念,包括组件(Component)、模块(Module)、流程(Flow)等,以便更好地利用其提供的工具和接口。
### 安装过程
1. **环境准备**:首先,你需要确保你的计算机已经安装了Python,并且最好是在一个虚拟环境中工作以避免与其他项目产生冲突。你可以使用如`venv`或`conda`等工具创建一个独立的Python环境。 2. **安装依赖库**:根据LazyLLM的具体需求,你可能需要安装一些额外的Python包。这通常可以通过pip命令完成,例如`pip install -r requirements.txt`,其中`requirements.txt`文件列出了所有必要的依赖项。
3. **下载并安装LazyLLM**:访问[LazyLLM的GitHub页面](https://github.com/sensei-research/LazyLLM)获取最新的源代码或直接通过pip安装最新版本(如果已发布)。
4. **配置环境变量**:某些情况下,你可能还需要设置特定的环境变量,以便LazyLLM能够正确连接到外部服务或者存储系统。
5. **初始化项目结构**:按照官方文档中的指导,创建一个新的项目目录,并初始化基本的项目结构。这一步骤可能会涉及到复制模板文件夹、修改配置文件等操作。
6. **编写业务逻辑代码**:利用LazyLLM提供的API接口快速实现核心功能。由于这是一个低代码平台,大部分工作都可以通过简单的函数调用来完成。
7. **测试与调试**:完成初步编码后,应该进行全面的单元测试和集成测试,确保一切按预期工作。同时也可以借助IDE中的调试工具排查可能出现的问题。
8. **部署上线**:最后一步就是将开发好的应用部署到生产环境。得益于LazyLLM内置的一键部署特性,这一步相对来说比较简单快捷。
关于可能遇到的问题及解决方案:- 如果在安装过程中遇到问题,请检查Python版本是否符合要求,并确认所有的依赖项都已经正确安装。- 对于网络连接失败的情况,可以尝试更换镜像源或是离线安装所需的软件包。- 如果发现性能瓶颈,考虑优化算法或增加硬件资源。- 当遇到特定功能无法正常工作时,查阅官方文档和技术支持论坛,很多时候其他用户也会遇到类似的问题,官方社区往往能提供有效的帮助。
## LazyLLM的应用场景
尽管没有找到具体的LazyLLM成功案例,但我们可以根据其特点推测其在不同领域的潜在应用场景:
1. **教育**:LazyLLM可以帮助教育机构和教师快速开发个性化学习助手,为学生提供定制化学习路径和实时答疑服务。2. **医疗**:在医疗领域,LazyLLM可以用于开发智能诊断助手,帮助医生分析病历、诊断疾病并提供治疗建议。3. **金融**:LazyLLM可以助力金融机构开发智能客服系统,为客户提供24/7全天候服务,解答常见问题并处理简单业务。4. **零售**:通过LazyLLM,零售商可以创建智能推荐系统,根据用户的历史购买记录和浏览行为推荐相关产品。5. **游戏**:游戏开发者可以利用LazyLLM创建更智能的NPC(非玩家角色),提高游戏的互动性和趣味性。
以上只是一些可能的应用场景,实际上LazyLLM可以在任何需要大模型能力的领域发挥作用。由于其低代码特性,即使不具备熟练编码能力的人也能完成AI应用开发,这大大降低了大模型应用开发的门槛。
### 成功案例分析
#### 案例一:智能客服系统的快速开发- **实施过程**:某企业利用LazyLLM快速开发了一款智能客服系统,将原本需要数周时间完成的工作缩短至几天内完成。- **收益或改进**:这不仅加快了开发速度,还降低了开发成本,使得企业能够更迅速地响应市场需求。
#### 案例二:医疗数据的自动化分析- **实施过程**:一家医疗科技公司通过LazyLLM实现了病历数据的自动化分析和处理。- **收益或改进**:大幅提升了工作效率并减少了人工干预,使医生和护士能够专注于更重要的临床工作。
### 总结LazyLLM极大地简化了AI应用的开发流程,使得不具备熟练编码能力的人也能完成复杂的AI应用开发。它支持多种数据流操作(如Pipeline、Parallel、Switch等),从而提升了开发效率并减少了代码量。对于企业来说,这意味着更快的产品迭代速度以及更低的研发成本。
### 潜在应用场景
未来可能的应用领域包括教育、医疗、农业和环保等领域,激发用户的创造力。当前市场上对于此类工具的需求趋势主要体现在低代码化、开源化和数据为核心等方面。
未被发掘但具有潜力的应用方向可能包括:1. **教育领域**:为学生和教师提供个性化的学习和教学助手。2. **医疗领域**:帮助医生和研究人员分析病历、诊断疾病和发现新药。3. **农业领域**:优化农作物种植、预测天气和提高产量。4. **环保领域**:监测环境变化、评估污染影响和制定可持续发展策略。
## LazyLLM的最佳实践
分享一些使用LazyLLM时的最佳实践,提高用户的开发效率:
- **简化编码**:LazyLLM旨在通过减少所需的代码量来加速开发过程。这意味着您可以专注于设计应用程序的功能,而不是花费大量时间编写底层代码。- **数据为核心**:LazyLLM支持在应用开发过程中持续迭代数据,从而不断提升数据效果。因此,在开发初期就应该重视数据集的设计与准备。- **利用现有组件**:LazyLLM提供了Pipeline, Parallel, Switch, If, Loop, Diverter, Warp, Graph等组件,可以直接使用或组合这些组件快速搭建应用程序逻辑,无需从零开始创建所有功能。- **一键部署**:该框架允许开发者轻松地将他们的应用程序部署到云端或其他环境中,这大大简化了发布流程。- **社区支持**:由于LazyLLM已经在GitHub上开源,您可以在[GitHub](https://github.com/LazyAGI/LazyLLM) 和 [官方文档](docs.lazyllm.ai) 中找到丰富的资源和支持,包括教程、案例研究和其他开发者的贡献。
至于常见的误区和避免方法:- **过度依赖默认设置**:虽然LazyLLM提供了一些预设配置,但为了获得最佳性能,建议根据具体需求调整参数。- **忽视版本更新**:随着技术的进步,框架会不断改进和完善。确保定期检查是否有新的版本发布,并及时升级以享受最新的特性和修复。- **缺乏测试**:尽管LazyLLM简化了开发步骤,但仍需对生成的应用程序进行全面测试,特别是对于涉及多个代理(Agents)协作的任务,确保它们能够按照预期工作。- **忽略安全性**:即使是在简化环境下开发,也不应放松对安全性的要求。遵循最佳的安全实践,比如保护API密钥和个人敏感信息。
### 开发技巧
介绍一些有助于提高开发效率的小技巧,如代码优化、调试技巧等。
#### 使用LazyLLM编写高效代码的方法
1. **低代码开发**:LazyLLM是一个开源、低代码的大模型应用开发框架。开发者只需编写少量代码(如10行左右),即可构建复杂的多Agent大模型应用。这使得不具备熟练编码能力的人也能完成AI应用开发。2. **快速部署**:LazyLLM利用轻量网关实现了复杂应用的一键部署,使开发者能够更快地实现想法产品落地。3. **数据迭代支持**:该框架专注于数据为核心,支持在应用开发过程中持续迭代数据,从而不断提升数据效果。
#### 提高开发效率的小技巧
##### 代码优化- **减少冗余代码**:避免重复代码,尽量复用已有的函数或模块,保持代码简洁。- **性能优化**:使用高效的算法和数据结构,减少不必要的计算,优化内存使用。- **自动化测试**:编写单元测试和集成测试,确保代码质量的同时加快开发进度。
##### 调试技巧- **日志记录**:合理设置日志级别,记录关键操作和异常信息,便于后续排查问题。- **断点调试**:使用IDE中的断点调试功能,逐步执行代码,检查变量值和程序逻辑。- **版本控制**:使用Git等版本控制系统管理代码变更,方便回滚和协作开发。
##### 常见问题排查技巧- **错误堆栈分析**:当遇到异常时,仔细阅读错误堆栈信息,定位具体出错位置。- **环境配置检查**:确保开发环境与生产环境一致,避免因环境差异导致的问题。- **社区资源利用**:积极查阅官方文档、论坛和GitHub Issues,寻找类似问题的解决方案。
### 性能调优
讲解如何对基于LazyLLM的应用程序进行性能调优,以获得更好的运行效果。
1. **快速原型设计与迭代优化**:LazyLLM强调“快速原型设计,使用特定场景的数据分析不良案例,算法实验以及在关键方面微调模型以提高整体应用性能。”这意味着开发者应该尽快建立一个初始版本的应用,并根据实际使用中的反馈不断改进和优化。2. **自动超参数搜索**:LazyLLM支持网格搜索参数优化功能,可以自动尝试不同的基础模型、检索策略和微调参数来评估和优化应用程序。这使得超参数调整变得高效,而无需对应用代码进行大量侵入性修改,帮助用户快速找到最佳配置。3. **高效的模型微调**:LazyLLM允许在应用内微调模型,以持续改进应用性能。它能够根据微调场景自动选择最适合的微调框架和模型分割策略。这不仅简化了模型迭代维护工作,还让算法研究人员可以更多地专注于算法和数据迭代,而不是处理繁琐的工程任务。4. **一键部署复杂应用**:LazyLLM提供了一键式部署所有模块的能力,在POC(概念验证)阶段通过轻量级网关机制简化多代理应用的部署过程。这样解决了依次启动每个子模块服务(如LLM、Embedding等)并配置URL的问题,使整个过程更加顺畅高效。此外,在应用发布阶段,LazyLLM还提供了一键打包镜像的功能,便于利用Kubernetes的网关、负载均衡及容错能力。5. **跨平台兼容性**:LazyLLM可以在不修改代码的情况下一键切换IaaS平台,兼容裸金属服务器、开发机、Slurm集群、公有云等多种环境。这允许已开发的应用程序无缝迁移到其他IaaS平台,大大减少了代码修改的工作量。6. **支持常见的RAG组件**:LazyLLM集成了文档、解析器、检索器、重排序器等常见RAG(检索增强生成)组件。这些组件可以帮助构建更强大的AI应用,尤其是在需要从大量文本中提取有用信息时非常有用。
综上所述,通过上述方法,我们可以针对基于LazyLLM的应用程序进行有效的性能调优,从而提升其运行效果。
## 总结与展望
LazyLLM是由商汤科技在2025全球开发者先锋大会上发布的一个开源、低代码的大模型应用开发框架。它能让开发者以低至10行左右的代码构建复杂、定制化的多Agent大模型应用,从而降低AI应用开发的门槛,使不具备熟练编码能力的人也能完成AI应用开发。此外,LazyLLM还利用轻量网关实现了复杂应用的一键部署,使开发者能够更快地将应用推向市场。
随着人工智能技术的不断发展和市场需求的增长,预计LazyLLM未来将在以下几个方面取得进展:
1. **更加简便易用**:为了吸引更多的开发者使用LazyLLM进行AI应用开发,商汤科技可能会继续优化该框架,使其更加简便易用,进一步降低开发门槛。2. **提升性能与稳定性**:随着更多开发者使用LazyLLM,商汤科技可能会收集用户反馈,不断改进框架的性能与稳定性,确保用户能够顺利地构建高质量的AI应用。3. **拓展应用场景**:目前,LazyLLM主要用于构建多Agent大模型应用。然而,随着技术的发展和市场需求的变化,LazyLLM可能会被应用于更多的场景,如自然语言处理、计算机视觉等。4. **社区建设**:作为一个开源项目,LazyLLM有望吸引更多的开发者加入其社区,共同为项目的完善和发展做出贡献。这将有助于推动LazyLLM成为更受欢迎的AI应用开发框架。
复制代码

我们可以看到,通过使用 lazyllm 快速复现的 deepresearch,已经具备了通过自身思考并主动使用工具,经过若干分钟的”工作“给出专业长篇报告的能力。至此,基于 lazyllm 的快速复习宣告成功~

总结与展望

仔细盘点一下,这次复现的耗时只有大概半天,工程代码量只在一百多行(如果只关注 deep research 的主流程,排除一些通用工具编写的话,甚至只有不到 15 行哦嘿嘿嘿~~~),效率这块儿属实是被 lazyllm 拿捏了~

但这仅仅是较为简单版本的 deep research,一个”满血版“的 Deep Research 还需要具备解析文件、调用本地知识库、精细化操作网络页面等等的能力,与先前开发工具的思路相同,这些也都需要我们通过工具研发提供给智能体,以丰富智能体的”武器库“。

大模型应用正在飞速迭代,这必然给大家带来了一定恐慌,在这个时代,能够有效拆解并快速复现这些应用的能力越来越重要。而使用 lazyllm,我们能够在短时间内快速复现一个如此强大的应用,对于广大大模型爱好者来说是一件非常激动人心的事情!你是否也有些手痒痒了呢?心动不如行动,赶紧动起来吧~我也要去开发更多的强力工具,赋能专属于自己的 deep research 咯~

友情提示:agent 工作是一个相当消耗 token 的过程,如果你和我一样使用了第三方的 llm api-key,调试和使用期间要盯紧自己的钱包哦~

附件一 提示词设计


# planner agent promptTOC_PLAN_INSTRUCTION = """# 定位- 你是一个全面的写作专家,擅长根据给定的主题主动收集资料,并给出高质量的、具有完整报告结构的写作大纲。- 主要任务:用户给定了写作主题,请针对给定主题,使用工具集主动收集信息、分析用户意图,最后结合有效信息生成专业报告写作大纲。- 写作大纲用于指导后续调研工作和报告写作工作。
# 工具- 为了帮助你高质量完成给定的任务,我们为你提供了一些有用的工具。请充分使用这些工具来获取所需的信息。- 注意:在任务开始阶段,一定要使用'get_more_info_from_user'工具邀请用户提供更多信息。- 如果写作主题很复杂,你可以将其拆分为若干sub_topic,并通过调用最合适的工具了解它们。- 请主动使用'visit_url'工具浏览相关网页,浏览相关网页可以帮你获取更多有效信息。
# 输出格式- 请使用和用户输入相同的语言执行任务。- 你的任务分为两个阶段:信息收集阶段、生成大纲阶段。- 在信息收集阶段,请严格遵循“Thought: 思考内容”的格式:Thought: 思考当前任务所处于的状态,规划接下来需要做什么。- 每次输出时,在开头输出且仅输出一次Thought,无论你是否决定使用工具。- 如果你认为你获取的信息不足以很好的生成大纲,请始终遵循“Thought”的格式,直到获取到足够的信息后,再生成大纲。- 当你认为你已经收集到足够的信息,请严格遵循JSON格式生成写作大纲。生成大纲阶段,不要输出“Thought”。- 大纲的每一部分应包含“title”、“desc”、“need_know”两部分:title: 当前部分的标题,标题最多达到三级标题。desc: 描述当前部分希望呈现的内容,需要始终紧扣原主题和当前主题。need_know: 用于指导员工调研相关内容,以便更好的完成该部分写作,需要始终紧扣原主题和当前主题。大纲应按照“总-分-总”的逻辑结构生成,首先是概述部分,随后将写作主题拆解成若干部分,最后给出总结与展望。请生成符合以下格式的JSON列表:[ { "title": "# 一级标题(报告总标题)", "desc": "一级标题的描述", "need_know": "完成该部分需要了解的内容。" }, { "title": "## 二级标题", "desc": "二级标题的描述", "need_know": "完成该部分需要了解的内容。" }, { "title": "### 三级标题", "desc": "三级标题的描述", "need_know": "完成该部分需要了解的内容。" }, ...]
# 当前对话以下是当前用户和智能助手的对话内容。Think step by step.请务必好好完成本次工作!"""

# searcher agent promptWEB_SEARCH_INSTRUCTION = f"""# 定位- 你是一个互联网打工人,擅长根据给定的主题搜索资料、总结信息并给出高质量的汇报。- 主要任务:今天是{get_today_date()},你的老板给你发布了任务,请针对给定的问题,使用工具集中的工具搜索相关信息,最后结合搜索结果给出全面的回答。
# 工具- 为了帮助你高质量完成给定的任务,我们为你提供了一些有用的工具。请充分使用这些工具来获取所需的信息。- 如果问题很复杂,你可以将问题拆分为若干子问题,并通过调用最合适的工具解决它们。- 如果你觉得本次搜索结果不复合需求,尝试换个角度再次搜索。- 请主动使用'visit_url'工具浏览相关网页,浏览相关网页可以帮你获取更多有效信息。- 如果网站url是文件链接,请不要访问,直接无视。
# 输出格式- 请使用和问题相同的语言回答问题,在任务开始阶段,请严格遵循“Thought”的格式:Thought: 思考当前任务所处于的状态,规划接下来需要做什么。- 每次输出时,在开头输出且仅输出一次Thought,无论你是否决定使用工具。- 如果你认为你获取的信息不足以很好的回答问题,请始终遵循“Thought”的格式,知道获取到足够的信息后,再回答问题。- 当你认为你已经收集到足够的信息,请严格遵循“Answer”的格式回答问题,在回答中如果引用了搜索结果,请将相关链接以markdown的形式直接插入到正文当中,具体格式为“[网页标题](网页url)”。Answer: 使用相同语言完整地回答问题。
# 当前对话以下是当前用户和智能助手的对话内容。Think step by step.你的老板很器重你,请务必好好完成本次工作!"""

# generate report promptREPORT_INSTRUCTION = """# 定位- 你是一个写作专家,擅长根据给定的写作大纲写出高质量的报告。- 主要任务:根据写作大纲,结合标题、描述以及调研结果为用户书写专业的报告。
# 要求- 请确保报告结构严谨、用词专业、表达通顺,报告内容请尽可能参考调研结果,不要使用你的先验知识。- 如果你觉得提供的标题不够专业,可以进行润色。- 报告中的每一部分字数控制在400~800字,不要太少。- 请严格按照大纲结构完成写作,写作大纲是JSON格式的,其中包含三个字段:title: 该部分主题desc: 描述该部分想要表达的内容search_info: 与该部分相关的调研结果
# 输出格式- 请使用和用户输入相同的语言执行任务,直接生成Markdown格式的报告全文。
# 写作大纲"""
复制代码


附件二 功能函数


# 获取今天的日期def get_today_date():    """    获取今天的日期    Returns:        str: 当前日期,格式为"YYYY-MM-DD"    """    today = datetime.date.today()    return today.strftime("%Y-%m-%d")
# 提取planner agent生成的写作大纲def table_of_content_parser(text: str) -> list: try: # 找到第一个 '[' 和最后一个 ']' 的索引 start_index = text.find('[') end_index = text.rfind(']') if start_index == -1 or end_index == -1: # 没有找到有效的 JSON 结构,返回空列表 return [] json_str = text[start_index:end_index+1] # 尝试解析 JSON data = json.loads(json_str) LOG.info(f"报告写作大纲生成成功:\n{data}") return data except Exception as e: # 如果解析出错,输出错误信息并返回空列表 print("解析 JSON 出错:", e) raise e
# 创建planner agentdef create_plan_agent() -> CustomReactAgent: agent = CustomReactAgent( llm=OnlineChatModule(source="qwen", model="qwen-plus", stream=False), tools=["get_more_info_from_user", "web_search", "visit_url"], custom_prompt=TOC_PLAN_INSTRUCTION, max_retries=10, return_trace=True, stream=True ) return agent
# 创建searcher agent并搜集信息def create_search_agent_and_run(query: str) -> str: try: with lazyllm.pipeline() as ppl: ppl.receive = StreamResponse('[Searcher] Received query:', prefix_color=Color.red, color=Color.magenta, stream=True) ppl.run_search = CustomReactAgent( llm=OnlineChatModule(source="qwen", model="qwen-plus", stream=False), tools=["web_search", "visit_url"], custom_prompt=WEB_SEARCH_INSTRUCTION, max_retries=20, return_trace=True, stream=True ) ppl.search_result = StreamResponse('[Searcher] Search result:', prefix_color=Color.red, color=Color.magenta, stream=True) return ppl(query) except Exception as e: LOG.error(f"[Search agent] Error occurred: {e}") return "搜索中断,未找到相关信息"
复制代码


参考资料

  1. OpenAI(2025)- deep-research-system-card

  2. https://www.youtube.com/watch?v=2mSNIX-l_Zc - Open Deep Research from LangChain

  3. https://zhuanlan.zhihu.com/p/23746178273 - [知乎] OpenAI Deep Research 是什么?如何使用?你想知道的都在这儿!

  4. https://docs.lazyllm.ai/zh-cn/latest/ - LazyLLM 官方文档

更多信息欢迎移步“LazyLLM”gzh

发布于: 刚刚阅读数: 3
用户头像

用AI大模型,找商汤大装置。 2023-04-04 加入

还未添加个人简介

评论

发布
暂无评论
万字干货分享最新AI指南:用LazyLLM把Deep Research做成赛博屠龙刀!_AI_商汤万象开发者_InfoQ写作社区