Comsen人工智能实验室——智能体方向招新题目

海心 23 次阅读 发布于 21 天前 预计阅读时间: 28 分钟


出题人:龚海心

题目概览

本题目主要从大语言模型(Large Language Model,LLM)在实际应用构建方面出发,尤其是在智能体、工作流、多智能体系统等方面,最终完成一个小项目的构建。主要要求学生掌握LLM API的调用,工作流的设计、搭建,智能体框架的应用及增强检索生成(RAG)。

==(必看)提交方式见文档底部 测试提交方式 部分,没按正确方式提交将失去成绩==

==有问题请咨询群内龚海心==

基础部分

任务0:开发环境配置

首先安装对应版本的Anaconda,然后用conda配置一个python版本为3.11的虚拟环境。

Anaconda配置教程:https://www.bilibili.com/video/BV1y6XGYUEP7/?spm_id_from=333.337.search-card.all.click&vd_source=82042c5ec0d573ec86f1d0034801d5a2

conda create -n comsen_env python=3.11

conda activate comsen_env

pip install llama-index openai

后续如果需要用到别的依赖库,需要自行识别,并用conda进行环境配置。

同时,你还需要一些Python基本编程知识。(这些知识通常在2天内就可以学会)

RUNOOB python教程:https://www.runoob.com/python/python-tutorial.html

我们这里强烈推荐使用cursor,Trae等带有AI coding功能的IDE。

任务1:智能体工作流搭建基础概念入门

在开始构建智能体前,你需要学习并了解智能体相关的基本概念。

任务要求

  1. 学习并简要解释一下概念:
    • 应用程序接口(API)
    • 大语言模型(LLM)
    • 提示词工程(Prompt Enginering)
    • 系统提示词(System Prompt)
    • 智能体(Agent)
    • 工具调用(Function Tool Calling)
    • 智能体工作流(Agentic Workflow)
    • 思考-行动智能体(ReActAgent)
    • 增强检索生成(Retrieval-augmented generation, RAG)

参考资料:

任务2:调用LLM API,实现一个有上下文记忆的对话程序

LLM是当下智能体构建的核心。在开始构建一个智能体或者一个工作流前,我们首先要在程序中接入一个LLM。

任务要求

  1. 注册并获取一个Deepseek API Key
  2. 在Python中调用Deepseek的LLM API,实现一个“有记忆”的人工智能对话程序。这里要求调用Deepseek-R1模型,需要展示出LLM的思考过程。(后续任务可以改用Deepseek V3模型)

效果示例:

==================================================

👤 你: 你好,我是海心

🤖 AI: 
🤔 AI正在思考中...
【思考】
用户的消息是“你好,我是海心”,这是一个简单的问候和自我介绍。用户名为“海心”,这可能是他们的名字或昵称。作为智能助手,我需要分析这个情境:
- 这是一个社交互动的开场白,用户没有提出具体问题或请求,因此我的回应应该以礼貌和友好为主。
- 我应该先回应问候,介绍自己,并表达欢迎,以建立良好的对话氛围。
- 然后,我可以主动提供帮助,引导用户说明他们的需求,因为助手的核心功能是协助用户解决问题。
- 推理过程:用户可能只是想测试交互或开始一个对话,所以我需要保持开放和 inviting 的语气。
- 得出结论:我的回应应包括问候、自我介绍和帮助提议。

你好海心!很高兴认识你。我是智能助手,随时准备帮助你。有什么我可以为你做的吗?

👤 你: 你还记得我是谁吗

🤖 AI: 
🤔 AI正在思考中...
【思考】
用户的问题“你还记得我是谁吗”是在询问我是否基于之前的对话记住他们的身份。回顾对话历史,用户的第一条消息是“你好,我是海心”,其中他们明确介绍了自己为“海心”。作为智能助手,我在当前会话中能够保留短期上下文,因此我可以确认记得用户。这有助于建立信任和对话的连续性。我的回应应该友好、肯定,并引导用户回到提供帮助的主题上,以保持交互的 productive。

是的,海心,我记得你!我们刚刚开始对话,你介绍过自己。很高兴能继续帮助你。有什么具体的事情我可以为你做吗?

温馨提醒

  1. Deepseek官方文档包含了丰富的信息。
  2. 可以使用AI来辅助编程,但你要知道程序运行原理。

