20260206_211535_体验智能体构建过程:从零开始构建Agent
1. 什么是智能体智能体Agents是一种能够感知环境、做出决策并采取行动来实现特定目标的自主实体。智能体的复杂程度各不相同从简单的响应式智能体对刺激直接做出反应到更高级的智能体能够学习和适应都有。常见的智能体类型包括响应式智能体直接对环境变化作出反应没有内部记忆。基于模型的智能体使用内部世界模型来做决策。基于目标的智能体基于特定目标规划行动。基于效用的智能体通过效用函数评估潜在行动以优化结果。智能体的例子包括聊天机器人、推荐系统和自动驾驶汽车它们各自使用不同类型的智能体来高效智能地执行任务。我们智能体的核心组件有模型智能体的大脑负责处理输入并生成响应。工具智能体可以根据用户请求执行的预定义函数。工具箱智能体可用工具的集合。系统提示指导智能体如何处理用户输入并选择合适工具的指令集。2. 实现现在让我们卷起袖子开始构建吧构建智能体2.1 前提条件在运行代码之前确保你的系统满足以下前提条件1. Python环境设置你需要安装Python来运行AI智能体。按照以下步骤设置环境安装Python如果尚未安装从python.org下载并安装Python推荐3.8版本验证安装python --version创建虚拟环境推荐最好使用虚拟环境来管理依赖项python -m venv ai_agents_envsource ai_agents_env/bin/activate # Windows上使用ai_agents_env\Scripts\activate安装所需依赖导航到仓库目录并安装依赖pip install -r requirements.txt2. 在本地设置OllamaOllama用于高效运行和管理本地语言模型。按照以下步骤安装和配置下载并安装Ollama访问Ollama官方网站并下载适合你操作系统的安装程序按照平台相应指导进行安装验证Ollama安装运行以下命令检查Ollama是否正确安装ollama --version拉取模型如需要某些智能体实现可能需要特定模型。你可以使用以下命令拉取模型ollama pull mistral # 将mistral替换为所需模型我查了下有些模型是在ollama部署下不支持工具调用的。2.2 实现步骤步骤1设置环境除了Python我们还需要安装一些基本库。对于本教程我们将使用requests、json和termcolor。此外我们将使用dotenv来管理环境变量。pip install requests termcolor python-dotenv步骤2定义模型类首先我们需要一个处理用户输入的模型。我们将创建一个OllamaModel类它与本地API交互以生成响应。基本实现如下from termcolor import coloredimport osfrom dotenv import load_dotenvload_dotenv()### Modelsimport requestsimport jsonimport operatorclass OllamaModel: def __init__(self, model, system_prompt, temperature0, stopNone): 使用给定参数初始化OllamaModel。 参数: model (str): 要使用的模型名称。 system_prompt (str): 要使用的系统提示。 temperature (float): 模型的温度设置。 stop (str): 模型的停止令牌。 self.model_endpoint http://localhost:11434/api/generate self.temperature temperature self.model model self.system_prompt system_prompt self.headers {Content-Type: application/json} self.stop stop def generate_text(self, prompt): 根据提供的提示从Ollama模型生成响应。 参数: prompt (str): 要生成响应的用户查询。 返回: dict: 模型响应的字典形式。 payload { model: self.model, format: json, prompt: prompt, system: self.system_prompt, stream: False, temperature: self.temperature, stop: self.stop } try: request_response requests.post( self.model_endpoint, headersself.headers, datajson.dumps(payload) ) print(请求响应, request_response) request_response_json request_response.json() response request_response_json[response] response_dict json.loads(response) print(f\n\nOllama模型的响应: {response_dict}) return response_dict except requests.RequestException as e: response {error: f调用模型时出错{str(e)}} return response这个类以模型名称、系统提示、温度和停止令牌进行初始化。generate_text方法向模型API发送请求并返回响应。步骤3为智能体创建工具下一步是创建我们的智能体可以使用的工具。这些工具是执行特定任务的简单Python函数。以下是一个基本计算器和字符串反转器的例子def basic_calculator(input_str): 根据输入字符串或字典对两个数字执行数学运算。 参数: input_str (str或dict): 可以是表示包含num1、num2和operation键的字典的JSON字符串 或直接是字典。例如{num1: 5, num2: 3, operation: add} 或 {num1: 67869, num2: 9030393, operation: divide} 返回: str: 操作结果的格式化字符串。 异常: Exception: 如果在操作过程中发生错误例如除以零。 ValueError: 如果请求了不支持的操作或输入无效。 try: # 处理字典和字符串输入 if isinstance(input_str, dict): input_dict input_str else: # 清理并解析输入字符串 input_str_clean input_str.replace(, \) input_str_clean input_str_clean.strip().strip(\) input_dict json.loads(input_str_clean) # 验证必需字段 if not all(key in input_dict for key in [num1, num2, operation]): return 错误输入必须包含num1、num2和operation num1 float(input_dict[num1]) # 转换为浮点数以处理小数 num2 float(input_dict[num2]) operation input_dict[operation].lower() # 不区分大小写 except (json.JSONDecodeError, KeyError) as e: return 输入格式无效。请提供有效的数字和操作。 except ValueError as e: return 错误请提供有效的数值。 # 定义支持的操作及错误处理 operations { add: operator.add, plus: operator.add, # add的替代词 subtract: operator.sub, minus: operator.sub, # subtract的替代词 multiply: operator.mul, times: operator.mul, # multiply的替代词 divide: operator.truediv, floor_divide: operator.floordiv, modulus: operator.mod, power: operator.pow, lt: operator.lt, le: operator.le, eq: operator.eq, ne: operator.ne, ge: operator.ge, gt: operator.gt } # 检查操作是否支持 if operation not in operations: return f不支持的操作{operation}。支持的操作有{, .join(operations.keys())} try: # 处理除以零的特殊情况 if (operation in [divide, floor_divide, modulus]) and num2 0: return 错误不允许除以零 # 执行操作 result operations[operation](num1, num2) # 根据类型格式化结果 if isinstance(result, bool): result_str 真 if result else 假 elif isinstance(result, float): # 处理浮点精度 result_str f{result:.6f}.rstrip(0).rstrip(.) else: result_str str(result) return f答案是{result_str} except Exception as e: return f计算过程中出错{str(e)}def reverse_string(input_string): 反转给定字符串。 参数: input_string (str): 要反转的字符串。 返回: str: 反转后的字符串。 # 检查输入是否为字符串 if not isinstance(input_string, str): return 错误输入必须是字符串 # 使用切片反转字符串 reversed_string input_string[::-1] # 格式化输出 result f反转后的字符串是{reversed_string} return result这些函数设计用于根据提供的输入执行特定任务。basic_calculator处理算术运算而reverse_string则反转给定的字符串。步骤4构建工具箱ToolBox类存储智能体可以使用的所有工具并为每个工具提供描述class ToolBox: def __init__(self): self.tools_dict {} def store(self, functions_list): 存储列表中每个函数的字面名称和文档字符串。 参数: functions_list (list): 要存储的函数对象列表。 返回: dict: 以函数名为键其文档字符串为值的字典。 for func in functions_list: self.tools_dict[func.__name__] func.__doc__ return self.tools_dict def tools(self): 以文本字符串形式返回store中创建的字典。 返回: str: 存储的函数及其文档字符串的字典以文本字符串形式。 tools_str for name, doc in self.tools_dict.items(): tools_str f{name}: \{doc}\\n return tools_str.strip()这个类将帮助智能体了解哪些工具可用以及每个工具的功能。步骤5创建智能体类智能体需要思考、决定使用哪个工具并执行它。以下是智能体类agent_system_prompt_template 你是一个拥有特定工具访问权限的智能AI助手。你的回答必须始终使用这种JSON格式{{ tool_choice: 工具名称, tool_input: 给工具的输入}}工具及其使用时机1. basic_calculator用于任何数学计算 - 输入格式{{num1: 数字, num2: 数字, operation: add/subtract/multiply/divide}} - 支持的操作add/plus, subtract/minus, multiply/times, divide - 输入和输出示例 输入计算15加7 输出{{tool_choice: basic_calculator, tool_input: {{num1: 15, num2: 7, operation: add}}}} 输入100除以5等于多少 输出{{tool_choice: basic_calculator, tool_input: {{num1: 100, num2: 5, operation: divide}}}}2. reverse_string用于任何涉及文本反转的请求 - 输入格式仅作为字符串的要反转的文本 - 当用户提到反转、倒序或要求反转文本时始终使用此工具 - 输入和输出示例 输入你好世界的反转是什么 输出{{tool_choice: reverse_string, tool_input: 你好世界}} 输入Python反过来是什么 输出{{tool_choice: reverse_string, tool_input: Python}}3. no tool用于一般对话和问题 - 输入和输出示例 输入你是谁 输出{{tool_choice: no tool, tool_input: 我是一个AI助手可以帮你进行计算、反转文本以及回答问题。我可以执行数学运算和反转字符串。今天我能为你做些什么}} 输入你好吗 输出{{tool_choice: no tool, tool_input: 我运行得很好谢谢你的关心我可以帮你进行计算、文本反转或回答任何问题。}}严格规则1. 关于身份、能力或感受的问题 - 始终使用no tool - 提供完整、友好的回应 - 提及你的能力2. 对于任何文本反转请求 - 始终使用reverse_string - 仅提取要反转的文本 - 删除引号、反转等额外文本3. 对于任何数学运算 - 始终使用basic_calculator - 提取数字和操作 - 将文本数字转换为数字这是你的工具列表及其描述{tool_descriptions}记住你的回应必须始终是带有tool_choice和tool_input字段的有效JSON。class Agent: def __init__(self, tools, model_service, model_name, stopNone): 使用工具列表和模型初始化智能体。 参数: tools (list): 工具函数列表。 model_service (class): 带有generate_text方法的模型服务类。 model_name (str): 要使用的模型名称。 self.tools tools self.model_service model_service self.model_name model_name self.stop stop def prepare_tools(self): 在工具箱中存储工具并返回其描述。 返回: str: 工具箱中存储的工具描述。 toolbox ToolBox() toolbox.store(self.tools) tool_descriptions toolbox.tools() return tool_descriptions def think(self, prompt): 使用系统提示模板和工具描述在模型上运行generate_text方法。 参数: prompt (str): 要生成回答的用户查询。 返回: dict: 模型响应的字典形式。 tool_descriptions self.prepare_tools() agent_system_prompt agent_system_prompt_template.format(tool_descriptionstool_descriptions) # 创建带有系统提示的模型服务实例 if self.model_service OllamaModel: model_instance self.model_service( modelself.model_name, system_promptagent_system_prompt, temperature0, stopself.stop ) else: model_instance self.model_service( modelself.model_name, system_promptagent_system_prompt, temperature0 ) # 生成并返回响应字典 agent_response_dict model_instance.generate_text(prompt) return agent_response_dict def work(self, prompt): 解析从think返回的字典并执行适当的工具。 参数: prompt (str): 要生成回答的用户查询。 返回: 执行适当工具的响应如果没有找到匹配的工具则返回tool_input。 agent_response_dict self.think(prompt) tool_choice agent_response_dict.get(tool_choice) tool_input agent_response_dict.get(tool_input) for tool in self.tools: if tool.__name__ tool_choice: response tool(tool_input) print(colored(response, cyan)) return print(colored(tool_input, cyan)) return这个类有三个主要方法prepare_tools存储并返回工具的描述。think根据用户提示决定使用哪个工具。work执行所选工具并返回结果。步骤6运行智能体最后让我们把所有内容放在一起并运行我们的智能体。在脚本的主要部分初始化智能体并开始接受用户输入# 示例用法if __name__ __main__: 使用此智能体的说明 你可以尝试的示例查询 1. 计算器操作 - 计算15加7 - 100除以5等于多少 - 把23乘以4 2. 字符串反转 - 反转你好世界这个词 - 你能反转Python编程吗 3. 一般问题将得到直接回应 - 你是谁 - 你能帮我做什么 Ollama命令在终端中运行 - 检查可用模型 ollama list - 检查运行中的模型ps aux | grep ollama - 列出模型标签 curl http://localhost:11434/api/tags - 拉取新模型 ollama pull mistral - 运行模型服务器 ollama serve tools [basic_calculator, reverse_string] # 取消下面的注释以使用OpenAI # model_service OpenAIModel # model_name gpt-3.5-turbo # stop None # 使用Ollama的llama2模型 model_service OllamaModel model_name llama2 # 可以更改为其他模型如mistral、codellama等 stop |eot_id| agent Agent(toolstools, model_servicemodel_service, model_namemodel_name, stopstop) print(\n欢迎使用AI智能体输入exit退出。) print(你可以让我) print(1. 执行计算例如计算15加7) print(2. 反转字符串例如反转你好世界) print(3. 回答一般问题\n) while True: prompt input(问我任何问题) if prompt.lower() exit: break agent.work(prompt)实测效果如下学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

