
Cogito-V1-Preview-Llama-3B Agent框架开发入门构建你的AI助手你是不是觉得现在的AI聊天机器人虽然能说会道但让它干点实事比如查个天气、算个账它就有点“力不从心”了它可能会告诉你“我无法访问实时数据”或者直接给你一段计算代码让你自己跑。这背后的原因是大多数模型被设计成了“思考者”而不是“行动者”。今天我们要聊的就是如何让AI模型“动”起来。我们将以Cogito-V1-Preview-Llama-3B这个模型为核心带你从零开始构建一个能真正调用外部工具、执行多步骤任务的智能体。你可以把它理解为一个初级的AI助手它能理解你的复杂指令比如“帮我算一下从北京到上海的机票总价然后看看那边的天气怎么样”然后自己规划步骤调用计算器算钱再调用天气接口查询最后把结果整合好告诉你。听起来是不是比单纯的聊天有意思多了这篇文章就是为你准备的入门指南。即使你之前没接触过Agent开发跟着步骤走也能亲手搭建出你的第一个能“干活”的AI。1. 动手之前认识你的工具箱在开始敲代码之前我们得先搞清楚几个核心概念这样后面搭建起来才不会迷糊。你可以把我们要构建的智能体想象成一个刚入职的实习生它聪明有模型的大脑但需要你教它流程和工具。规划这是智能体的“思考”能力。当你下达一个复杂指令时比如“查天气并建议是否带伞”模型需要自己拆解任务第一步我需要知道查询哪个城市的天气第二步调用天气工具获取数据第三步分析天气数据中是否有降水第四步基于分析给出建议。Cogito-V1-Preview-Llama-3B模型在这方面经过了特别训练擅长这种任务分解。工具使用这是智能体的“手和脚”。模型本身不会算数也不会联网但它可以学会调用你提供给它的函数。比如一个calculator工具当模型认为需要计算时它会在内部生成一个调用这个工具的指令并把参数如35*2传进去然后获取计算结果。我们后面就会创建“计算器”和“模拟天气查询”这样的小工具。记忆这是智能体的“小本本”。在连续对话或多步骤任务中智能体需要记住之前说过的话、执行过的步骤和得到的结果。简单的记忆可以是保存整个对话历史更高级的则可能涉及对关键信息的提取和总结。我们先从最基础的对话历史记忆开始。我们的技术栈很简单Python是主要语言我们会用到transformers库来加载和运行Cogito模型并用一个轻量级的框架思路来组织规划、工具调用和记忆的流程。环境方面你需要有Python 3.8或以上版本以及基本的pip安装权限。2. 搭建基础环境与模型热身工欲善其事必先利其器。我们先来把模型请到我们的本地环境里。首先打开你的终端或命令行创建一个新的项目文件夹并安装核心依赖# 创建项目文件夹并进入 mkdir cogito-agent-demo cd cogito-agent-demo # 创建虚拟环境可选但推荐 python -m venv venv # 激活虚拟环境 # Windows: venv\Scripts\activate # Mac/Linux: source venv/bin/activate # 安装必要的库 pip install transformers torchtransformers是Hugging Face的库是我们加载模型的关键torch是PyTorch为模型提供计算引擎。安装过程可能需要几分钟取决于你的网络。接下来我们来写第一段代码测试一下模型的基本对话能力确保它能正常工作。创建一个名为test_model.py的文件from transformers import AutoTokenizer, AutoModelForCausalLM import torch # 指定模型名称请确保你有权访问该模型例如在Hugging Face上 model_name 你的模型路径或Hugging Face ID # 例如: username/cogito-v1-preview-llama-3B print(正在加载模型和分词器这可能需要几分钟...) # 加载分词器负责把文字转换成模型能懂的数字 tokenizer AutoTokenizer.from_pretrained(model_name) # 加载模型本身 model AutoModelForCausalLM.from_pretrained( model_name, torch_dtypetorch.float16, # 使用半精度浮点数节省显存 device_mapauto # 自动分配模型层到GPU或CPU ) print(模型加载完成) # 准备一个简单的对话提示 prompt 你好请介绍一下你自己。 inputs tokenizer(prompt, return_tensorspt).to(model.device) # 让模型生成回复 print(f\n用户: {prompt}) with torch.no_grad(): # 关闭梯度计算节省资源 outputs model.generate(**inputs, max_new_tokens200) response tokenizer.decode(outputs[0], skip_special_tokensTrue) # 打印完整对话包含我们的提问 print(fAI: {response[len(prompt):].strip()})运行这个脚本(python test_model.py)如果你看到模型输出了一段自我介绍恭喜你模型热身成功如果遇到模型下载问题你可能需要检查Hugging Face的访问权限或网络设置。3. 打造智能体的核心工具与执行引擎现在模型能说话了但我们想要的是能“做事”。接下来我们为智能体打造它的工具库和驱动它工作的引擎。首先我们定义两个简单的工具。在项目根目录创建一个tools.py文件class ToolBox: 智能体的工具箱里面放着它能用的各种工具函数。 def __init__(self): self.tools { calculator: self.calculator, get_weather: self.get_weather } # 工具描述用于帮助模型理解何时该调用哪个工具 self.descriptions { calculator: 用于执行数学计算。输入一个数学表达式字符串如 3 5 * 2返回计算结果。, get_weather: 用于查询指定城市的模拟天气。输入城市名称字符串如 北京返回模拟的天气情况。 } def calculator(self, expression: str) - str: 一个安全的计算器工具。 try: # 警告实际生产中直接eval有安全风险这里仅为演示。 # 更安全的做法是使用ast.literal_eval或专门的数学表达式解析库。 result eval(expression, {__builtins__: None}, {}) return f计算结果: {result} except Exception as e: return f计算错误: {e} def get_weather(self, city: str) - str: 一个模拟的天气查询工具。 # 这里模拟一个简单的天气数据真实场景会调用API weather_data { 北京: 晴温度 15-25°C微风, 上海: 多云温度 18-27°C东南风3级, 广州: 阵雨温度 22-30°C湿度85%, 深圳: 晴转多云温度 23-31°C微风 } return weather_data.get(city, f未找到{city}的天气信息。模拟数据可用城市: {, .join(weather_data.keys())}) def list_tools(self): 返回所有可用工具及其描述。 return self.descriptions有了工具我们需要一个“引擎”来协调模型思考、调用工具并管理对话。创建一个agent_engine.py文件import re from tools import ToolBox class SimpleAgentEngine: 一个简单的智能体执行引擎。 def __init__(self, model, tokenizer): self.model model self.tokenizer tokenizer self.toolbox ToolBox() self.conversation_history [] # 简单的记忆对话历史 def _extract_tool_call(self, model_response: str): 从模型回复中尝试提取工具调用指令。 我们约定一个简单的格式tool_call工具名:参数/tool_call pattern rtool_call(.*?):(.*?)/tool_call match re.search(pattern, model_response, re.DOTALL) if match: tool_name match.group(1).strip() tool_input match.group(2).strip() return tool_name, tool_input return None, None def run(self, user_input: str): 执行一轮与智能体的交互。 # 1. 将用户输入和历史记录组合成给模型的提示 self.conversation_history.append(f用户: {user_input}) full_prompt \n.join(self.conversation_history) \nAI: # 2. 模型生成初步回复思考可能的工具调用 inputs self.tokenizer(full_prompt, return_tensorspt).to(self.model.device) with torch.no_grad(): outputs self.model.generate(**inputs, max_new_tokens300) raw_response self.tokenizer.decode(outputs[0], skip_special_tokensTrue) # 只提取本轮AI的回复部分 ai_response_part raw_response[len(full_prompt):].strip() # 3. 检查回复中是否包含工具调用 tool_name, tool_input self._extract_tool_call(ai_response_part) final_response ai_response_part if tool_name and tool_name in self.toolbox.tools: # 4. 执行工具调用 tool_result self.toolbox.tools[tool_name](tool_input) # 5. 将工具结果反馈给模型让它生成最终回复 feedback_prompt f{full_prompt}{ai_response_part}\n工具执行结果: {tool_result}\nAI: inputs self.tokenizer(feedback_prompt, return_tensorspt).to(self.model.device) with torch.no_grad(): outputs self.model.generate(**inputs, max_new_tokens200) final_response self.tokenizer.decode(outputs[0], skip_special_tokensTrue) final_response final_response[len(feedback_prompt):].strip() # 清理掉可能残留的工具调用标签 final_response re.sub(rtool_call.*?/tool_call, , final_response).strip() # 6. 更新历史记录 self.conversation_history.append(fAI: {final_response}) # 保持历史记录不会无限增长简单截断 if len(self.conversation_history) 10: self.conversation_history self.conversation_history[-10:] return final_response这个引擎是智能体的大脑和调度中心。它拿到用户问题后先让模型思考并生成回复。如果模型在回复里“偷偷”嵌入了工具调用指令比如tool_callcalculator:35*2/tool_call引擎就会捕捉到它然后去工具箱里找到对应的工具函数执行拿到结果后再把结果塞回给模型让模型根据结果组织最终的人话回复给你。4. 让智能体跑起来你的第一个AI助手零件都准备好了现在让我们把它们组装起来看看效果。创建一个main.py文件作为我们的主程序import torch from transformers import AutoTokenizer, AutoModelForCausalLM from agent_engine import SimpleAgentEngine def main(): # 1. 加载模型复用之前的代码 model_name 你的模型路径或Hugging Face ID print(初始化智能体加载模型中...) tokenizer AutoTokenizer.from_pretrained(model_name) model AutoModelForCausalLM.from_pretrained( model_name, torch_dtypetorch.float16, device_mapauto ) # 2. 创建智能体引擎 agent SimpleAgentEngine(model, tokenizer) print(智能体初始化完成) print(可用工具:, list(agent.toolbox.tools.keys())) print(输入 退出 或 quit 来结束对话。\n) # 3. 简单的对话循环 while True: try: user_input input(\n你: ) if user_input.lower() in [退出, quit, exit]: print(再见) break if not user_input.strip(): continue # 4. 让智能体处理输入 response agent.run(user_input) print(f助手: {response}) except KeyboardInterrupt: print(\n\n对话被中断。) break except Exception as e: print(f\n出错了: {e}) if __name__ __main__: main()运行python main.py等待模型加载完毕后你就可以开始和你的智能体对话了。试试下面这些指令看看它如何反应“3加5乘以2等于多少” 它应该会尝试调用计算器“北京今天的天气怎么样” 它会调用模拟天气查询“先算一下(1525)*0.8然后告诉我结果。” 测试多步骤理解“帮我查一下上海和广州的天气然后对比一下。” 更复杂的规划你会发现模型在回复时可能会在内部思考过程中生成那些tool_call标签但我们的引擎会处理它们最终给你一个干净、完整的答案。这就是智能体在背后默默“干活”的过程。5. 深入探索与优化建议如果你的第一个智能体成功运行了那么恭喜你你已经跨出了最重要的一步。不过我们这个简易版本还有很多可以打磨的地方。这里有一些思路供你想继续深入时参考让模型更好地理解工具我们现在的系统里模型需要“知道”在什么情况下该生成工具调用指令。这通常通过在模型训练时将工具描述和调用示例融入提示词来实现。你可以尝试在给模型的系统提示conversation_history的开头里更详细地描述工具的功能和调用格式比如“你是一个助手可以调用计算器和天气查询工具。当需要计算时请使用tool_callcalculator:表达式/tool_call格式。”处理更复杂的任务链现在的引擎只处理单次工具调用。对于“算机票钱然后查天气”这样的多步骤任务模型可能需要规划出多个连续的工具调用。改进引擎让它能循环检测并执行多个工具调用直到模型认为任务完成为止。使用更成熟的框架为了构建更健壮、功能更全的智能体可以考虑基于成熟的框架开发比如LangChain。LangChain提供了大量内置的工具集成、更灵活的记忆模块以及多种Agent执行策略能大大提升开发效率。我们的自制引擎可以帮助你理解底层原理而LangChain这类框架则能让你快速搭建生产级应用。安全第一记住我们演示中直接使用eval()函数是非常危险的绝不能在公开或生产环境中使用。在实际开发中一定要使用安全的替代方案比如ast.literal_eval()仅支持简单表达式或者专门的数学表达式解析库。6. 写在最后跟着走完这一趟你应该已经感受到了将一个大语言模型从一个“聊天伙伴”升级成一个“行动助手”的基本脉络。从加载模型、定义工具到构建执行引擎最后完成一个能调用外部功能的小智能体这个过程本身就是在理解AI如何与真实世界互动。Cogito-V1-Preview-Llama-3B作为一个在规划能力上有所侧重的模型为我们提供了一个很好的起点。你今天搭建的这个简易框架虽然功能简单但已经包含了智能体最核心的要素理解、规划、行动和记忆。它就像一颗种子你可以在此基础上为它添加更多的工具比如发送邮件、查询数据库、控制智能家居优化它的决策逻辑让它变得越来越能干。动手尝试的过程可能会遇到各种小问题比如模型回复格式不符合预期、工具调用解析失败等等但这正是开发的乐趣所在。每解决一个问题你对智能体运作机制的理解就会加深一层。不妨就从修改和扩展这个demo开始添加一个新工具或者尝试用LangChain重写一遍看看会有什么不同的体验。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。