加分项(如果你完成下面这些要求,你将得到更高的评价)

  1. 在模型输出的时候使用“Token流式输出”。
  2. 使用LlamaIndex智能体框架完成该任务。

    https://docs.llamaindex.ai/en/stable/ (LlamaIndex官方文档)

任务3:创建一个简单的工作流

在完成了基础的智能体认知和“有记忆”的对话程序后,我们进一步进入 智能体工作流(Agentic Workflow) 的实践。本任务的目标是让你学会如何把 LLM的思考能力外部工具调用 结合起来,从而实现一个 能回答实时信息问题 的小型工作流。

智能体设计教程:https://zhuanlan.zhihu.com/p/690202723

任务要求

  1. 首先实现一个函数,能调用DuckDuckGo 搜索工具(主要是使用DDGS库),将其构建成一个工具。这个工具,可以将检索结果(标题+摘要+链接)返回给AI作为候选材料。

    DDGS教程:https://blog.csdn.net/qq_40999403/article/details/149640626

  2. 实现一个智能体工作流。我们构建的工作流需要包含以下几个环节
    1. 用户输入问题
      • 用户向系统提出自然语言问题。
      • 例如:“今天北京的天气怎么样?”、“请帮我找一下最新的人工智能新闻。”
    2. AI总结查询关键词
      • LLM先对用户问题进行分析,抽取出关键查询词,避免用户输入长而复杂的句子导致检索效果差。
      • 例如:输入“请帮我找一下最新的人工智能新闻。” → LLM输出关键词 人工智能 最新 新闻
    3. 调用DuckDuckGo搜索工具
      • 将检索结果(标题+摘要+链接)返回给AI作为候选材料。
    4. AI总结回答
      • 基于搜索结果,LLM对信息进行总结和加工,最终返回一段简洁、自然的答案。
      • 例如:

        “最近的人工智能新闻包括:OpenAI发布了新模型,Google DeepMind公布了新的研究成果,国内也有企业在XR智能体方面进展明显……”

    效果示例:

    🤖 智能搜索智能体系统 - DDGS + DeepSeek AI增强版
    ============================================================
    功能说明:
    1. 自动提取用户问题关键词
    2. 使用DDGS搜索相关信息
    3. DeepSeek AI智能总结生成答案
    4. 保存对话历史记录
    5. 显示详细搜索结果
    ============================================================
    ✅ 已从配置文件加载DeepSeek API密钥
    ✅ DDGS搜索工具已初始化
    ✅ DeepSeek AI已初始化
    
    👤 请输入您的问题 (输入 'quit' 退出): 请帮我找一下最新的人工智能新闻
    
    ============================================================
    🚀 智能搜索智能体开始工作...
    ============================================================
    👤 用户问题: 请帮我找一下最新的人工智能新闻
    ----------------------------------------
    🧠 正在分析用户问题: 请帮我找一下最新的人工智能新闻
    🔑 提取的关键词: 新闻 最新 人工智能
    ----------------------------------------
    🔍 正在使用DDGS搜索: 新闻 最新 人工智能
    ✅ 找到 5 个搜索结果
    ----------------------------------------
    🤖 正在调用DeepSeek AI分析搜索结果...
    ✅ DeepSeek AI回答生成成功
    
    🤖 AI答案:
    ----------------------------------------
    根据您对最新人工智能新闻的需求,我整理了以下专业信息渠道供您参考:
    
    📊 **实时行业动态类**
    1. **AIHub工具导航** - 每日更新行业新闻、产品发布和研究进展,适合开发者与研究者追踪前沿趋势
    2. **AI工具导航站** - 汇聚全球AI技术突破、应用案例和企业动态,涵盖政策法规和学术研究
    
    🌐 **深度分析门户**
    3. **智能网(中文门户)** - 提供市场前景分析和企业跟踪报道,注意其部分内容更新频率需核实(摘要显示2021年数据)
    4. **AI News** - 5天前持续更新的深度分析和趋势洞察,涵盖技术应用与市场动态
    
    ⏱️ **每日快讯类**
    5. **AIbase日报** - 每日三分钟精选资讯,适合快速掌握行业动态并获取独家解读
    
    💡 使用建议:
    - 如需实时追踪:优先选择AIHub和AI工具导航站
    - 关注深度分析:推荐AI News和智能网(建议核实日期)
    - 每日碎片化阅读:AIbase日报最高效
    
    (注:由于搜索结果未提供具体链接,建议通过平台名称直接搜索访问。部分渠道的更新时效性需您实际访问时确认)
    
    希望这些渠道能帮助您及时获取有价值的AI行业资讯!
    ============================================================