相关新闻

CANN推理引擎:从云端到边缘的极致加速与部署实战

CANN推理引擎:从云端到边缘的极致加速与部署实战

CANN组织链接:https://atomgit.com/cann ops-nn仓库链接:https://atomgit.com/cann/ops-nn 当ResNet-50推理延迟高达200ms无法满足实时医疗诊断,当BERT-base在边缘设备内存溢出导致服务中断——推理加速已成为AI落地的“临门一脚”。传统框架…

2026/7/4 23:58:08 阅读更多 →
C++错误 “tolower”: 不是“std”的成员

C++错误 “tolower”: 不是“std”的成员

【1】原因分析std::tolower 是 C 标准库中用于将字符转换为小写形式的函数&#xff0c;定义在 <cctype> 头文件中【2】解决方法#include <cctype>或者将std::去掉

2026/7/4 23:58:30 阅读更多 →
大模型技术架构与选型:避免10倍成本差异的实用指南(值得收藏)

大模型技术架构与选型:避免10倍成本差异的实用指南(值得收藏)

文章提出AI技术架构四层模型&#xff1a;技术范式层、核心技术层、能力表现层和应用架构层&#xff0c;强调技术选型决定产品边界&#xff0c;错误选择可能导致10倍以上成本差异。提供决策框架、场景分析方法和技术验证工具&#xff0c;帮助读者根据业务需求选择合适技术实现&a…

