当前位置:首页 > CN2资讯 > 正文内容

用 LazyLLM 搭建一个代码注释 / 文档 Agent 的实测体验

3天前CN2资讯

作为一名经常需要写代码的开发者,我常常被一个问题困扰:写代码本身并不难,但写清晰的函数注释和 API 文档却很费时间。尤其在多人协作项目里,如果缺少规范的注释,新人接手代码往往需要花大量时间理解。

最近,我尝试用 LazyLLM 来做一个小实验:让它自动扫描代码库,生成函数注释和接口文档。下面分享一下我基于 LazyLLM 的实测过程。


环境准备

首先在本地新建了一个虚拟环境 lazyllm-venv311,以便和其他项目隔离。激活环境后,可以在命令行的开头看到 (lazyllm-venv311) 的提示。

从 GitHub 下载 LazyLLM 的代码:

git clone https://github.com/LazyAGI/LazyLLM.git

安装基础依赖:

pip install -r requirements.txt

选择一个平台获取 api key


第一个小实验:对话机器人

LazyLLM 的入门 demo 是一个聊天机器人。代码非常简单:

import lazyllm chat = lazyllm.OnlineChatModule( source="qwen", # 指定使用通义千问 api_key="sk-xxxx" # 这里换成你自己的 key ) while True: query = input("query(enter 'quit' to exit): ") if query == "quit": break res = chat.forward(query) print(f"answer: {res}")

运行后,我在控制台输入“你好”,模型马上就回复了“你好!有什么我可以帮你的吗?”。到这里,说明 LazyLLM 已经正常跑起来了。


使用 Web 界面

除了命令行方式,LazyLLM 还自带了一个 Web 界面模块 WebModule,可以快速把对话机器人跑在浏览器里,更直观地交互。

示例代码如下:

import lazyllm chat = lazyllm.OnlineChatModule(source="qwen", api_key="sk-xxxx") lazyllm.WebModule(chat, port=23333).start().wait()

这里的 WebModule 接受两个参数:

  • chat:我们上面创建的聊天模块
  • port:Web 服务监听的端口号(这里是 23333)

运行后,在浏览器访问 http://localhost:23333,就能看到一个简洁的聊天页面,可以直接和模型对话。

⚠️ 注意:如果访问失败,通常是因为端口被占用、代理/防火墙拦截,可以在终端查看报错信息并调整。

这个小功能让我想到:LazyLLM 不仅能写后端逻辑,还能几行代码就搭好一个可视化 Demo,对于想做快速原型的开发者非常友好。


核心实验:自动生成函数注释与 API 文档

除了聊天和 Web 界面,LazyLLM 还可以构建 本地 Agent,实现对 Python 文件的扫描与自动文档生成。我的实验流程如下:

  • 指定本地 Python 文件(例如 snake.py)。
  • 读取文件内容
  • 将代码作为上下文交给模型
  • 自动生成函数注释和 API 文档
  • 示例代码

    import lazyllm # 初始化在线聊天模块 chat = lazyllm.OnlineChatModule(source="qwen", api_key="sk-xxxx") def generate_doc(file_path): # 读取本地 Python 文件 with open(file_path, "r", encoding="utf-8") as f: code = f.read() # 提示模型生成函数注释和 API 文档 prompt = f""" 你是一个代码文档生成助手。 请为以下 Python 代码自动生成清晰的函数注释和 API 文档,包括: - 函数用途 - 参数说明 - 返回值说明 代码如下: {code} """ # 调用模型生成文档 res = chat.forward(prompt) return res if __name__ == "__main__": doc = generate_doc(r"E:\python\LazyLLM\snake.py") # 指定本地文件 print("=== 自动生成的注释与文档 ===") print(doc)

    输入示例:贪吃蛇(snake.py)

    import pygame import random def create_food(snake_body, screen_width, screen_height, block_size): while True: x = random.randrange(0, screen_width, block_size) y = random.randrange(0, screen_height, block_size) if (x, y) not in snake_body: return (x, y) def move_snake(direction, snake_body, grow=False): head_x, head_y = snake_body[0] if direction == "UP": new_head = (head_x, head_y - 20) elif direction == "DOWN": new_head = (head_x, head_y + 20) elif direction == "LEFT": new_head = (head_x - 20, head_y) else: new_head = (head_x + 20, head_y) snake_body.insert(0, new_head) if not grow: snake_body.pop() return snake_body

    模型输出示例(自动生成单个文件函数注释)

    === 自动生成的注释与文档 === 以下是为你提供的 Python 代码生成的函数注释和 API 文档: --- ## `create_food(snake_body, screen_width, screen_height, block_size)` ### 用途 该函数用于在游戏区域内随机生成一个食物的位置,确保该位置不在蛇的身体上。 ### 参数说明 - `snake_body`:`List[Tuple[int, int]]` 表示蛇身体各个部分的坐标列表,每个元素是一个 (x, y) 坐标元组。 - `screen_width`:`int` 游戏窗口的宽度(像素)。 - `screen_height`:`int` 游戏窗口的高度(像素)。 - `block_size`:`int` 蛇的每个身体块和食物的大小(通常为 20 像素)。 ### 返回值 - `Tuple[int, int]` 返回一个不在蛇身体上的随机坐标 (x, y),用于放置食物。 --- ## `move_snake(direction, snake_body, grow=False)` ### 用途 根据当前的方向移动蛇,并更新蛇的身体位置。如果蛇吃到了食物,则蛇身增长。 ### 参数说明 - `direction`:`str` 蛇的移动方向,可以是 `"UP"`、`"DOWN"`、`"LEFT"` 或 `"RIGHT"`。 - `snake_body`:`List[Tuple[int, int]]` 表示蛇身体各个部分的坐标列表,第一个元素为蛇头。 - `grow`:`bool`,可选 是否增长蛇身,默认为 `False`。当蛇吃到食物时应设为 `True`。 ### 返回值 - `List[Tuple[int, int]]` 返回更新后的蛇身体坐标列表。 --- ### 示例用法 ```python # 初始化蛇身(假设每个块大小为20) snake = [(100, 100), (120, 100), (140, 100)] # 向右移动,不增长 snake = move_snake("RIGHT", snake) # 生成食物 food_pos = create_food(snake, 600, 400, 20)


    如果你希望扫描整个目录下所有 .py 文件、批量生成注释和 API 文档的版本,也是可以实现的,这样就像一个本地的“小型代码文档 Agent”。

    代码示例如下:

    import lazyllm import os # 初始化在线聊天模块 chat = lazyllm.OnlineChatModule(source="qwen", api_key="sk-xxxx") def generate_doc_from_code(code): """ 给定一段 Python 代码,调用模型生成函数注释和 API 文档。 """ prompt = f""" 你是一个代码文档生成助手。 请为以下 Python 代码自动生成清晰的函数注释和 API 文档,包括: - 函数用途 - 参数说明 - 返回值说明 代码如下: {code} """ return chat.forward(prompt) def scan_directory_and_generate_docs(directory=r"E:\python\LazyLLM"): """ 扫描目录下所有 .py 文件,生成文档并保存到同目录的 _docs 文件夹中 """ output_dir = os.path.join(directory, "_docs") os.makedirs(output_dir, exist_ok=True) for root, _, files in os.walk(directory): for file in files: if file.endswith(".py"): file_path = os.path.join(root, file) print(f"正在处理: {file_path}") # 读取代码 with open(file_path, "r", encoding="utf-8") as f: code = f.read() # 调用模型生成文档 doc = generate_doc_from_code(code) # 保存文档 output_file = os.path.join(output_dir, file.replace(".py", "_doc.txt")) with open(output_file, "w", encoding="utf-8") as f: f.write(doc) print(f"文档已保存: {output_file}\n") if __name__ == "__main__": scan_directory_and_generate_docs() # 默认扫描 E:\python\LazyLLM

    ✅ 功能说明:

    1.自动扫描 E:\python\LazyLLM 下的所有 .py 文件(包括子目录)。 2.为每个文件生成函数注释和 API 文档。 3.文档统一保存到 _docs 文件夹里。

    模型输出示例(自动生成多个文件函数注释)


    进阶实验:将注释直接写入源代码

    前面的实验里,我们让模型生成了函数注释和 API 文档,但这些是单独保存成文本文件的。如果能让模型直接把注释写回到源代码中,就能在代码编辑器里立刻看到,体验更接近“代码即文档”。

    示例代码

    import lazyllm import os # 初始化在线聊天模块 chat = lazyllm.OnlineChatModule(source="qwen", api_key="sk-xxxx") def add_comments_to_code(code): """ 调用模型,为代码中的函数生成 docstring 并直接插入到源文件中。 """ prompt = f""" 你是一个代码注释助手。 请在以下 Python 源代码中,自动为每个函数和类添加清晰的 docstring, 包括: - 函数/类的用途 - 参数说明 - 返回值说明 要求直接在代码中插入,不要输出额外解释。 代码如下: {code} """ return chat.forward(prompt) def rewrite_file_with_comments(file_path, output_path=None): """ 读取 Python 文件,生成带注释的新代码,并写回文件。 """ with open(file_path, "r", encoding="utf-8") as f: code = f.read() # 调用模型生成带注释的新代码 commented_code = add_comments_to_code(code) # 如果没有指定输出文件,就覆盖原文件 if output_path is None: output_path = file_path with open(output_path, "w", encoding="utf-8") as f: f.write(commented_code) print(f"注释已写入文件: {output_path}") if __name__ == "__main__": test_file = r"E:\python\LazyLLM\snake.py" rewrite_file_with_comments(test_file, output_path=test_file.replace(".py", "_commented.py"))

    输入示例:原始 snake.py

    import pygame import random def create_food(snake_body, screen_width, screen_height, block_size): while True: x = random.randrange(0, screen_width, block_size) y = random.randrange(0, screen_height, block_size) if (x, y) not in snake_body: return (x, y) def move_snake(direction, snake_body, grow=False): head_x, head_y = snake_body[0] if direction == "UP": new_head = (head_x, head_y - 20) elif direction == "DOWN": new_head = (head_x, head_y + 20) elif direction == "LEFT": new_head = (head_x - 20, head_y) else: new_head = (head_x + 20, head_y) snake_body.insert(0, new_head) if not grow: snake_body.pop() return snake_body

    模型输出示例(自动插入注释后的 snake_commented.py)

    import pygame import random def create_food(snake_body, screen_width, screen_height, block_size): """ 创建一个随机位置的食物,确保食物的位置不在蛇的身体上。 参数: snake_body (list): 蛇身体的坐标列表 screen_width (int): 游戏窗口的宽度 screen_height (int): 游戏窗口的高度 block_size (int): 蛇身每一节的大小 返回: tuple: 食物的坐标 (x, y) """ while True: x = random.randrange(0, screen_width, block_size) y = random.randrange(0, screen_height, block_size) if (x, y) not in snake_body: return (x, y) def move_snake(direction, snake_body, grow=False): """ 根据当前方向移动蛇,并更新蛇的身体坐标。 参数: direction (str): 蛇的移动方向,可以是 "UP", "DOWN", "LEFT", "RIGHT" snake_body (list): 蛇身体的坐标列表 grow (bool): 是否增长蛇的身体(吃食物时为 True) 返回: list: 更新后的蛇身体坐标列表 """ head_x, head_y = snake_body[0] if direction == "UP": new_head = (head_x, head_y - 20) elif direction == "DOWN": new_head = (head_x, head_y + 20) elif direction == "LEFT": new_head = (head_x - 20, head_y) else: new_head = (head_x + 20, head_y) snake_body.insert(0, new_head) if not grow: snake_body.pop() return snake_body


    ✅ 功能说明:

  • 自动调用模型,在函数内部插入符合规范的 docstring;
  • 可以选择覆盖源文件,或者生成新的 _commented.py 文件;
  • 在编辑器里就能直接看到函数注释,无需再切换到文档文件夹。
  • 这样就实现了“代码即文档”的效果。

    总结

    整个体验过程下来,我主要做了以下尝试:先在本地搭好虚拟环境,安装并配置 LazyLLM,然后用它跑了一个简单的对话机器人,验证模型可以正常工作。然后我试着用 Web 界面快速和模型交互,感觉直观又方便。最核心的实验是让它扫描 Python 文件,自动生成函数注释和 API 文档,不管是单个文件还是整个目录,都能自动生成清晰的函数用途、参数说明和返回值文档,几秒钟就完成了以前需要手动写很久的工作。

    用下来,我觉得 LazyLLM 有几个明显优势:上手快、效率高,生成的文档风格统一,而且非常灵活,可以直接在本地用,也能扩展成更复杂的代码辅助工具。对我这种经常写代码的人来说,省下了不少写注释和整理文档的时间,也让团队协作更加顺畅。总体来说,它不仅是一个聊天 SDK,更像是一个本地可落地的智能代码助手。

    📺 想更深入掌握 LazyLLM 的使用技巧?

    B站上线了一套免费视频课程,手把手带你从入门到实战,快速上手智能代码开发!
    👉 点击观看:LazyLLM 实战教程 - 从零搭建智能代码助手

    💡 欢迎关注公众号【LazyLLM】
    获取更多 AI 开发技巧、最新工具评测和实战案例!定期分享编程干货与独家资源~

    一起交流

    如果你也尝试了 LazyLLM,欢迎在评论区分享你的使用体验或遇到的问题!


      你可能想看:

      扫描二维码推送至手机访问。

      版权声明:本文由皇冠云发布,如需转载请注明出处。

      本文链接:https://www.idchg.com/info/20337.html

      分享给朋友:

      “用 LazyLLM 搭建一个代码注释 / 文档 Agent 的实测体验” 的相关文章

      美国服务器CN2线路速度解析:如何选择稳定高速的网络体验?

      随着互联网的快速发展,越来越多的企业和个人站长选择在美国部署服务器,以满足全球用户的需求。服务器的速度和稳定性始终是用户最关心的问题。尤其是在选择美国服务器时,CN2线路因其低延迟、高稳定性的特点,成为了许多用户的首选。美国服务器CN2线路的速度到底多少才算正常?本文将为您详细解析。一、什么是美国服...

      年抛域名的优势与续费注意事项,助您成功管理短期项目

      年抛域名是我在互联网世界中常遇到的一个概念,它们指的是那些注册时间为一年,使用者并不打算长期持有的域名。这类域名的价格往往比较低廉,非常适合一些短期项目或者测试用途。或许你有过这样的经历,想要尝试某个新项目,于是申请了一个年抛域名,一年后若不再需要,便无后顾之忧。这样的运作模式灵活高效,适合现代互联...

      DMIT Eyeball套餐:高性价比VPS解决方案实现稳定网络连接

      在探讨DMIT Eyeball套餐之前,先来了解一下它的起源。这款套餐曾被称为HKG Lite,后来进行了更名,成为了如今的Eyeball。这个变化并不仅仅是名称的调整,更是DMIT公司在提供服务方面进行的一次重要转型。DMIT Eyeball套餐主要聚焦于为中国大陆用户提供高质量的直连线路。公司在...

      CN2 GIA是什么?探索高效国际网络连接的解决方案

      在当今这个数字化时代,网络连接的稳定性与速度成为了企业和个人活动的重中之重。CN2 GIA,或称为全球互联网接入(Global Internet Access),是由中国电信提供的一项高级国际专线网络服务。这项服务在CN2产品线中占据了顶级位置,专为那些需要快速且稳定的国际网络连接的用户而设计。通过...

      选择合适的域名注册商,轻松完成域名注册流程

      在如今数字化的时代,域名注册变得越来越重要。它不仅是建立个人或企业在线身份的第一步,也是一种品牌保护和业务推广的手段。在互联网上,域名就像是你的地址,方便别人找到你。因此,选择一个合适的域名注册商显得尤为重要。 域名注册商,是那些提供域名注册、管理和支持服务的公司。可以想象成他们是光明正大的中介,帮...

      GPU租用市场的崛起与行业应用分析

      在过去的几年中,GPU租用市场的发展速度让我惊叹,真的如雨后春笋般冒出。随着科技的不断进步和市场需求的增长,越来越多的人选择租用GPU来满足高性能计算的需求。这种选择不仅适用于企业,也吸引了许多个人用户。GPU租用为我们提供了便利,加速了各类计算密集型任务的完成。 GPU租用的定义非常简单,就是将高...