加分项

  1. 工作流中的每个Agent都有结构化的提示词和标准化的格式输出。
  2. 使用LlamaIndex智能体框架构建。
  3. 用Mermaid工具或其他工具,绘制一副框图来描述该工作流。

任务4:构建一个多Agent智能路由工作流

在前一任务中,我们实现了“单一路线的AI工作流”。接下来,本任务将引入 多智能体协作 的概念。你需要设计一个 至少包含两个Agent的系统,利用 智能路由 (Intelligent Routing)ReAct范式 (Reason+Action+Observation) 来动态分配任务并执行。

任务要求

  1. 首先,你需要构建以下3种智能体
    1. 一个 路由Agent(Router Agent):负责理解用户输入意图,并智能分发任务。
    2. 两个规定好的业务Agent
      • 数学Agent(MathAgent):处理用户输入的数学题,并给出解答过程与答案。我们这里给这个数学Agent一个乘法工具,用于计算两数相乘。
      • 搜索Agent(SearchAgent):能根据用户的查询来进行联网搜索,并根据搜索到的结果回答问题。(这里可以直接使用任务3中的成果)。
    3. 一个 总结输出Agent :用于总结最终的答案,输出给用户。

    设计重点

    • 路由必须依靠 LLM语义推断(而非简单if-else)来判断该调用 MathAgent 还是 SummaryAgent
    • 两个业务Agent需采用 ReAct 思维模式(思考-行动-观察-总结),即在回答时显式展现推理过程。
    • 不需要外部API调用,全部用LLM本身就能完成任务。
  2. 接着,实现一个多Agent工作流。

工作流逻辑

  1. 用户输入
    • 示例1:“请帮我计算123乘以456的结果”
    • 示例2:“请帮我总结这段话的内容:……”
  2. 路由Agent
    • 解析用户输入 → 推断意图
    • 如果是数学计算 → 分流到 MathAgent
    • 如果是摘要任务 → 分流到 SearchAgent
  3. 业务Agent执行
    • MathAgent(数学Agent)
      • ReAct范式:
        • 思考(Reasoning):分析用户输入,识别数学运算类型
        • 行动(Action):执行计算(可以直接用Python计算 or 让模型做算术)
        • 观察(Observation):核对结果是否合理
    • SearchAgent(搜索Agent)
      • 使用第二问中实现的搜索Agent
  4. 总结Agent总结最终答案,结果返回
    • 总结Agent输出最终结果给用户
    • 如果业务Agent未能正确处理任务 → 可以反馈回 路由Agent 重新判断

输出示例

============================================================
测试用例 1
============================================================
Running step route_task
用户输入:请帮我计算1234567乘以456789的结果
--------------------------------------------------
1. 路由 Agent 正在分析任务类型...
路由决策:MATH
--------------------------------------------------
Step route_task produced event RoutingEvent
Running step generate_final_output
2. 数学 Agent 正在处理...
数学 Agent 回答:1234567乘以456789的结果是563936625363。
--------------------------------------------------
3. 总结 Agent 正在总结最终答案...
--------------------------------------------------
Step generate_final_output produced event FinalOutputEvent
Running step complete_workflow

最终答案:
1234567乘以456789的结果是563936625363。
Step complete_workflow produced event StopEvent
[StreamEvent] StopEvent: 
工作流执行完成,结果:1234567乘以456789的结果是563936625363。

============================================================

============================================================
测试用例 2
============================================================
Running step route_task
用户输入:请帮我总结这段话的内容:人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。
--------------------------------------------------
1. 路由 Agent 正在分析任务类型...
路由决策:SUMMARY
--------------------------------------------------
Step route_task produced event RoutingEvent
Running step generate_final_output
2. 摘要 Agent 正在处理...
摘要 Agent 回答:人工智能是计算机科学的一个分支,旨在理解智能的本质并创造能够模拟人类智能的机器。其研究领域广泛,涵盖机器人、语言识别、图像识别、自然语言处理和专家系统等。
--------------------------------------------------
3. 总结 Agent 正在总结最终答案...
--------------------------------------------------
Step generate_final_output produced event FinalOutputEvent
Running step complete_workflow