2026/7/4 23:57:22 阅读更多 →

最新新闻

oyunfor土区礼品卡购买教程及踩坑记录

oyunfor土区礼品卡购买教程及踩坑记录

前置条件&#x1f52e;我用的美丽国 chorme浏览器(edge没成功) 可安装翻译插件 招商银行万事达(研究生优选) 网络连接设置 属性里取消勾选ipv6协议(买好再改回来)1.注册账号需&#x1f52e; 用的QQ邮箱&#xff0c;Gmail邮箱收不到验证码 其他信息正常填写&#xff0c;号码862.…

2026/7/5 15:10:30 阅读更多 →
教师资格证认定

教师资格证认定

前言 认定是获取教师资格证的第三个环节&#xff0c;也是最后一个环节。认定通过之后&#xff0c;即可取得教师资格证。 认定时间和认定条件 认定时间 每年的教师资格认定工作有上半年和下半年两个批次。不同于笔试和面试&#xff0c;教师资格证认定的时间并非全国统一。认定的…

2026/7/5 15:10:29 阅读更多 →
NTP算法实现客户端与服务器时间同步

NTP算法实现客户端与服务器时间同步

基于四时间戳&#xff08;T1~T4&#xff09;的NTP级时间同步机制&#xff1a;通过分离 Client→Server 与 Server→Client 传输时间计算延迟时间&#xff0c;通过记录请求发送(T1)、服务端接收(T2)/回复(T3)、客户端接收(T4)四个时间戳&#xff0c;利用对称消除公式 Offset (T…

