【AI大模型应用开发】【项目实战】29.Agent智扫引擎项目-(三)项目/代码架构,数据集介绍,ReAct模块实现,模型选择及实现(Agent模块实现,LLM模型选择及实现)
一.项目架构整体架构如下:二.代码架构代码架构如下所示:在项目开始之前,需要在服务端(或者本机)使用ollama部署模型如下:ollama run qwen3:8b ollama run qwen3:1.7b ollama run gemma3:1b ollama run deepseek-r1:1.5b ollama run bge-m3:latest三.数据集介绍具体保存位置如下:/data架构如下:本项目数据来源于扫地机器人的产品手册及相关知识库,方便为用户解答使用问题。具体问题包括:基础与技术类、产品功能类、智能交互类、维护与保养类、选购指南类、技术发展类、使用技巧类、配件与耗材类、安全与隐私类、特殊场景类等问题,基本内容如下:四.模型选择以及实现1.Agent模块实现该项目(InsightScan)是基于Streamlit框架和LangChain技术栈,主要由Agent模块、LLM模块、工具模块、提示词模块组成,是一个融合了ReAct框架、RAG技术、多模态能力、提示词工程、工具调用、报告生成模块构建的智能客服Agent系统1.1 Agent简介项目中Agent是基于ReAct框架实现的,它主要包括推理(Reasoning)模块以及行动(Acting)模块(1).推理模块动态思考链(COT-Chain-of-Thought):Agent每一步生成自然语言推理逻辑,解释当前决策的原因错误回溯机制:当行动失败时,Agent能分析原因并调整策略(如:“用户输入与目前所有的工具不匹配,但是提示词工程中要求必须使用工具,因此可能需要使用Rag工具,但用户输入与Rag工具不匹配,重新思考一下确认应该使用的工具”)(2).行动模块工具集成(Tool Calling):调用外部API、第三方数据库以及计算器等方式环境状态感知:实时接收行动结果,作为下一步决策的输入(如:“获取到北京气温25度,建议用户带薄外套”)1.2具体实现具体代码位置如下:/Agent(1).Action实现具体代码位置如下:/Agent/Action.py,整体代码如下:# BaseModel: Pydantic 的核心基类,继承它可以自动获得数据验证、类型转换和序列化/反序列化功能 # Field: 用于为模型字段提供额外的元数据(如描述、默认值、校验规则等 from pydantic import BaseModel, Field # typing 模块: 导入了 List(列表)、Optional(可选类型)、Dict(字典)、Any(任意类型), # 用于严谨的类型提示。(注:代码中导入了 List,但在当前模型中并未实际使用) from typing import List, Optional, Dict, Any class Action(BaseModel): """ 用于 AI Agent(智能体)或工具调用(Tool Calling)的场景中,用来结构化地表示“要执行的动作”及其“参数” """ """ tool_name: 类型:str(字符串,必填) 作用:指定要调用的工具名称 Field(description=...):为字段添加了描述信息,这在结合大语言模型(LLM)时非常有用,LLM 可以通过读取这个 description 来准确理解该字段的含义并正确生成内容 """ tool_name: str = Field(description="The name of a tool") """ args: 类型:Optional[Dict[str, Any]](可选的字典,键为字符串,值为任意类型) 作用:存储传递给该工具的参数,因为是 Optional,所以如果不传参数,它的值可以是 None """ args: Optional[Dict[str, Any]] = Field(description="Input args of a tool, containing names and values") def __str__(self): """ 重写了 Python 内置的 __str__ 魔法方法,决定了对 Action 实例使用 print() 或 str() 时的输出格式 :return: """ # 初始化字符串 rst,以 Action(tool_name=xxx 开头 rst = f"Action(tool_name={self.tool_name}" # 检查 self.args 是否存在且非空。如果存在,遍历字典的键值对,以 , key=value 的格式拼接到字符串后面 if self.args: for k, v in self.args.items(): rst += f", {k}={v}" # 最后补上右括号 ) 并返回 rst += ")" """ 效果示例: 无参数时:Action(tool_name=search_web) 有参数时:Action(tool_name=search_web, query=pydantic, max_results=5) """ return rst总结:这段代码是一个非常典型的LLMFunction Calling /Tool Use 协议的数据结构当大模型决定调用外部工具时,它会输出符合这个Action结构的 JSON,然后后端代码可以通过Action.model_validate(json_data)将其安全地转换为 Python 对象,再根据tool_name和args去执行真实的函数调用,自定义的__str__方法则方便在日志或控制台直观地查看模型决定调用了什么工具(2).ReAct实现具体代码位置如下:/Agent/ReAct.py1).模块功能解析(1).基础方法JSON提取:从RST(reStructuredText结构,其实就是大模型输出的结构)文本中提取JSON代码块观察格式化:清理响应并追加动作和观察结果(2).初始化流程存储LLM、工具列表和提示文件路径初始化提示模板(读取文件+工具信息格式化)构建处理链(提示→LLM→输出解析)(3).工具管理根据名称查找匹配的工具(4).核心执行流程单步执行:生成动作并解析响应动作执行:验证并调用工具,返回观察结果任务执行:循环执行“推理→动作→观察”直到完成(5).整体架构初始化 → 接收任务 → 逐步推理 → 动作生成 → 工具执行 → 观察反馈 → 循环处理 → 结果输出2).代码架构/Agent/ReAct.py整体代码如下:import os import re from typing import List, Optional, Tuple import pandas as pd # 导入 LangChain 的内存聊天历史,用于短期记忆 from langchain_community.chat_message_histories.in_memory import ChatMessageHistory from langchain_core.language_models.chat_models import BaseChatModel # 导入输出解析器:Pydantic解析器、容错修复解析器、字符串解析器 from langchain.output_parsers import PydanticOutputParser, OutputFixingParser,JsonOutputToolsParser from langchain.schema.output_parser import StrOutputParser # BaseTool: RAG报告生成 from langchain.tools.base import BaseTool # 导入提示词模板和MessagesPlaceholder: 位置保持器 from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder # 用于将工具列表渲染为文本描述 from langchain_core.tools import render_text_description from pydantic import ValidationError from langchain_core.prompts import HumanMessagePromptTemplate # 导入定义的 Action 数据结构 from Agent.Action import Action class ReActAgent: """ 推理, 行动, 观察 """ # 1.两个静态基础方法 # JSON提取:从RST文本中提取JSON代码块 # 观察格式化:清理响应并追加动作和观察结果 @staticmethod def extract_json_from_action_rst(text: str) - str | None: """ JSON提取:从RST文本中提取JSON代码块 从RST(reStructuredText结构,其实就是大模型输出的结构)格式文本中提取JSON代码块内容, 大模型有时会在 JSON 前后加上废话或 markdown 标记,此方法用于精准提取 该函数使用正则表达式匹配文本中的json代码块,并返回最后一个匹配到的JSON字符串 :param text: str, 包含RST格式的输入文本,可能包含代码块 :return: str | None: 如果找到JSON代码块则返回其中的内容(不包括json和标记), 如果没有找到则返回None """ # 使用正则表达式匹配json代码块 # 使