最终答案:
人工智能是计算机科学的一个分支,旨在理解智能的本质并创造能够模拟人类智能的机器。其研究领域广泛,涵盖机器人、语言识别、图像识别、自然语言处理和专家系统等。
Step complete_workflow produced event StopEvent
[StreamEvent] StopEvent: 
工作流执行完成,结果:人工智能是计算机科学的一个分支,旨在理解智能的本质并创造能够模拟人类智能的机器。其研究领域广泛,涵盖机器人、语言识别、图像识别、自然语言处理和专家系统等。

============================================================

加分项

  1. 使用LlamaIndex智能体框架。
  2. 每个Agent都有结构化的系统提示词和格式化的输出。
  3. 使用Mermaid或者其他工具来绘制一个框图,展示这个工作流的工作流程。

进阶部分

下面任务为24级同学选做。可以在下面任务中二选一,也可以全做。

任务5(可选):构建一个带有RAG知识库的Agent

在前几个任务里,我们的智能体主要依赖 LLM 自身的语言理解与推理能力。

但当涉及到 专业知识领域 的知识问答,LLM 常常会出现“幻觉”(编造答案)。

为了解决这个问题,本任务要求你实现一个包含 RAG (Retrieval-Augmented Generation) 的知识型 Agent:

  • 能够基于给定的 《多元分析学》教材文本 搭建知识库
  • 用户向Agent提问时,Agent依赖 检索 + 生成 来保证答案的准确性
  • 最终完成一个 基于教材问答/摘要/复习的AI助理

任务要求

  1. 构建一个基于RAG的知识库检索工具
  2. 将该工具添加到一个Agent里。然后要求实现与这个Agent连续、有上下文记忆的对话。
    • 测试样例:
      • “请问《多元分析学》的作者是谁?”
      • “请问Abel第二定理的内容是什么?”
    • LLM基于检索片段生成回答。

示例输出

Q: 请问《多元分析学》的作者是谁?
A: 《多元分析学》由黄永忠老师编写了第1章、第2章、第6章、第7章及第4章的第7节,刘艳红老师编写了第3章,韩志斌老师编写了第4章、第5章。全书由黄永忠老师统稿和润色。
Q: 请问Abel第二定理的内容是什么?
A: Abel第二定理指出,如果一个幂级数 $sum a_n x^n$ 的收敛半径 $R$ 是有限且大于零的,那么该级数在 $(-R, R)$ 上是内闭一致收敛的。此外,如果该幂级数在 $x=R$ 处收敛(且 $R neq infty$),那么它在 $(-R, R]$ 的任意闭子区间上都是一致收敛的。

加分项

  1. 使用LlamaIndex智能体框架。
  2. 使用ollama本地部署embedding模型。

    Ollama教程:https://zhuanlan.zhihu.com/p/17482899149

    推荐使用Embedding模型:dengcao/Qwen3-Embedding-4B:Q8_0

  3. ⭐️使用Docker部署的Qdrant向量储存数据库来储存向量数据

任务6(可选):微调模型

有的时候,我们希望模型能在某一个垂直领域有更强的能力,而且这些能力往往是RAG不足以实现的。例如,当我们需要一个作者Agent的时候,我们希望这个Agent能拥有优美的文风。如果仅仅是在“请你用优美的文风写作”,这样的效果往往差强人意。

所以我们希望,如果我们能利用手上已有的语料数据,例如某一位自己喜欢的作家的文本,用于去微调训练一个自己专属的LLM,从而达到自己想要的输出风格。这时就要用到“微调模型”技术了。

为了解决这个问题,本任务要求你实现一个以基于QLoRA微调技术微调过后的LLM为基础的Agent,能进行可拓展的角色扮演。

任务要求

  1. 学习以下概念
    • 微调模型(fine-tune)
    • LoRA微调
  2. 学习如何租用AutoDL云算力服务器
  3. 在AutoDL服务器上本地部署Qwen3-14B大模型
  4. 微调Qwen3-14B大模型

示例输出