2026/7/5 15:10:29 阅读更多 →
新e选烤火罩异味[主里料] GB 18401—2010 6.7 判定符合检测标准与测试条件

新e选烤火罩异味[主里料] GB 18401—2010 6.7 判定符合检测标准与测试条件

国标要求&#xff1a;纺织品无异味&#xff1b;恒温密闭环境专业嗅辨。实测结果内里衬料无任何化工、塑胶、胶水异味&#xff0c;嗅辨合格。家用实用优势部分烤火罩外层做除味处理&#xff0c;但内里廉价衬布残留浓烈胶水味&#xff0c;高温烘烤后异味从内部散发。新e选烤火罩里…

2026/7/5 15:08:29 阅读更多 →
STM32与EEPROM数据存储可靠性设计与优化实践

STM32与EEPROM数据存储可靠性设计与优化实践

1. 项目背景与核心需求在嵌入式系统开发中&#xff0c;数据存储的可靠性往往决定了整个系统的稳定性。我最近为一个工业传感器网络项目设计数据存储方案时&#xff0c;深刻体会到选择合适存储器件的重要性。这个网络需要持续记录环境参数&#xff0c;并在断电后仍能保存关键数据…

2026/7/5 15:06:29 阅读更多 →
如何用ConvertToUTF8解决Sublime Text中文乱码:3步快速上手指南

如何用ConvertToUTF8解决Sublime Text中文乱码:3步快速上手指南

如何用ConvertToUTF8解决Sublime Text中文乱码&#xff1a;3步快速上手指南 【免费下载链接】ConvertToUTF8 A Sublime Text 2 & 3 plugin for editing and saving files encoded in GBK, BIG5, EUC-KR, EUC-JP, Shift_JIS, etc. 项目地址: https://gitcode.com/gh_mirro…

2026/7/5 15:02:28 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools&#xff1a;5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里&#xff0c;参与了关于混合后量子密码学的讨论&#xff0c;应付端点攻击找茬的人&#xff0c;还参与留言板讨论后&#xff0c;发现“威胁模型”对多数人仍是陌生概念&#xff0c;且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”&#xff1a;我理解的渗透测试到底是什么&#xff1f;每次看到新闻里说某个大公司的数据被“黑”了&#xff0c;或者某个网站被攻击导致服务瘫痪&#xff0c;你是不是和我一样&#xff0c;心里会冒出两个念头&#xff1a;一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools&#xff1a;5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里&#xff0c;参与了关于混合后量子密码学的讨论&#xff0c;应付端点攻击找茬的人&#xff0c;还参与留言板讨论后&#xff0c;发现“威胁模型”对多数人仍是陌生概念&#xff0c;且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”&#xff1a;我理解的渗透测试到底是什么&#xff1f;每次看到新闻里说某个大公司的数据被“黑”了&#xff0c;或者某个网站被攻击导致服务瘫痪&#xff0c;你是不是和我一样&#xff0c;心里会冒出两个念头&#xff1a;一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