相关新闻

构建数据语义层:从OSI模型到AI Agent,破解数据孤岛与语义鸿沟

构建数据语义层:从OSI模型到AI Agent,破解数据孤岛与语义鸿沟

1. 从“数据孤岛”到“语义鸿沟”:一个老问题的现代困境 干了这么多年数据,我越来越觉得,我们这行最头疼的从来不是技术本身,而是“沟通”。你肯定也遇到过这种场景:业务部门指着报表问“这个数是什么意思?…

2026/10/14 15:16:55 阅读更多 →
个体战略操作系统:从能力余量到生态位统治

个体战略操作系统:从能力余量到生态位统治

1. 项目背景与核心概念解析"新一人公司的战略操作系统"这个概念源于当前数字经济时代个体价值崛起的趋势。随着远程办公、自由职业和微型创业的普及,越来越多的专业人士开始以独立个体或极小团队的形式提供高价值服务。这种新型组织形式打破了传统企业架构…

2026/10/14 15:18:02 阅读更多 →
NoFences:3分钟拯救你的Windows桌面混乱,免费开源的终极分区神器

NoFences:3分钟拯救你的Windows桌面混乱,免费开源的终极分区神器

NoFences:3分钟拯救你的Windows桌面混乱,免费开源的终极分区神器 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 你是否每天面对Windows桌面上杂乱无章…

2026/10/13 17:30:06 阅读更多 →

最新新闻

HiKid架构拆解:electron-vite三进程模型构建跨平台桌面应用完整实践

HiKid架构拆解:electron-vite三进程模型构建跨平台桌面应用完整实践

【免费下载链接】hi-kid HiKid - Your AI English Pal. A desktop app built with React and TypeScript, targeting children in non-English-speaking countries who want to practice English speaking and listening. 项目地址: https://gitcode.com/gh_mirrors…

2026/10/14 15:18:12 阅读更多 →
CubeSandbox:企业级安全工作流的可信执行底座

CubeSandbox:企业级安全工作流的可信执行底座

1. 项目概述:为什么企业安全执行面需要 CubeSandbox 这个“保险箱”最近在给三家制造业客户做安全架构复盘时,反复被问到一个问题:“我们部署了 OpenClaw 做自动化响应,也装了 DSH(Defense Shell)做终端策略…

2026/10/14 15:18:12 阅读更多 →
Go语言内存优化利器:betteralign工具实战指南

Go语言内存优化利器:betteralign工具实战指南

1. 项目概述:betteralign 工具的核心价值betteralign 是一个专门为 Go 语言开发者设计的内存优化工具,它通过智能分析结构体字段排列顺序,可以显著减少内存占用。在实际测试中,这个工具能让典型结构体的内存消耗降低 30-50%&#…

2026/10/14 15:18:12 阅读更多 →
Codex 半年使用总结:省 Token 技巧与计划模式实战

Codex 半年使用总结:省 Token 技巧与计划模式实战

1. 半年迭代里,Codex 到底变了哪些东西从去年底开始把 Codex 当作日常主力编码助手用到现在,差不多半年时间。这半年里它的更新节奏不算快,但每一次改动都挺有针对性,尤其是围绕 Token 消耗和交互模式这两块,变化比我一…

2026/10/14 15:18:12 阅读更多 →
astropy WCS 修复:备选 WCS(key=‘A‘/‘B‘)畸变关键字按后缀独立读取的完整解析

astropy WCS 修复:备选 WCS(key=‘A‘/‘B‘)畸变关键字按后缀独立读取的完整解析

科学计算科研数据分析 【免费下载链接】astropy Astronomy and astrophysics core library 项目地址: https://gitcode.com/gh_mirrors/as/astropy 点击查看 免费下载 导读 本文围绕 astropy 仓库中的修复条目 19228.bugfix.rst 展开:当一张 FITS 图像…

2026/10/14 15:18:12 阅读更多 →
2026年最新--区块链运营岗面试题库(100题)

2026年最新--区块链运营岗面试题库(100题)

一、行业趋势与运营思维(1-10题) 1. 2026年加密行业营销的核心趋势有哪些?请结合“用户质量优先”的转变,说明运营策略应如何调整。 2026年加密营销的7大核心趋势涵盖绩效营销、内容创作、渠道多元化、活动体验、激励机制以及AI驱动的运营。最关键的转变是:Fintech和Web…

2026/10/14 15:17:11 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →