手把手教你搭第一个智能体:需求、设计、实现三步走

  引言:从“聊天”到“做事”,你的第一个智能体之旅

  你是否曾经想过,为什么别人做的AI能自动查天气、订机票、写周报,而你自己用的却只能一问一答?区别就在于——你用的是聊天机器人,而别人用的是智能体。

  智能体(Agent)与传统AI的最大不同在于:它能感知环境、自主规划、调用工具、执行行动。简单来说,聊天机器人是“动口不动手”的君子,智能体是“说到做到”的行动派。

  今天这篇文章,我将带你走完智能体搭建的全流程:从明确需求开始,到设计架构,再到代码实现。全程没有晦涩的理论,只有一步步可操作的实战。无论你是刚入门的开发者,还是想快速落地的产品经理,都能在30分钟内搭建出属于自己的第一个智能体。

  第一步:需求定义——想清楚再动手

  在写第一行代码之前,必须先回答三个问题:你的智能体要解决什么问题?为谁服务?能做什么不能做什么?

  1.1 明确任务目标

  智能体搭建的任务越具体,成功率越高。不要试图做一个“万能助手”,那往往是失败的开始。

  好的任务目标示例:

  “一个能查询实时天气并给出穿衣建议的助手”

  “一个能根据用户症状推荐常见药品的医疗咨询助手”

  “一个能自动整理Excel数据并生成报表的分析助手”

  差的任务目标示例:

  “一个智能助手”(太宽泛,无法聚焦)

  “一个能解决所有问题的AI”(不现实)

  以我们今天要搭建的智能体为例:一个能查询天气和进行简单计算的个人助理。这个目标足够具体,又涵盖了工具调用的核心能力。

  1.2 角色设定与能力边界

  给智能体一个“人设”,能让它更符合预期。同时,明确它能做什么、不能做什么,避免“幻觉”问题。

  角色设定:

  text

  你是一个友好的个人助理,名叫“小助手”。

  你的语气亲切但专业,回答简洁明了。

  当用户询问天气时,你会调用天气工具查询实时信息。

  当用户需要计算时,你会调用计算工具给出准确结果。

  对于超出你能力范围的问题(如情感咨询、医疗诊断),你会礼貌地告诉用户无法回答。

  能力边界:

  查询任意城市的实时天气

  执行数学计算(加减乘除、括号运算)

  不提供医疗建议

  不进行情感分析

  不访问实时新闻(除非未来扩展)

  1.3 定义输入输出

  智能体搭建的输入通常是用户的问题,输出则是自然语言回答。但对于有工具调用的场景,我们需要更清晰的输入输出规范。

  输入示例:

  “北京今天天气怎么样?”

  “帮我算一下 (125 + 37) × 8 等于多少?”

  输出示例:

  “北京今天晴,气温22℃,东南风2级,适合户外活动。”

  “计算结果:(125 + 37) × 8 = 162 × 8 = 1296”

  第二步:架构设计——搭好骨架再填肉

  明确了需求之后,我们来设计智能体的核心架构。一个标准的智能体通常包含四个核心模块:

  2.1 核心四模块

  感知层(Perception):接收用户输入,可以是文本、语音或图像。我们初级阶段只处理文本输入。

  大脑层(Reasoning):大语言模型(LLM)负责理解问题、决定是否调用工具、生成最终回答。我们选择DeepSeek或通义千问作为基础模型。

  记忆层(Memory):短期记忆维护当前对话上下文,长期记忆存储用户偏好(可选)。我们先用短期记忆实现对话连贯性。

  行动层(Action):工具调用能力,通过函数调用(Function Calling)机制实现与外部世界的交互。

  2.2 工作流程设计

  智能体的核心工作流程是一个“思考-行动-观察”的循环,学术界称为ReAct模式:

  text

  用户输入 → LLM理解并推理 → 是否需要工具?

  ├─ 是 → 调用工具 → 获取结果 → LLM综合生成回答 → 返回用户

  └─ 否 → 直接生成回答 → 返回用户

  这个循环看起来简单,但背后涉及模型选择、工具定义、上下文管理等多个环节。接下来我们一步步实现。

  2.3 技术选型

  对于初学者,我推荐以下技术栈:

  开发语言:Python 3.8+(生态最成熟)

  大模型API:DeepSeek(性价比高)或通义千问(国内稳定)

  开发框架:直接调用API,不依赖复杂框架(便于理解原理)

  部署环境:本地开发 + 可选云函数部署

  第三步:代码实现——从0到1跑起来

  现在进入最激动人心的环节:写代码。我们将分三步实现:基础对话能力、工具定义、完整的智能体循环。

  3.1 环境准备

  首先,安装必要的Python库:

  bash

  pip install openai # DeepSeek兼容OpenAI SDK

  pip install requests

  然后,获取API密钥(以DeepSeek为例):

  访问DeepSeek官网注册账号

  在控制台创建API Key

  保存好密钥,等下要用

  3.2 第一步:实现基础对话能力

  先测试模型是否能正常调用,这是智能体的“大脑”:

  python

  f rom openai import OpenAI

  import json

  # 初始化客户端(以DeepSeek为例)

  client = OpenAI(

  api_key=”sk-你的密钥”, # 替换为真实密钥

  base_url=”https://api.deepseek.com”

  )

  def basic_chat(user_input):

  ”””基础对话函数,验证模型通路”””

  messages = [

  {“role”: “system”, “content”: “你是一个友好的个人助手。”},

  {“role”: “user”, “content”: user_input}

  ]

  response = client.chat.completions.create(

  model=”deepseek-chat”,

  messages=messages,

  temperature=0.7

  )

  return response.choices[0].message.content

  # 测试

  print(basic_chat(“你好,请介绍一下你自己”))

  如果能看到模型回复,恭喜你,大脑已经接入了!

  3.3 第二步:定义工具(Function Calling)

  这是智能体“动手能力”的关键。我们需要用JSON Schema描述每个工具的功能和参数。

  python

  # 定义工具列表

  tools = [

  {

  ”type”: “function”,

  ”function”: {

  ”name”: “get_weather”,

  ”description”: “获取指定城市的实时天气信息”,

  ”parameters”: {

  ”type”: “object”,

  ”properties”: {

  ”city”: {

  ”type”: “string”,

  ”description”: “城市名称,如:北京、上海、广州”

  },

  ”unit”: {

  ”type”: “string”,

  ”enum”: [“celsius”, “fahrenheit”],

  ”description”: “温度单位,默认摄氏度”

  }

  },

  ”required”: [“city”]

  }

  }

  },

  {

  ”type”: “function”,

  ”function”: {

  ”name”: “calculate”,

  ”description”: “执行数学计算”,

  ”parameters”: {

  ”type”: “object”,

  ”properties”: {

  ”expression”: {

  ”type”: “string”,

  ”description”: “数学表达式,例如:(23 + 5) * 2”

  }

  },

  ”required”: [“expression”]

  }

  }

  }

  ]

  # 实现工具函数

  def get_weather(city, unit=”celsius”):

  ”””模拟天气查询(真实场景可接入高德/和风天气API)”””

  # 这里用模拟数据,实际开发中应调用真实天气API

  weather_db = {

  ”北京”: {“temp”: 22, “condition”: “晴”, “wind”: “东南风2级”},

  ”上海”: {“temp”: 25, “condition”: “多云”, “wind”: “东风3级”},

  ”广州”: {“temp”: 28, “condition”: “小雨”, “wind”: “南风2级”},

  ”深圳”: {“temp”: 27, “condition”: “阴”, “wind”: “微风”}

  }

  city_data = weather_db.get(city, {“temp”: 20, “condition”: “未知”, “wind”: “未知”})

  # 单位转换

  temp = city_data[“temp”]

  if unit == “fahrenheit”:

  temp = round(temp * 9/5 + 32)

  unit_str = “°F”

  else:

  unit_str = “℃”

  return json.dumps({

  ”city”: city,

  ”temperature”: f”{temp}{unit_str}”,

  ”condition”: city_data[“condition”],

  ”wind”: city_data[“wind”]

  }, ensure_ascii=False)

  def calculate(expression):

  ”””执行数学计算(生产环境请用更安全的eval方式)”””

  try:

  # 简单计算,实际应用可考虑使用numexpr等更安全的库

  result = eval(expression)

  return json.dumps({“expression”: expression, “result”: result})

  except Exception as e:

  return json.dumps({“error”: f”计算失败: {str(e)}”})

  3.4 第三步:实现完整的智能体循环

  这是最核心的部分——让模型能够自主决定是否调用工具,并根据工具结果生成最终回答。

  python

  def run_agent(user_input, conversation_history=None):

  ”””运行智能体主循环”””

  if conversation_history is None:

  conversation_history = []

  # 将用户输入加入历史

  conversation_history.append({“role”: “user”, “content”: user_input})

  # 第一次调用:让模型判断是否需要调用工具

  response = client.chat.completions.create(

  model=”deepseek-chat”,

  messages=conversation_history,

  tools=tools,

  tool_choice=”auto” # 让模型自动选择

  )

  response_message = response.choices[0].message

  conversation_history.append(response_message) # 将模型响应加入历史

  # 检查模型是否要求调用工具

  tool_calls = response_message.tool_calls

  if tool_calls:

  print(f” 智能体决定调用工具: {[tool.function.name for tool in tool_calls]}”)

  for tool_call in tool_calls:

  func_name = tool_call.function.name

  func_args = json.loads(tool_call.function.arguments)

  # 根据函数名分发到对应的工具函数

  if func_name == “get_weather”:

  tool_result = get_weather(**func_args)

  elif func_name == “calculate”:

  tool_result = calculate(**func_args)

  else:

  tool_result = json.dumps({“error”: “未知工具”})

  # 将工具执行结果作为tool消息追加

  conversation_history.append({

  ”role”: “tool”,

  ”tool_call_id”: tool_call.id,

  ”content”: tool_result

  })

  # 第二次调用:让模型基于工具结果生成最终回答

  second_response = client.chat.completions.create(

  model=”deepseek-chat”,

  messages=conversation_history

  )

  final_reply = second_response.choices[0].message.content

  conversation_history.append({“role”: “assistant”, “content”: final_reply})

  else:

  # 不需要调用工具,直接使用模型的回答

  final_reply = response_message.content

  return final_reply, conversation_history

  # 测试智能体

  def test_agent():

  history = []

  # 测试天气查询

  query1 = “北京今天天气怎么样?”

  reply1, history = run_agent(query1, history)

  print(f” 用户: {query1}”)

  print(f” 智能体: {reply1}n”)

  # 测试计算功能

  query2 = “帮我算一下 (125 + 37) × 8 等于多少?”

  reply2, history = run_agent(query2, history)

  print(f” 用户: {query2}”)

  print(f”智能体: {reply2}n”)

  # 测试多轮对话(智能体应该记得刚才的对话)

  query3 = “刚才那个城市的气温用华氏度是多少?”

  reply3, history = run_agent(query3, history)

  print(f” 用户: {query3}”)

  print(f” 智能体: {reply3}”)

  if __name__ == “__main__”:

  test_agent()

  3.5 运行效果

  执行上面的代码,你会看到类似这样的输出:

  text

   用户: 北京今天天气怎么样?

   智能体决定调用工具: [‘get_weather’]

   智能体: 北京今天晴,气温22℃,东南风2级。天气不错,适合外出活动。

   用户: 帮我算一下 (125 + 37) × 8 等于多少?

  智能体决定调用工具: [‘calculate’]

  智能体: (125 + 37) × 8 = 162 × 8 = 1296。计算完成!

  用户: 刚才那个城市的气温用华氏度是多少?

   智能体决定调用工具: [‘get_weather’]

   智能体: 北京今天气温22℃,换算成华氏度约为72°F(22 × 9/5 + 32 = 71.6°F)。

  恭喜!你已经成功搭建了第一个能“思考并行动”的智能体。它不仅能回答问题,还能自主决定调用工具,并根据工具结果给出更准确的回答。

  常见问题解答

  Q1:为什么我的智能体不调用工具?

  A:常见原因有三个:1)模型本身不支持函数调用(检查使用的模型版本);2)提示词中没有明确告诉它可以调用工具;3)工具定义有格式错误。建议先用支持的模型(如deepseek-chat或gpt-4o),并确保tools参数正确传入。

  Q2:工具调用时出现“参数错误”怎么办?

  A:检查JSON Schema定义是否与函数实际参数一致。例如,函数定义中参数名是city,但JSON Schema中写成location就会导致错误。

  Q3:多轮对话后智能体会忘记上下文怎么办?

  A:我们的代码已经通过conversation_history维护了短期记忆。如果对话特别长,可以考虑使用滑动窗口或向量数据库进行记忆压缩。

  Q4:如何添加新的工具?

  A:三步走:1)在tools列表中添加工具定义(JSON Schema);2)实现对应的工具函数;3)在工具分发逻辑中添加新的elif分支。这样就完成了扩展。

  Q5:智能体回答太随机,如何让它更稳定?

  A:调整temperature参数,值越低(如0.3)回答越确定;值越高(如0.9)越有创造性。同时,优化系统提示词,给模型更清晰的指令。

  Q6:生产环境如何部署?

  A:建议将智能体封装为HTTP服务(使用FastAPI等框架),部署在云函数或容器服务上。同时需要添加监控、日志和熔断机制保障稳定性。

  结语:你的智能体,只是开始

  从需求定义到架构设计,从基础对话到工具调用,你已经走完了智能体开发的全流程。那个能查天气、能算算术的“小助手”,虽然简单,却蕴含着智能体的核心思想:感知-规划-行动的闭环。

  回顾开篇的问题——为什么别人的AI能做事,你的只能聊天?现在答案很清楚了:关键在于工具调用和自主规划能力。而你,已经掌握了这一切。

  接下来,你可以往这几个方向迭代:

  添加更多工具:接入真实天气API、数据库查询、邮件发送等

  优化记忆机制:用向量数据库实现长期记忆

  探索多智能体协作:让多个智能体分工完成复杂任务

  部署上线:封装成API,集成到微信、钉钉等应用中

  这需求、设计、实现三步走的过程中,你觉得哪一步最让你豁然开朗?或者你在动手实践中遇到了什么问题?欢迎在评论区分享交流。

  【途傲科技实用指南】

  如果你正在寻找专业的智能体开发人才,或者需要外包AI应用项目,途傲科技平台汇聚了百万技术服务商,能帮你快速匹配到合适的开发团队。

  在任务大厅发布需求时,建议这样描述:“我们需要一个AI智能体开发工程师,搭建一个客服咨询智能体。技术要求:1)熟悉大模型API调用和Function Calling机制;2)有扣子或Dify等低代码平台实战经验者优先;3)需设计多轮对话流程和知识库检索;4)提供过往AI项目案例。预算范围XXXX元,可长期合作。”

  在人才大厅寻找开发者时,可重点关注具备以下背景的服务商:有AI智能体或聊天机器人开发案例、熟悉主流LLM API集成、在提示词工程方面有经验、过往客户评价中“交付质量”评分高。

  途傲科技的服务大厅提供智能匹配功能,输入你的需求关键词,系统会推荐符合条件的优质服务商。入驻平台的商铺可查看服务商的过往案例、客户评价和技术栈详情,帮助你做出更明智的选择。

  雇主攻略学习:建议新用户先浏览平台上的“AI应用开发外包攻略”专题,了解从需求发布到项目验收的全流程注意事项。平台还提供一品商城服务,可以直接选购标准化的AI开发服务套餐,适合预算有限或需求明确的项目。

  加入V客优享会员,能够获得专属顾问对接、优先推荐优质服务商、需求加急等权益,彻底改变你的工作方式,让专业的事交给专业的人。途傲科技,汇聚百万服务商,为你提供从AI开发到创意设计的全方位技术服务。

联系我们

联系我们

18678836968

在线咨询: QQ交谈

邮箱: tooaotech@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息
关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部