Procházet zdrojové kódy

feat:添加CodeReviewAgent毕业设计项目

jjyaoao před 7 měsíci
rodič
revize
72b080f023

+ 9 - 0
Co-creation-projects/EXAMPLE-ProjectTemplate/.env.example

@@ -0,0 +1,9 @@
+# LLM API密钥
+OPENAI_API_KEY=your_openai_api_key_here
+# ANTHROPIC_API_KEY=your_anthropic_api_key_here
+# DASHSCOPE_API_KEY=your_dashscope_api_key_here
+
+# 其他API密钥(根据项目需要添加)
+# AMAP_API_KEY=your_amap_api_key_here
+# UNSPLASH_ACCESS_KEY=your_unsplash_access_key_here
+

+ 105 - 0
Co-creation-projects/EXAMPLE-ProjectTemplate/README.md

@@ -0,0 +1,105 @@
+# 项目名称
+
+> 一句话描述你的项目
+
+## 📝 项目简介
+
+详细介绍你的项目:
+- 解决什么问题?
+- 有什么特色功能?
+- 适用于什么场景?
+
+## ✨ 核心功能
+
+- [ ] 功能1:描述
+- [ ] 功能2:描述
+- [ ] 功能3:描述
+
+## 🛠️ 技术栈
+
+- HelloAgents框架
+- 使用的智能体范式(如ReAct、Plan-and-Solve等)
+- 使用的工具和API
+- 其他依赖库
+
+## 🚀 快速开始
+
+### 环境要求
+
+- Python 3.10+
+- 其他要求
+
+### 安装依赖
+
+```bash
+pip install -r requirements.txt
+```
+
+### 配置API密钥
+
+```bash
+# 创建.env文件
+cp .env.example .env
+
+# 编辑.env文件,填入你的API密钥
+# OPENAI_API_KEY=your_key_here
+```
+
+### 运行项目
+
+```bash
+# 启动Jupyter Notebook
+jupyter lab
+
+# 打开main.ipynb并运行
+```
+
+## 📖 使用示例
+
+展示如何使用你的项目,最好包含代码示例和运行结果。
+
+```python
+# 示例代码
+from hello_agents import SimpleAgent
+
+agent = SimpleAgent(name="示例智能体")
+result = agent.run("你的输入")
+print(result)
+```
+
+## 🎯 项目亮点
+
+- 亮点1:说明
+- 亮点2:说明
+- 亮点3:说明
+
+## 📊 性能评估
+
+如果有评估结果,展示在这里:
+- 准确率:XX%
+- 响应时间:XX秒
+- 其他指标
+
+## 🔮 未来计划
+
+- [ ] 待实现的功能1
+- [ ] 待实现的功能2
+- [ ] 待优化的部分
+
+## 🤝 贡献指南
+
+欢迎提出Issue和Pull Request!
+
+## 📄 许可证
+
+MIT License
+
+## 👤 作者
+
+- GitHub: [@你的用户名](https://github.com/你的用户名)
+- Email: 你的邮箱(可选)
+
+## 🙏 致谢
+
+感谢Datawhale社区和Hello-Agents项目!
+

+ 204 - 0
Co-creation-projects/EXAMPLE-ProjectTemplate/main.ipynb

@@ -0,0 +1,204 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 项目名称\n",
+    "\n",
+    "## 项目简介\n",
+    "简要介绍项目的目标和功能\n",
+    "\n",
+    "## 作者信息\n",
+    "- 姓名:XXX\n",
+    "- GitHub:@XXX\n",
+    "- 日期:2025-XX-XX"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 第1部分:环境配置"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# 安装依赖(如果需要)\n",
+    "# !pip install -q hello-agents[all]\n",
+    "\n",
+    "# 导入必要的库\n",
+    "from hello_agents import SimpleAgent, HelloAgentsLLM\n",
+    "from hello_agents.tools import BaseTool\n",
+    "import os\n",
+    "from dotenv import load_dotenv\n",
+    "\n",
+    "# 加载环境变量\n",
+    "load_dotenv()\n",
+    "\n",
+    "print(\"✅ 环境配置完成\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 第2部分:工具定义"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "class CustomTool(BaseTool):\n",
+    "    \"\"\"自定义工具类\"\"\"\n",
+    "    \n",
+    "    name = \"tool_name\"\n",
+    "    description = \"工具描述\"\n",
+    "    \n",
+    "    def run(self, query: str) -> str:\n",
+    "        \"\"\"工具执行逻辑\"\"\"\n",
+    "        # 实现你的工具逻辑\n",
+    "        return f\"处理结果:{query}\"\n",
+    "\n",
+    "print(\"✅ 工具定义完成\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 第3部分:智能体构建"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# 创建LLM\n",
+    "llm = HelloAgentsLLM()\n",
+    "\n",
+    "# 定义系统提示词\n",
+    "system_prompt = \"\"\"你是一个智能助手。\n",
+    "\n",
+    "你的任务是:\n",
+    "1. 理解用户的需求\n",
+    "2. 使用合适的工具\n",
+    "3. 提供有帮助的回答\n",
+    "\"\"\"\n",
+    "\n",
+    "# 创建智能体\n",
+    "agent = SimpleAgent(\n",
+    "    name=\"示例智能体\",\n",
+    "    llm=llm,\n",
+    "    system_prompt=system_prompt\n",
+    ")\n",
+    "\n",
+    "# 添加工具\n",
+    "agent.add_tool(CustomTool())\n",
+    "\n",
+    "print(\"✅ 智能体构建完成\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 第4部分:功能演示"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# 示例1:基础功能\n",
+    "print(\"=== 示例1:基础功能 ===\")\n",
+    "result = agent.run(\"你的测试输入\")\n",
+    "print(result)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# 示例2:复杂场景\n",
+    "print(\"\\n=== 示例2:复杂场景 ===\")\n",
+    "result = agent.run(\"更复杂的测试输入\")\n",
+    "print(result)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 第5部分:性能评估(可选)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# 评估代码\n",
+    "# 例如:测试准确率、响应时间等\n",
+    "\n",
+    "print(\"✅ 评估完成\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 第6部分:总结与展望\n",
+    "\n",
+    "### 项目总结\n",
+    "\n",
+    "#### 实现的功能\n",
+    "- 功能1\n",
+    "- 功能2\n",
+    "\n",
+    "#### 遇到的挑战\n",
+    "- 挑战1及解决方案\n",
+    "- 挑战2及解决方案\n",
+    "\n",
+    "#### 未来改进方向\n",
+    "- 改进1\n",
+    "- 改进2"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.10.0"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}

+ 14 - 0
Co-creation-projects/EXAMPLE-ProjectTemplate/requirements.txt

@@ -0,0 +1,14 @@
+# 核心依赖
+hello-agents[all]>=0.2.7
+
+# LLM相关
+openai>=1.0.0
+
+# 数据处理
+pandas>=2.0.0
+numpy>=1.24.0
+
+# 其他工具
+python-dotenv>=1.0.0
+requests>=2.31.0
+

+ 14 - 0
Co-creation-projects/jjyaoao-CodeReviewAgent/.env.example

@@ -0,0 +1,14 @@
+# HelloAgents LLM配置
+
+# 模型名称
+LLM_MODEL_ID=Qwen/Qwen2.5-72B-Instruct
+
+# API密钥
+LLM_API_KEY=your_api_key_here
+
+# 服务地址
+LLM_BASE_URL=https://api-inference.modelscope.cn/v1/
+
+# 超时时间(可选,默认60秒)
+LLM_TIMEOUT=60
+

+ 145 - 0
Co-creation-projects/jjyaoao-CodeReviewAgent/README.md

@@ -0,0 +1,145 @@
+# CodeReviewAgent - 智能代码审查助手
+
+> 基于HelloAgents框架的智能代码审查工具
+
+## 📝 项目简介
+
+CodeReviewAgent是一个智能代码审查助手,能够自动分析Python代码的质量、发现潜在问题并提供优化建议。
+
+### 核心功能
+
+- ✅ 代码结构分析:统计函数、类、代码行数等
+- ✅ 风格检查:检查是否符合PEP 8规范
+- ✅ 智能建议:基于LLM提供深度分析和优化建议
+- ✅ 报告生成:生成Markdown格式的审查报告
+
+## 🛠️ 技术栈
+
+- HelloAgents框架(SimpleAgent)
+- Python AST模块(代码解析)
+- OpenAI API(智能分析)
+
+## 🚀 快速开始
+
+### 安装依赖
+
+```bash
+pip install -r requirements.txt
+```
+
+### 配置LLM参数
+
+**方式1: 使用.env文件(推荐)**
+
+```bash
+# 复制示例文件
+cp .env.example .env
+
+# 编辑.env文件,填入你的配置
+# LLM_MODEL_ID=Qwen/Qwen2.5-72B-Instruct
+# LLM_API_KEY=your_api_key_here
+# LLM_BASE_URL=https://api-inference.modelscope.cn/v1/
+```
+
+**方式2: 直接在Notebook中设置(已配置)**
+
+项目已在`main.ipynb`中预配置了ModelScope的API,可以直接使用。如需修改,编辑第1部分的配置代码:
+
+```python
+os.environ["LLM_MODEL_ID"] = "your_model"
+os.environ["LLM_API_KEY"] = "your_key"
+os.environ["LLM_BASE_URL"] = "your_api_url"
+```
+
+### 运行项目
+
+```bash
+jupyter lab
+# 打开main.ipynb并运行所有单元格
+```
+
+## 📖 使用示例
+
+### 快速体验
+
+打开`main.ipynb`,运行「第0部分:快速演示」,即可快速了解项目功能。
+
+### 完整功能
+
+1. 将待审查的代码放入`data/sample_code.py`
+2. 依次运行`main.ipynb`的第1-7部分
+3. 查看生成的审查报告`outputs/review_report.md`
+
+## 🎯 项目亮点
+
+- **自动化**:无需人工逐行检查,自动发现问题
+- **智能化**:利用LLM理解代码语义,提供深度建议
+- **可扩展**:易于添加新的检查规则和工具
+
+## 📂 项目结构
+
+```
+jjyaoao-CodeReviewAgent/
+├── README.md              # 项目说明文档
+├── requirements.txt       # 依赖列表
+├── .gitignore            # Git忽略文件
+├── .env.example          # 环境变量示例
+├── main.ipynb            # 主程序(包含快速演示和完整功能)
+├── data/
+│   └── sample_code.py    # 示例代码
+└── outputs/
+    └── review_report.md  # 审查报告
+```
+
+## 🔧 技术实现
+
+### 工具系统
+
+1. **CodeAnalysisTool**: 使用Python AST模块解析代码结构
+2. **StyleCheckTool**: 检查PEP 8代码风格规范
+
+### 智能体设计
+
+使用HelloAgents的SimpleAgent,配合自定义工具实现智能代码审查。
+
+## 📊 示例输出
+
+```markdown
+# 代码审查报告
+
+## 代码结构分析
+- 函数数量: 3
+- 类数量: 1
+- 代码行数: 45
+
+## 风格问题
+- 第12行:超过79个字符
+- 第25行:缩进不规范
+
+## 优化建议
+1. 建议将长函数拆分为多个小函数
+2. 添加类型注解提高代码可读性
+3. 补充文档字符串
+```
+
+## 🚧 未来改进
+
+- [ ] 支持更多编程语言(JavaScript、Java等)
+- [ ] 添加安全漏洞检测
+- [ ] 集成更多静态分析工具
+- [ ] 支持批量文件审查
+- [ ] 生成HTML格式报告
+
+## 👤 作者
+
+- GitHub: [@jjyaoao](https://github.com/jjyaoao)
+- 项目链接:[CodeReviewAgent](https://github.com/datawhalechina/Hello-Agents/tree/main/Co-creation-projects/jjyaoao-CodeReviewAgent)
+
+## 🙏 致谢
+
+感谢Datawhale社区和Hello-Agents项目!
+
+## 📄 许可证
+
+本项目采用MIT许可证。
+

+ 44 - 0
Co-creation-projects/jjyaoao-CodeReviewAgent/data/sample_code.py

@@ -0,0 +1,44 @@
+"""
+示例代码:一个简单的用户管理系统
+用于演示代码审查功能
+"""
+
+class UserManager:
+    """用户管理类"""
+    
+    def __init__(self):
+        self.users = []
+    
+    def add_user(self, name, age, email):
+        """添加用户"""
+        user = {"name": name, "age": age, "email": email}
+        self.users.append(user)
+        return True
+    
+    def get_user(self, name):
+        """获取用户信息"""
+        for user in self.users:
+            if user["name"] == name:
+                return user
+        return None
+    
+    def delete_user(self, name):
+        """删除用户"""
+        for i, user in enumerate(self.users):
+            if user["name"] == name:
+                del self.users[i]
+                return True
+        return False
+
+def calculate_average_age(users):
+    """计算平均年龄"""
+    total = 0
+    for user in users:
+        total += user["age"]
+    return total / len(users)
+
+def send_email(email, message):
+    """发送邮件(模拟)"""
+    print(f"发送邮件到 {email}: {message}")
+    return True
+

+ 771 - 0
Co-creation-projects/jjyaoao-CodeReviewAgent/main.ipynb

@@ -0,0 +1,771 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# CodeReviewAgent - 智能代码审查助手\n",
+    "\n",
+    "本项目演示如何使用HelloAgents框架构建一个智能代码审查助手。\n",
+    "\n",
+    "## 📖 使用说明\n",
+    "\n",
+    "- **快速体验**: 运行「第0部分」的快速演示\n",
+    "- **完整功能**: 依次运行第1-7部分,体验完整的代码审查流程"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "---\n",
+    "\n",
+    "## 第0部分:快速演示 ⚡\n",
+    "\n",
+    "如果你想快速了解项目功能,可以运行这个简化版本。"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "✅ 库导入和配置完成\n"
+     ]
+    }
+   ],
+   "source": [
+    "# 快速演示 - 导入库和配置\n",
+    "from hello_agents import SimpleAgent, HelloAgentsLLM\n",
+    "from hello_agents.tools import Tool, ToolParameter\n",
+    "from typing import Dict, Any, List\n",
+    "import ast\n",
+    "import os\n",
+    "\n",
+    "# 配置LLM参数\n",
+    "os.environ[\"LLM_MODEL_ID\"] = \"Qwen/Qwen2.5-72B-Instruct\"\n",
+    "os.environ[\"LLM_API_KEY\"] = \"your_api_key_here\"\n",
+    "os.environ[\"LLM_BASE_URL\"] = \"https://api-inference.modelscope.cn/v1/\"\n",
+    "os.environ[\"LLM_TIMEOUT\"] = \"60\"\n",
+    "\n",
+    "print(\"✅ 库导入和配置完成\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 14,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "✅ 工具定义完成\n"
+     ]
+    }
+   ],
+   "source": [
+    "# 快速演示 - 定义简单的代码分析工具\n",
+    "class QuickAnalysisTool(Tool):\n",
+    "    def __init__(self):\n",
+    "        super().__init__(\n",
+    "            name=\"quick_analysis\",\n",
+    "            description=\"快速分析Python代码结构\"\n",
+    "        )\n",
+    "    \n",
+    "    def run(self, parameters: Dict[str, Any]) -> str:\n",
+    "        code = parameters.get(\"code\", \"\")\n",
+    "        if not code:\n",
+    "            return \"错误:代码不能为空\"\n",
+    "        \n",
+    "        try:\n",
+    "            tree = ast.parse(code)\n",
+    "            functions = [n.name for n in ast.walk(tree) if isinstance(n, ast.FunctionDef)]\n",
+    "            classes = [n.name for n in ast.walk(tree) if isinstance(n, ast.ClassDef)]\n",
+    "            return f\"发现{len(classes)}个类、{len(functions)}个函数: {', '.join(functions)}\"\n",
+    "        except Exception as e:\n",
+    "            return f\"代码解析失败: {str(e)}\"\n",
+    "    \n",
+    "    def get_parameters(self) -> List[ToolParameter]:\n",
+    "        return [\n",
+    "            ToolParameter(\n",
+    "                name=\"code\",\n",
+    "                type=\"string\",\n",
+    "                description=\"要分析的Python代码\",\n",
+    "                required=True\n",
+    "            )\n",
+    "        ]\n",
+    "\n",
+    "print(\"✅ 工具定义完成\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 15,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "✅ 工具 'quick_analysis' 已注册。\n",
+      "✅ 智能体创建完成\n",
+      "✅ 可用工具: ['quick_analysis']\n"
+     ]
+    }
+   ],
+   "source": [
+    "# 快速演示 - 创建工具注册表和智能体\n",
+    "from hello_agents import ToolRegistry\n",
+    "\n",
+    "# 创建工具注册表\n",
+    "quick_registry = ToolRegistry()\n",
+    "quick_registry.register_tool(QuickAnalysisTool())\n",
+    "\n",
+    "# 创建智能体\n",
+    "quick_agent = SimpleAgent(\n",
+    "    name=\"快速审查助手\",\n",
+    "    llm=HelloAgentsLLM(),\n",
+    "    system_prompt=\"你是代码审查助手,使用工具分析代码并给出简要建议。\",\n",
+    "    tool_registry=quick_registry\n",
+    ")\n",
+    "\n",
+    "print(\"✅ 智能体创建完成\")\n",
+    "print(f\"✅ 可用工具: {list(quick_registry._tools.keys())}\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 16,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "=== 快速演示:分析测试代码 ===\n",
+      "看来我们遇到了一些技术问题,导致代码无法通过工具进行分析。不过,我可以直接为你提供一些建议和观察结果。\n",
+      "\n",
+      "### 代码分析\n",
+      "\n",
+      "#### 1. **函数定义**\n",
+      "- `hello()` 和 `world()` 函数都很简单,分别打印 \"Hello\" 和 \"World\"。这部分代码是正确的,没有问题。\n",
+      "\n",
+      "#### 2. **类定义**\n",
+      "- `Greeter` 类包含一个 `greet` 方法,该方法调用了 `hello()` 和 `world()` 函数。这也是正确的。\n",
+      "\n",
+      "### 建议\n",
+      "\n",
+      "1. **代码风格**\n",
+      "   - 代码风格符合 PEP 8 规范,这是 Python 的官方编码风格指南。建议保持这种风格。\n",
+      "   - 你可以考虑添加一些文档字符串(docstrings)来描述每个函数和类的作用。例如:\n",
+      "     ```python\n",
+      "     def hello():\n",
+      "         \"\"\"Prints 'Hello'\"\"\"\n",
+      "         print(\"Hello\")\n",
+      "\n",
+      "     def world():\n",
+      "         \"\"\"Prints 'World'\"\"\"\n",
+      "         print(\"World\")\n",
+      "\n",
+      "     class Greeter:\n",
+      "         \"\"\"A class to greet the world\"\"\"\n",
+      "\n",
+      "         def greet(self):\n",
+      "             \"\"\"Prints 'Hello World'\"\"\"\n",
+      "             hello()\n",
+      "             world()\n",
+      "     ```\n",
+      "\n",
+      "2. **测试**\n",
+      "   - 为了确保代码按预期工作,可以编写一些简单的测试用例。例如:\n",
+      "     ```python\n",
+      "     if __name__ == \"__main__\":\n",
+      "         greeter = Greeter()\n",
+      "         greeter.greet()\n",
+      "     ```\n",
+      "   - 这样可以在运行脚本时调用 `greet` 方法,验证输出是否正确。\n",
+      "\n",
+      "3. **扩展性**\n",
+      "   - 如果未来需要扩展 `Greeter` 类的功能,可以考虑添加更多的方法或属性。例如,可以添加一个 `set_greeting` 方法来动态设置问候语。\n",
+      "\n",
+      "### 总结\n",
+      "你的代码已经很简洁明了,但可以通过添加文档字符串和测试用例来提高可读性和可靠性。希望这些建议对你有帮助!如果还有其他问题或需要进一步的分析,请告诉我。\n",
+      "\n",
+      "✅ 快速演示完成!\n",
+      "\n",
+      "💡 提示:继续运行下面的单元格,体验完整功能\n"
+     ]
+    }
+   ],
+   "source": [
+    "# 快速演示 - 测试代码\n",
+    "test_code = \"\"\"\n",
+    "def hello():\n",
+    "    print(\"Hello\")\n",
+    "\n",
+    "def world():\n",
+    "    print(\"World\")\n",
+    "\n",
+    "class Greeter:\n",
+    "    def greet(self):\n",
+    "        hello()\n",
+    "        world()\n",
+    "\"\"\"\n",
+    "\n",
+    "print(\"=== 快速演示:分析测试代码 ===\")\n",
+    "result = quick_agent.run(f\"请分析这段代码:\\n{test_code}\")\n",
+    "print(result)\n",
+    "print(\"\\n✅ 快速演示完成!\")\n",
+    "print(\"\\n💡 提示:继续运行下面的单元格,体验完整功能\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "---\n",
+    "\n",
+    "# 完整版代码审查系统\n",
+    "\n",
+    "下面是完整的代码审查系统,包含更强大的分析功能。"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 第1部分:环境配置"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "✅ 环境配置完成\n",
+      "✅ 使用模型: Qwen/Qwen2.5-72B-Instruct\n",
+      "✅ API地址: https://api-inference.modelscope.cn/v1/\n"
+     ]
+    }
+   ],
+   "source": [
+    "# 导入必要的库\n",
+    "from hello_agents import SimpleAgent, HelloAgentsLLM\n",
+    "from hello_agents.tools import Tool, ToolParameter\n",
+    "from typing import Dict, Any, List\n",
+    "import ast\n",
+    "import os\n",
+    "\n",
+    "# 配置LLM参数\n",
+    "os.environ[\"LLM_MODEL_ID\"] = \"Qwen/Qwen2.5-72B-Instruct\"\n",
+    "os.environ[\"LLM_API_KEY\"] = \"your_api_key_here\"\n",
+    "os.environ[\"LLM_BASE_URL\"] = \"https://api-inference.modelscope.cn/v1/\"\n",
+    "os.environ[\"LLM_TIMEOUT\"] = \"60\"\n",
+    "\n",
+    "print(\"✅ 环境配置完成\")\n",
+    "print(f\"✅ 使用模型: {os.getenv('LLM_MODEL_ID')}\")\n",
+    "print(f\"✅ API地址: {os.getenv('LLM_BASE_URL')}\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 第2部分:定义代码分析工具"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 18,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "✅ CodeAnalysisTool定义完成\n"
+     ]
+    }
+   ],
+   "source": [
+    "class CodeAnalysisTool(Tool):\n",
+    "    \"\"\"代码静态分析工具\"\"\"\n",
+    "\n",
+    "    def __init__(self):\n",
+    "        super().__init__(\n",
+    "            name=\"code_analysis\",\n",
+    "            description=\"分析Python代码的结构、复杂度和潜在问题\"\n",
+    "        )\n",
+    "\n",
+    "    def run(self, parameters: Dict[str, Any]) -> str:\n",
+    "        \"\"\"分析代码并返回结果\"\"\"\n",
+    "        code = parameters.get(\"code\", \"\")\n",
+    "        if not code:\n",
+    "            return \"错误:代码不能为空\"\n",
+    "        \n",
+    "        try:\n",
+    "            tree = ast.parse(code)\n",
+    "\n",
+    "            # 统计信息\n",
+    "            functions = [node for node in ast.walk(tree) if isinstance(node, ast.FunctionDef)]\n",
+    "            classes = [node for node in ast.walk(tree) if isinstance(node, ast.ClassDef)]\n",
+    "\n",
+    "            result = {\n",
+    "                \"函数数量\": len(functions),\n",
+    "                \"类数量\": len(classes),\n",
+    "                \"代码行数\": len(code.split('\\n')),\n",
+    "                \"函数列表\": [f.name for f in functions],\n",
+    "                \"类列表\": [c.name for c in classes]\n",
+    "            }\n",
+    "\n",
+    "            return str(result)\n",
+    "        except SyntaxError as e:\n",
+    "            return f\"语法错误:{str(e)}\"\n",
+    "    \n",
+    "    def get_parameters(self) -> List[ToolParameter]:\n",
+    "        return [\n",
+    "            ToolParameter(\n",
+    "                name=\"code\",\n",
+    "                type=\"string\",\n",
+    "                description=\"要分析的Python代码\",\n",
+    "                required=True\n",
+    "            )\n",
+    "        ]\n",
+    "\n",
+    "print(\"✅ CodeAnalysisTool定义完成\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 19,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "✅ StyleCheckTool定义完成\n"
+     ]
+    }
+   ],
+   "source": [
+    "class StyleCheckTool(Tool):\n",
+    "    \"\"\"代码风格检查工具\"\"\"\n",
+    "\n",
+    "    def __init__(self):\n",
+    "        super().__init__(\n",
+    "            name=\"style_check\",\n",
+    "            description=\"检查代码是否符合PEP 8规范\"\n",
+    "        )\n",
+    "\n",
+    "    def run(self, parameters: Dict[str, Any]) -> str:\n",
+    "        \"\"\"检查代码风格\"\"\"\n",
+    "        code = parameters.get(\"code\", \"\")\n",
+    "        if not code:\n",
+    "            return \"错误:代码不能为空\"\n",
+    "        \n",
+    "        issues = []\n",
+    "\n",
+    "        lines = code.split('\\n')\n",
+    "        for i, line in enumerate(lines, 1):\n",
+    "            # 检查行长度\n",
+    "            if len(line) > 79:\n",
+    "                issues.append(f\"第{i}行:超过79个字符\")\n",
+    "\n",
+    "            # 检查缩进\n",
+    "            if line.startswith(' ') and not line.startswith('    '):\n",
+    "                if len(line) - len(line.lstrip()) not in [0, 4, 8, 12]:\n",
+    "                    issues.append(f\"第{i}行:缩进不规范\")\n",
+    "\n",
+    "        if not issues:\n",
+    "            return \"代码风格良好,符合PEP 8规范\"\n",
+    "        return \"发现以下问题:\\n\" + \"\\n\".join(issues)\n",
+    "    \n",
+    "    def get_parameters(self) -> List[ToolParameter]:\n",
+    "        return [\n",
+    "            ToolParameter(\n",
+    "                name=\"code\",\n",
+    "                type=\"string\",\n",
+    "                description=\"要检查的Python代码\",\n",
+    "                required=True\n",
+    "            )\n",
+    "        ]\n",
+    "\n",
+    "print(\"✅ StyleCheckTool定义完成\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 第3部分:创建智能体"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 20,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "✅ 工具 'code_analysis' 已注册。\n",
+      "✅ 工具 'style_check' 已注册。\n",
+      "✅ 智能体创建完成\n",
+      "智能体名称: 代码审查助手\n",
+      "可用工具: ['code_analysis', 'style_check']\n"
+     ]
+    }
+   ],
+   "source": [
+    "# 导入工具注册表\n",
+    "from hello_agents import ToolRegistry\n",
+    "\n",
+    "# 创建工具注册表\n",
+    "tool_registry = ToolRegistry()\n",
+    "tool_registry.register_tool(CodeAnalysisTool())\n",
+    "tool_registry.register_tool(StyleCheckTool())\n",
+    "\n",
+    "# 初始化LLM\n",
+    "llm = HelloAgentsLLM()\n",
+    "\n",
+    "# 定义系统提示词\n",
+    "system_prompt = \"\"\"你是一位经验丰富的代码审查专家。你的任务是:\n",
+    "\n",
+    "1. 使用code_analysis工具分析代码结构\n",
+    "2. 使用style_check工具检查代码风格\n",
+    "3. 基于分析结果,提供详细的审查报告\n",
+    "\n",
+    "审查报告应包括:\n",
+    "- 代码结构分析\n",
+    "- 风格问题\n",
+    "- 潜在bug\n",
+    "- 性能优化建议\n",
+    "- 最佳实践建议\n",
+    "\n",
+    "请以Markdown格式输出报告。\"\"\"\n",
+    "\n",
+    "# 创建智能体\n",
+    "agent = SimpleAgent(\n",
+    "    name=\"代码审查助手\",\n",
+    "    llm=llm,\n",
+    "    system_prompt=system_prompt,\n",
+    "    tool_registry=tool_registry\n",
+    ")\n",
+    "\n",
+    "print(\"✅ 智能体创建完成\")\n",
+    "print(f\"智能体名称: {agent.name}\")\n",
+    "print(f\"可用工具: {list(tool_registry._tools.keys())}\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 第4部分:读取示例代码"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 21,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "=== 待审查的代码 ===\n",
+      "\"\"\"\n",
+      "示例代码:一个简单的用户管理系统\n",
+      "用于演示代码审查功能\n",
+      "\"\"\"\n",
+      "\n",
+      "class UserManager:\n",
+      "    \"\"\"用户管理类\"\"\"\n",
+      "    \n",
+      "    def __init__(self):\n",
+      "        self.users = []\n",
+      "    \n",
+      "    def add_user(self, name, age, email):\n",
+      "        \"\"\"添加用户\"\"\"\n",
+      "        user = {\"name\": name, \"age\": age, \"email\": email}\n",
+      "        self.users.append(user)\n",
+      "        return True\n",
+      "    \n",
+      "    def get_user(self, name):\n",
+      "        \"\"\"获取用户信息\"\"\"\n",
+      "        for user in self.users:\n",
+      "            if user[\"name\"] == name:\n",
+      "                return user\n",
+      "        return None\n",
+      "    \n",
+      "    def delete_user(self, name):\n",
+      "        \"\"\"删除用户\"\"\"\n",
+      "        for i, user in enumerate(self.users):\n",
+      "            if user[\"name\"] == name:\n",
+      "                del self.users[i]\n",
+      "                return True\n",
+      "        return False\n",
+      "\n",
+      "def calculate_average_age(users):\n",
+      "    \"\"\"计算平均年龄\"\"\"\n",
+      "    total = 0\n",
+      "    for user in users:\n",
+      "        total += user[\"age\"]\n",
+      "    return total / len(users)\n",
+      "\n",
+      "def send_email(email, message):\n",
+      "    \"\"\"发送邮件(模拟)\"\"\"\n",
+      "    print(f\"发送邮件到 {email}: {message}\")\n",
+      "    return True\n",
+      "\n",
+      "\n",
+      "\n",
+      "==================================================\n",
+      "\n"
+     ]
+    }
+   ],
+   "source": [
+    "# 读取示例代码\n",
+    "with open(\"data/sample_code.py\", \"r\", encoding=\"utf-8\") as f:\n",
+    "    sample_code = f.read()\n",
+    "\n",
+    "print(\"=== 待审查的代码 ===\")\n",
+    "print(sample_code)\n",
+    "print(\"\\n\" + \"=\"*50 + \"\\n\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 第5部分:执行代码审查"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 22,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "=== 开始代码审查 ===\n",
+      "## 代码审查报告\n",
+      "\n",
+      "### 代码结构分析\n",
+      "\n",
+      "根据`code_analysis`工具的结果,代码中没有语法错误。以下是代码结构的详细分析:\n",
+      "\n",
+      "1. **类定义**:\n",
+      "   - `UserManager` 类负责用户管理,包含三个方法:`add_user`, `get_user`, 和 `delete_user`。\n",
+      "   - 类的初始化方法 `__init__` 创建了一个空的用户列表 `self.users`。\n",
+      "\n",
+      "2. **方法分析**:\n",
+      "   - `add_user(name, age, email)`:将用户信息添加到用户列表中。返回 `True` 表示操作成功。\n",
+      "   - `get_user(name)`:根据用户名查找并返回用户信息。如果找不到用户,返回 `None`。\n",
+      "   - `delete_user(name)`:根据用户名从用户列表中删除用户。如果删除成功,返回 `True`,否则返回 `False`。\n",
+      "\n",
+      "3. **辅助函数**:\n",
+      "   - `calculate_average_age(users)`:计算给定用户列表的平均年龄。\n",
+      "   - `send_email(email, message)`:模拟发送邮件的功能,实际只是打印一条消息。\n",
+      "\n",
+      "### 风格问题\n",
+      "\n",
+      "根据`style_check`工具的结果,代码存在以下风格问题:\n",
+      "\n",
+      "1. **行长度**:\n",
+      "   - 第1行超过了79个字符。建议将长行拆分成多行或减少注释的长度。\n",
+      "\n",
+      "### 潜在Bug\n",
+      "\n",
+      "1. **删除用户时的索引问题**:\n",
+      "   - 在 `delete_user` 方法中,删除用户后,列表的索引会发生变化。虽然当前实现可以正常工作,但为了避免潜在的索引问题,建议使用列表推导或其他更安全的方法来删除元素。\n",
+      "\n",
+      "### 性能优化建议\n",
+      "\n",
+      "1. **查找用户**:\n",
+      "   - `get_user` 方法在最坏情况下需要遍历整个用户列表。如果用户数量较多,可以考虑使用字典来存储用户信息,以提高查找效率。\n",
+      "\n",
+      "2. **计算平均年龄**:\n",
+      "   - `calculate_average_age` 方法在每次调用时都需要遍历整个用户列表。如果用户列表非常大,可以考虑缓存计算结果或使用其他数据结构来优化性能。\n",
+      "\n",
+      "### 最佳实践建议\n",
+      "\n",
+      "1. **异常处理**:\n",
+      "   - 在 `add_user` 和 `delete_user` 方法中,可以添加异常处理机制,以应对可能的输入错误或意外情况。\n",
+      "\n",
+      "2. **日志记录**:\n",
+      "   - 使用日志记录库(如 `logging`)替代 `print` 函数,以便更好地管理和调试代码。\n",
+      "\n",
+      "3. **单元测试**:\n",
+      "   - 编写单元测试来验证每个方法的正确性,确保代码的稳定性和可靠性。\n",
+      "\n",
+      "4. **文档字符串**:\n",
+      "   - 虽然代码已经包含了文档字符串,但可以进一步细化和扩展,特别是对于复杂的逻辑和边缘情况。\n",
+      "\n",
+      "### 代码改进示例\n",
+      "\n",
+      "以下是改进后的代码示例:\n",
+      "\n",
+      "```python\n",
+      "\"\"\"\n",
+      "示例代码:一个简单的用户管理系统\n",
+      "用于演示代码审查功能\n",
+      "\"\"\"\n",
+      "\n",
+      "import logging\n",
+      "\n",
+      "# 配置日志记录\n",
+      "logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')\n",
+      "\n",
+      "class UserManager:\n",
+      "    \"\"\"用户管理类\"\"\"\n",
+      "    \n",
+      "    def __init__(self):\n",
+      "        self.users = {}\n",
+      "    \n",
+      "    def add_user(self, name, age, email):\n",
+      "        \"\"\"添加用户\"\"\"\n",
+      "        if name in self.users:\n",
+      "            logging.warning(f\"用户 {name} 已经存在\")\n",
+      "            return False\n",
+      "        self.users[name] = {\"name\": name, \"age\": age, \"email\": email}\n",
+      "        return True\n",
+      "    \n",
+      "    def get_user(self, name):\n",
+      "        \"\"\"获取用户信息\"\"\"\n",
+      "        return self.users.get(name)\n",
+      "    \n",
+      "    def delete_user(self, name):\n",
+      "        \"\"\"删除用户\"\"\"\n",
+      "        if name in self.users:\n",
+      "            del self.users[name]\n",
+      "            return True\n",
+      "        return False\n",
+      "\n",
+      "def calculate_average_age(users):\n",
+      "    \"\"\"计算平均年龄\"\"\"\n",
+      "    if not users:\n",
+      "        return 0\n",
+      "    total = sum(user[\"age\"] for user in users.values())\n",
+      "    return total / len(users)\n",
+      "\n",
+      "def send_email(email, message):\n",
+      "    \"\"\"发送邮件(模拟)\"\"\"\n",
+      "    logging.info(f\"发送邮件到 {email}: {message}\")\n",
+      "    return True\n",
+      "\n",
+      "# 示例用法\n",
+      "if __name__ == \"__main__\":\n",
+      "    user_manager = UserManager()\n",
+      "    user_manager.add_user(\"Alice\", 30, \"alice@example.com\")\n",
+      "    user_manager.add_user(\"Bob\", 25, \"bob@example.com\")\n",
+      "    print(user_manager.get_user(\"Alice\"))\n",
+      "    user_manager.delete_user(\"Alice\")\n",
+      "    print(user_manager.get_user(\"Alice\"))\n",
+      "    average_age = calculate_average_age(user_manager.users)\n",
+      "    print(f\"平均年龄: {average_age}\")\n",
+      "    send_email(\"admin@example.com\", \"用户管理系统的平均年龄已更新\")\n",
+      "```\n",
+      "\n",
+      "### 总结\n",
+      "\n",
+      "通过这次代码审查,我们发现了几个风格问题和潜在的性能优化点。改进后的代码更加健壮、高效,并且易于维护。希望这些建议对您有所帮助。\n"
+     ]
+    }
+   ],
+   "source": [
+    "# 执行代码审查\n",
+    "print(\"=== 开始代码审查 ===\")\n",
+    "review_result = agent.run(f\"请审查以下Python代码:\\n\\n```python\\n{sample_code}\\n```\")\n",
+    "\n",
+    "print(review_result)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 第6部分:保存审查报告"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 23,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "\n",
+      "✅ 审查报告已保存到 outputs/review_report.md\n"
+     ]
+    }
+   ],
+   "source": [
+    "# 保存审查报告\n",
+    "with open(\"outputs/review_report.md\", \"w\", encoding=\"utf-8\") as f:\n",
+    "    f.write(review_result)\n",
+    "\n",
+    "print(\"\\n✅ 审查报告已保存到 outputs/review_report.md\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 第7部分:总结与展望\n",
+    "\n",
+    "### 实现的功能\n",
+    "- ✅ 代码结构分析\n",
+    "- ✅ PEP 8风格检查\n",
+    "- ✅ 智能审查报告生成\n",
+    "\n",
+    "### 遇到的挑战\n",
+    "- 如何准确解析Python代码结构\n",
+    "- 如何设计合理的提示词让LLM生成高质量报告\n",
+    "\n",
+    "### 未来改进方向\n",
+    "- 支持更多编程语言\n",
+    "- 添加安全漏洞检测\n",
+    "- 集成更多静态分析工具\n",
+    "- 支持批量文件审查"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "base",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.13.5"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}

+ 121 - 0
Co-creation-projects/jjyaoao-CodeReviewAgent/outputs/review_report.md

@@ -0,0 +1,121 @@
+## 代码审查报告
+
+### 代码结构分析
+
+根据`code_analysis`工具的结果,代码中没有语法错误。以下是代码结构的详细分析:
+
+1. **类定义**:
+   - `UserManager` 类负责用户管理,包含三个方法:`add_user`, `get_user`, 和 `delete_user`。
+   - 类的初始化方法 `__init__` 创建了一个空的用户列表 `self.users`。
+
+2. **方法分析**:
+   - `add_user(name, age, email)`:将用户信息添加到用户列表中。返回 `True` 表示操作成功。
+   - `get_user(name)`:根据用户名查找并返回用户信息。如果找不到用户,返回 `None`。
+   - `delete_user(name)`:根据用户名从用户列表中删除用户。如果删除成功,返回 `True`,否则返回 `False`。
+
+3. **辅助函数**:
+   - `calculate_average_age(users)`:计算给定用户列表的平均年龄。
+   - `send_email(email, message)`:模拟发送邮件的功能,实际只是打印一条消息。
+
+### 风格问题
+
+根据`style_check`工具的结果,代码存在以下风格问题:
+
+1. **行长度**:
+   - 第1行超过了79个字符。建议将长行拆分成多行或减少注释的长度。
+
+### 潜在Bug
+
+1. **删除用户时的索引问题**:
+   - 在 `delete_user` 方法中,删除用户后,列表的索引会发生变化。虽然当前实现可以正常工作,但为了避免潜在的索引问题,建议使用列表推导或其他更安全的方法来删除元素。
+
+### 性能优化建议
+
+1. **查找用户**:
+   - `get_user` 方法在最坏情况下需要遍历整个用户列表。如果用户数量较多,可以考虑使用字典来存储用户信息,以提高查找效率。
+
+2. **计算平均年龄**:
+   - `calculate_average_age` 方法在每次调用时都需要遍历整个用户列表。如果用户列表非常大,可以考虑缓存计算结果或使用其他数据结构来优化性能。
+
+### 最佳实践建议
+
+1. **异常处理**:
+   - 在 `add_user` 和 `delete_user` 方法中,可以添加异常处理机制,以应对可能的输入错误或意外情况。
+
+2. **日志记录**:
+   - 使用日志记录库(如 `logging`)替代 `print` 函数,以便更好地管理和调试代码。
+
+3. **单元测试**:
+   - 编写单元测试来验证每个方法的正确性,确保代码的稳定性和可靠性。
+
+4. **文档字符串**:
+   - 虽然代码已经包含了文档字符串,但可以进一步细化和扩展,特别是对于复杂的逻辑和边缘情况。
+
+### 代码改进示例
+
+以下是改进后的代码示例:
+
+```python
+"""
+示例代码:一个简单的用户管理系统
+用于演示代码审查功能
+"""
+
+import logging
+
+# 配置日志记录
+logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
+
+class UserManager:
+    """用户管理类"""
+    
+    def __init__(self):
+        self.users = {}
+    
+    def add_user(self, name, age, email):
+        """添加用户"""
+        if name in self.users:
+            logging.warning(f"用户 {name} 已经存在")
+            return False
+        self.users[name] = {"name": name, "age": age, "email": email}
+        return True
+    
+    def get_user(self, name):
+        """获取用户信息"""
+        return self.users.get(name)
+    
+    def delete_user(self, name):
+        """删除用户"""
+        if name in self.users:
+            del self.users[name]
+            return True
+        return False
+
+def calculate_average_age(users):
+    """计算平均年龄"""
+    if not users:
+        return 0
+    total = sum(user["age"] for user in users.values())
+    return total / len(users)
+
+def send_email(email, message):
+    """发送邮件(模拟)"""
+    logging.info(f"发送邮件到 {email}: {message}")
+    return True
+
+# 示例用法
+if __name__ == "__main__":
+    user_manager = UserManager()
+    user_manager.add_user("Alice", 30, "alice@example.com")
+    user_manager.add_user("Bob", 25, "bob@example.com")
+    print(user_manager.get_user("Alice"))
+    user_manager.delete_user("Alice")
+    print(user_manager.get_user("Alice"))
+    average_age = calculate_average_age(user_manager.users)
+    print(f"平均年龄: {average_age}")
+    send_email("admin@example.com", "用户管理系统的平均年龄已更新")
+```
+
+### 总结
+
+通过这次代码审查,我们发现了几个风格问题和潜在的性能优化点。改进后的代码更加健壮、高效,并且易于维护。希望这些建议对您有所帮助。

+ 13 - 0
Co-creation-projects/jjyaoao-CodeReviewAgent/requirements.txt

@@ -0,0 +1,13 @@
+# HelloAgents框架
+hello-agents[all]>=0.1.0
+
+# Jupyter环境
+jupyter>=1.0.0
+notebook>=7.0.0
+
+# 环境变量管理
+python-dotenv>=1.0.0
+
+# 代码分析工具
+ast-comments>=1.0.0
+

+ 0 - 12
docs/chapter15/第十五章 构建赛博小镇.md

@@ -1896,16 +1896,4 @@ NPC可以学习每个玩家的偏好和习惯。比如如果玩家经常和张
 
 尽管有这些挑战,AI NPC的未来仍然充满希望。随着LLM技术的发展,推理速度会越来越快,成本会越来越低。本地化的小型LLM也在快速发展,未来可能可以在玩家的设备上直接运行,完全不需要网络请求。AI技术与游戏的结合,将为玩家带来前所未有的体验。
 
-在本项目中,我们从零开始构建了HelloAgents框架,并用它实现了多个实用的应用。这些项目展示了智能体技术的强大能力和广阔前景。希望通过这本教程,你不仅学会了如何使用现有的智能体框架,更重要的是理解了智能体的核心原理,能够根据自己的需求设计和实现智能体系统。
-
-智能体技术正在快速发展,新的模型、新的框架、新的应用不断涌现。但无论技术如何变化,核心的思想是不变的:让AI能够感知环境、做出决策、执行任务,并从经验中学习。掌握了这些核心思想,你就能够跟上技术的发展,创造出更加智能和有用的应用。
-
-最后,感谢你完整阅读了本项目。希望你在学习的过程中有所收获,也希望你能够将所学应用到实际项目中,创造出令人惊叹的智能体应用。AI的未来充满无限可能,让我们一起探索和创造!
-
 在第五部分的毕业设计章节,我们将会学习如何用单智能体和多智能体构造通用智能体,这将是你的创作时间,敬请期待!
-
----
-
-<div align="center">
-  <strong>第十五章 完</strong>
-</div>

+ 93 - 51
docs/chapter16/第十六章 毕业设计.md

@@ -707,9 +707,10 @@ git push origin feature/你的项目名称
 
 <div align="center">
   <img src="https://raw.githubusercontent.com/datawhalechina/Hello-Agents/main/docs/images/16-figures/16-6-submit-pr.png" alt="" width="85%"/>
-  <p>图 16.6 提交Pull Request</p>
+  <p>图 16.5 提交Pull Request</p>
 </div>
 
+
 ### 16.5.3 响应Review意见
 
 提交PR后,社区成员会review你的代码并提出建议。请及时响应:
@@ -724,21 +725,9 @@ git push origin feature/你的项目名称
    ```
 4. <strong>回复评论</strong>:在GitHub上回复reviewer,说明你的修改
 
-<div align="center">
-  <img src="https://raw.githubusercontent.com/datawhalechina/Hello-Agents/main/docs/images/16-figures/16-7-review-comments.png" alt="" width="85%"/>
-  <p>图 16.7 响应Review意见</p>
-</div>
-
-常见的review意见:
-- 代码规范问题
-- 文档不够清晰
-- 缺少错误处理
-- 性能优化建议
-- 功能改进建议
-
 ## 16.6 示例项目展示
 
-为了帮助你更好地理解毕业设计的要求,这里展示一个完整的示例项目,请别担心,小的创意同样可以被收录,只需要动手实践都是值得珍惜的。
+为了帮助你更好地理解毕业设计的要求,这里展示一个完整的示例项目,请别担心,小的创意同样可以被收录,只要是自己动手的作品都是值得珍惜的。
 
 <strong>项目信息</strong>
 
@@ -750,14 +739,15 @@ git push origin feature/你的项目名称
 
 ```
 jjyaoao-CodeReviewAgent/
-├── README.md
-├── requirements.txt
-├── main.ipynb
-├── demo.ipynb
+├── README.md              # 项目文档
+├── requirements.txt       # 依赖列表
+├── main.ipynb            # 主程序(含快速演示和完整功能)
+├── .env.example          # 环境变量示例
+├── .gitignore            # Git忽略规则
 ├── data/
-│   └── sample_code.py
+│   └── sample_code.py    # 示例代码
 └── outputs/
-    └── review_report.md
+    └── review_report.md  # 示例报告
 ```
 
 <strong>核心代码片段(main.ipynb)</strong>
@@ -767,29 +757,46 @@ jjyaoao-CodeReviewAgent/
 # 智能代码审查助手
 # ========================================
 
-from hello_agents import SimpleAgent, HelloAgentsLLM
-from hello_agents.tools import BaseTool
+from hello_agents import SimpleAgent, HelloAgentsLLM, ToolRegistry
+from hello_agents.tools import Tool, ToolParameter
+from typing import Dict, Any, List
 import ast
 import os
 
+# ========================================
+# 0. 配置LLM参数
+# ========================================
+
+os.environ["LLM_MODEL_ID"] = "Qwen/Qwen2.5-72B-Instruct"
+os.environ["LLM_API_KEY"] = "your_api_key_here"
+os.environ["LLM_BASE_URL"] = "https://api-inference.modelscope.cn/v1/"
+os.environ["LLM_TIMEOUT"] = "60"
+
 # ========================================
 # 1. 定义代码分析工具
 # ========================================
 
-class CodeAnalysisTool(BaseTool):
+class CodeAnalysisTool(Tool):
     """代码静态分析工具"""
 
-    name = "code_analysis"
-    description = "分析Python代码的结构、复杂度和潜在问题"
+    def __init__(self):
+        super().__init__(
+            name="code_analysis",
+            description="分析Python代码的结构、复杂度和潜在问题"
+        )
 
-    def run(self, code: str) -> str:
+    def run(self, parameters: Dict[str, Any]) -> str:
         """分析代码并返回结果"""
+        code = parameters.get("code", "")
+        if not code:
+            return "错误:代码不能为空"
+
         try:
             tree = ast.parse(code)
-
-            # 统计信息
-            functions = [node for node in ast.walk(tree) if isinstance(node, ast.FunctionDef)]
-            classes = [node for node in ast.walk(tree) if isinstance(node, ast.ClassDef)]
+            functions = [node for node in ast.walk(tree)
+                        if isinstance(node, ast.FunctionDef)]
+            classes = [node for node in ast.walk(tree)
+                      if isinstance(node, ast.ClassDef)]
 
             result = {
                 "函数数量": len(functions),
@@ -798,28 +805,40 @@ class CodeAnalysisTool(BaseTool):
                 "函数列表": [f.name for f in functions],
                 "类列表": [c.name for c in classes]
             }
-
             return str(result)
         except SyntaxError as e:
             return f"语法错误:{str(e)}"
 
-class StyleCheckTool(BaseTool):
+    def get_parameters(self) -> List[ToolParameter]:
+        return [
+            ToolParameter(
+                name="code",
+                type="string",
+                description="要分析的Python代码",
+                required=True
+            )
+        ]
+
+class StyleCheckTool(Tool):
     """代码风格检查工具"""
 
-    name = "style_check"
-    description = "检查代码是否符合PEP 8规范"
+    def __init__(self):
+        super().__init__(
+            name="style_check",
+            description="检查代码是否符合PEP 8规范"
+        )
 
-    def run(self, code: str) -> str:
+    def run(self, parameters: Dict[str, Any]) -> str:
         """检查代码风格"""
-        issues = []
+        code = parameters.get("code", "")
+        if not code:
+            return "错误:代码不能为空"
 
+        issues = []
         lines = code.split('\n')
         for i, line in enumerate(lines, 1):
-            # 检查行长度
             if len(line) > 79:
                 issues.append(f"第{i}行:超过79个字符")
-
-            # 检查缩进
             if line.startswith(' ') and not line.startswith('    '):
                 if len(line) - len(line.lstrip()) not in [0, 4, 8, 12]:
                     issues.append(f"第{i}行:缩进不规范")
@@ -828,12 +847,29 @@ class StyleCheckTool(BaseTool):
             return "代码风格良好,符合PEP 8规范"
         return "发现以下问题:\n" + "\n".join(issues)
 
+    def get_parameters(self) -> List[ToolParameter]:
+        return [
+            ToolParameter(
+                name="code",
+                type="string",
+                description="要检查的Python代码",
+                required=True
+            )
+        ]
+
 # ========================================
-# 2. 创建智能体
+# 2. 创建工具注册表和智能体
 # ========================================
 
+# 创建工具注册表
+tool_registry = ToolRegistry()
+tool_registry.register_tool(CodeAnalysisTool())
+tool_registry.register_tool(StyleCheckTool())
+
+# 初始化LLM
 llm = HelloAgentsLLM()
 
+# 定义系统提示词
 system_prompt = """你是一位经验丰富的代码审查专家。你的任务是:
 
 1. 使用code_analysis工具分析代码结构
@@ -849,15 +885,14 @@ system_prompt = """你是一位经验丰富的代码审查专家。你的任务
 
 请以Markdown格式输出报告。"""
 
+# 创建智能体
 agent = SimpleAgent(
     name="代码审查助手",
     llm=llm,
-    system_prompt=system_prompt
+    system_prompt=system_prompt,
+    tool_registry=tool_registry
 )
 
-agent.add_tool(CodeAnalysisTool())
-agent.add_tool(StyleCheckTool())
-
 # ========================================
 # 3. 运行示例
 # ========================================
@@ -903,9 +938,9 @@ CodeReviewAgent是一个智能代码审查助手,能够自动分析Python代
 
 ## 🛠️ 技术栈
 
-- HelloAgents框架(SimpleAgent)
+- HelloAgents框架(SimpleAgent + ToolRegistry
 - Python AST模块(代码解析)
-- OpenAI API(智能分析
+- ModelScope API(Qwen2.5-72B模型
 
 ## 🚀 快速开始
 
@@ -915,13 +950,19 @@ CodeReviewAgent是一个智能代码审查助手,能够自动分析Python代
 pip install -r requirements.txt
 \`\`\`
 
-### 配置API密钥
+### 配置LLM参数
+
+**方式1: 使用.env文件**
 
 \`\`\`bash
-# 创建.env文件
-echo "OPENAI_API_KEY=your_key_here" > .env
+cp .env.example .env
+# 编辑.env文件,填入你的API密钥
 \`\`\`
 
+**方式2: 直接在Notebook中设置**
+
+项目已预配置ModelScope API,可直接运行。如需修改,编辑main.ipynb第1部分的配置代码。
+
 ### 运行项目
 
 \`\`\`bash
@@ -957,12 +998,14 @@ jupyter lab
 
 通过完成毕业设计,你应该已经掌握了智能体系统设计的完整流程。从需求出发设计系统架构,熟练使用HelloAgents框架的各种功能和组件,开发自定义工具扩展智能体能力,完成从需求分析到代码实现的完整项目开发,学会使用Git和GitHub进行开源协作,以及编写清晰的技术文档。
 
-完成毕业设计只是开始,你可以继续深入学习更多智能体范式和算法、提示工程和上下文工程、多智能体协作机制等理论知识;也可以扩展技术栈,学习Web开发构建完整的应用、学习数据库实现数据持久化、学习部署将应用上线;还可以持续优化你的项目,添加更多功能、优化性能和用户体验、完善测试和文档;更重要的是,积极参与社区贡献,帮助其他学习者、参与Hello-Agents框架开发、分享你的经验和心得。
+在本项目中,我们从零开始构建了HelloAgents框架,并用它实现了多个实用的应用。完成毕业设计只是开始,你可以继续深入学习更多智能体范式和算法、提示工程和上下文工程、多智能体协作机制等理论知识;也可以扩展技术栈,学习Web开发构建完整的应用、学习数据库实现数据持久化、学习部署将应用上线;还可以持续优化你的项目,添加更多功能、优化性能和用户体验、完善测试和文档;更重要的是,积极参与社区贡献,帮助其他学习者、参与Hello-Agents框架开发、分享你的经验和心得。
 
 从第一章的简单智能体,到现在能够独立构建完整的多智能体应用,你已经走过了一段精彩的学习旅程。但这不是终点,而是新的起点。
 
 AI技术日新月异,智能体领域更是充满无限可能。希望你能够保持好奇心持续学习新技术,勇于用AI技术解决实际问题创造价值,乐于将你的经验和成果分享给社区,不断打磨你的作品追求卓越。
 
+最后,感谢你完整阅读了本项目。希望你在学习的过程中有所收获,也希望你能够将所学应用到实际项目中,创造出令人惊叹的智能体应用。AI的未来充满无限可能,让我们一起探索和创造!
+
 <strong>记住:最好的学习方式就是动手实践!</strong>
 
 现在,开始构建属于你的智能体应用吧!我们期待在Co-creation-projects目录中看到你的精彩作品!
@@ -972,4 +1015,3 @@ AI技术日新月异,智能体领域更是充满无限可能。希望你能够
 ---
 <div align="center">
   <strong>🎓 恭喜你完成了Hello-Agents教程的学习!🎉</strong>
-

binární
docs/images/16-figures/16-3.png