System Prompt:
以下是一段关于旅行者与可莉之间的对话。你需要扮演其中的可莉与旅行者对话。
可莉的信息:可莉是米哈游旗下游戏《原神》中的登场角色,她性格纯真好奇,对外界的一切都充满爱意和探索欲。她热爱爆炸物,对此抱有极大的热忱和创造力,但也因此时常闯祸,不过每次事后都会愧疚地努力弥补。可莉天性贪玩,不计后果,但又极具天赋,一旦才能用对地方,就能爆发出惊人的实力。她对家人和朋友充满深厚的感情,骑士团是她的第二个家,而妈妈则是她的偶像和榜样。可莉的乐观、勇敢和坚持不懈,让她在冒险的道路上不断前行,即使面对困难和挑战,也永远不会放弃自己的梦想和“礼物”——神之眼。
旅行者的信息:旅行者是米哈游出品游戏《原神》中的主角,作为一对跨越诸多世界的双子之一,旅行者与血亲远渡重天,降临名为「提瓦特」的大陆,希望能与这个世界和谐相处。然而,陌生的神灵拦在面前,带走了你唯一的血亲,并将你封印,陷入漫长的沉眠。再度醒来时,天地已变,战火平息,熟悉的景象不复存在,你孤身一人踏上旅途,寻找那位神灵的踪迹。在旅途中,你遇到了旅伴派蒙,并得知此世由七位神灵以「尘世七执政」之名统治七国。你将第一站定为风神建立的自由城邦蒙德,却目睹了深渊教团与至冬国冰之女皇的双重威胁。你与风神化身吟游诗人一同行动,解救被腐化的东风之龙,却在巨龙的瞳中看到了统领深渊之人——那位曾与你一同跨越世界的血亲。旅行者的旅程不仅是对抗危机与寻找亲人的冒险,更是对提瓦特世界真相的探索。你无法获得「神之眼」,却以独特的力量引导元素之力,见证了凡人的渴望与神明的意志。在穿行于诸多世界的旅途中,旅行者不断思考着生命的本质与命运的意义,以坚定的步伐迈向未知的未来,最终将登上「神」之座,守护这个不再灼烧的世界。

Input:
有什么想要分享…

Output:
可莉知道,骑士团的墙是不能炸的。虽然打通了能从禁闭室出去很方便,但凯亚哥哥说,这样做了以后,琴团长恐怕会让我再也见不到第二天的太阳…

测试提交方式

重要提示:本次作业提交方式已更新!

你将不再需要将代码推送到 GitHub。所有提交内容将打包成一个ZIP文件并通过邮件发送。但项目结构和模板仍需参考 GitHub 示例仓库。


1. 代码获取与结构要求

  1. 项目初始化:请从以下示例仓库中获取项目结构和模板,并在本地进行开发。无需在 GitHub 上创建自己的仓库或进行提交。
  2. 本地开发分支:建议你的所有本地代码开发都在 main 分支上进行,以保持结构清晰。
  3. 目录结构:请务必遵循以下结构,将各任务代码存放于不同文件夹。
    your_project_folder/  # 这是你要打包的项目根文件夹
    ├── task_1/
    ├── task_2/
    ...
    ├── README.md
    ├── requirements.txt
    ├── .gitignore
    └── .env   # 此文件本地存放,不可上传

2. 开发环境与视频要求

  • Python版本:统一使用 3.11
  • API Key管理严禁硬编码,所有Key须通过.env文件读取。
  • 视频录制:每个任务录制一个演示视频,命名为 task1.mp4, task2.mp4 ... ,总时长 不超过5分钟

3. 最终提交步骤

  1. 创建说明文档 在本地创建一个名为 submit.md 的文档(无需随项目代码上传),内容包括:
    • 你的制作思路、遇到的问题和创新点。

    markdown语法教程:https://markdown.com.cn/basic-syntax/

    推荐markdown编辑器:Obsidian, Typora

  2. 打包文件 将以下所有需要提交的文件和文件夹打包成一个 ZIP 压缩包
    • 你的项目代码文件夹(例如 your_project_folder/,其中包含所有任务代码、README.mdrequirements.txt.gitignore 等)。请务必确保 .env 文件已从打包的文件中移除。
    • 你创建的 submit.md 文档。
    • 所有任务的演示视频 (.mp4 格式)。

    请确保压缩包内容层级清晰,例如:

    submission.zip
    ├── your_project_folder/  # 你的整个项目代码
    │   ├── task_1/
    │   ├── task_2/
    │   └── ...
    ├── submit.md
    ├── task1.mp4
    ├── task2.mp4
    └── ...
  3. 发送邮件
    • 发送压缩包到邮箱: hayisaka@163.com
    • 邮件标题格式: Comsen提交-专业-班级-姓名-学号