当前位置: 首页 > news >正文

新手教程:5分钟实现一个智能体

旅行智能推荐助手一、准备工作获取实时搜索的apitavily-pythonAI 搜索 API 客户端用于获取实时的网络搜索结果可以在官网注册后获取 API。我们先在终端创建一个新环境命名为ai-agent当时设置的镜像是清华源的注意把梯子关了conda create -n ai-agent python3.11 -y然后再激活环境conda activate ai-agent用国内的镜像源安装pip install requests openai tavily-python -i https://pypi.tuna.tsinghua.edu.cn/simple二、编写智能体并测试打开vscode选择我们刚刚创建的环境。创建travel_agent.py文件# travel_agent.py 智能旅行助手完整代码 import os import re import requests from openai import OpenAI from tavily import TavilyClient # 1. 系统提示词智能体的指令 AGENT_SYSTEM_PROMPT 你是一个智能旅行助手。你的任务是分析用户的请求并使用可用工具一步步地解决问题。 # 可用工具: - get_weather(city: str): 查询指定城市的实时天气。 - get_attraction(city: str, weather: str): 根据城市和天气搜索推荐的旅游景点。 # 输出格式要求: 你的每次回复必须严格遵循以下格式包含一对Thought和Action Thought: [你的思考过程和下一步计划] Action: [你要执行的具体行动] Action的格式必须是以下之一 1. 调用工具function_name(arg_namearg_value) 2. 结束任务Finish[最终答案] # 重要提示: - 每次只输出一对Thought-Action - Action必须在同一行不要换行 - 当收集到足够信息可以回答用户问题时必须使用 Action: Finish[最终答案] 格式结束 # 2. 工具1查询天气 def get_weather(city: str) - str: url fhttps://wttr.in/{city}?formatj1 try: response requests.get(url, timeout10) response.raise_for_status() data response.json() current data[current_condition][0] desc current[weatherDesc][0][value] temp current[temp_C] return f{city}当前天气{desc}气温{temp}℃ except Exception as e: return f天气查询失败{str(e)} # 3. 工具2景点推荐Tavily搜索 def get_attraction(city: str, weather: str) - str: api_key os.environ.get(TAVILY_API_KEY) if not api_key: return 错误未设置Tavily API Key tavily TavilyClient(api_keyapi_key) query f{city} {weather}天气 适合去的旅游景点推荐 try: res tavily.search(queryquery, search_depthbasic, include_answerTrue) return res.get(answer, 未找到推荐信息) except Exception as e: return f景点搜索失败{str(e)} # 工具注册 available_tools { get_weather: get_weather, get_attraction: get_attraction } # 4. LLM 客户端 class OpenAICompatibleClient: def __init__(self, model: str, api_key: str, base_url: str): self.model model self.client OpenAI(api_keyapi_key, base_urlbase_url) def generate(self, prompt: str, system_prompt: str) - str: print(\n→ 正在调用大模型...) try: messages [ {role: system, content: system_prompt}, {role: user, content: prompt} ] resp self.client.chat.completions.create( modelself.model, messagesmessages, temperature0.1 ) return resp.choices[0].message.content except Exception as e: return f模型调用失败{str(e)} # 5. 填写你的 KEY # 1. 大模型 API 信息 API_KEY 替换成自己的 BASE_URL 替换成自己的 MODEL_ID 替换成自己的 # 2. Tavily API Key搜索景点用 TAVILY_API_KEY 替换成自己的 os.environ[TAVILY_API_KEY] TAVILY_API_KEY # 初始化LLM llm OpenAICompatibleClient( modelMODEL_ID, api_keyAPI_KEY, base_urlBASE_URL ) # 6. 智能体主循环 if __name__ __main__: user_query 你好请帮我查询一下今天北京的天气然后根据天气推荐一个合适的旅游景点。 history [f用户请求{user_query}] print( * 50) print(用户输入, user_query) print( * 50) # 最多循环5次 for round_num in range(5): print(f\n 第 {round_num1} 轮思考 ) # 构造完整prompt full_prompt \n.join(history) # 调用LLM llm_response llm.generate(full_prompt, AGENT_SYSTEM_PROMPT) print(模型输出\n, llm_response) # 截断多余内容 match re.search(r(Thought:.*?Action:.*?)(?\nThought|\Z), llm_response, re.DOTALL) if match: llm_response match.group(1).strip() history.append(llm_response) # 解析Action action_match re.search(rAction: (.*), llm_response) if not action_match: obs 无法解析Action history.append(fObservation: {obs}) continue action action_match.group(1).strip() # 如果是Finish结束任务 if action.startswith(Finish): ans re.findall(rFinish\[(.*?)\], action)[0] print(\n任务完成最终回答\n, ans) break # 解析工具名和参数 tool_name re.findall(r(\w)\(, action)[0] args dict(re.findall(r(\w)([^]), action)) # 执行工具 if tool_name in available_tools: obs available_tools[tool_name](**args) else: obs f工具{tool_name}不存在 print(f\nObservation: {obs}) history.append(fObservation: {obs})我选用的大模型是qwen-turbo打开阿里云百炼通义千问平台https://bailian.console.aliyun.com/用阿里云账号登录没有就注册一个要实名认证右上角进入API Key 管理 → 创建 API Key设置好后执行该文件。最后输出(ai-agent) PS D:\Project\ai-agent C:\Users\HUANG\.conda\envs\ai-agent\python.exe d:/Project/ai-agent/travel_agent.py 用户输入 你好请帮我查询一下今天北京的天气然后根据天气推荐一个合适的旅游景点。 第 1 轮思考 → 正在调用大模型... 模型输出 Thought: 用户需要查询北京的天气并根据天气推荐一个旅游景点。首先我需要调用工具获取北京的实时天气。 Action: function_nameget_weather(city北京) Observation: 北京当前天气Sunny气温26℃ 第 2 轮思考 → 正在调用大模型... 模型输出 Thought: 现在我有了北京的天气信息接下来我需要根据天气推荐一个合适的旅游景点。 Action: function_nameget_attraction(city北京, weatherSunny) Observation: 北京天坛和颐和园在晴天特别适合游览这两个地方有丰富的历史和美丽的景色。 第 3 轮思考 → 正在调用大模型... 模型输出 Thought: 根据天气信息我已找到适合的旅游景点。现在可以向用户推荐这些景点。 Action: Finish[北京今天天气晴朗气温26℃推荐您去北京天坛和颐和园游览这两个地方在晴天特别适合有丰富的历史和美丽的景色。] 任务完成最终回答 北京今天天气晴朗气温26℃推荐您去北京天坛和颐和园游览这两个地方在晴天特别适合有丰富的历史和美丽的景色。 (ai-agent) PS D:\Project\ai-agent
http://www.gsyq.cn/news/1410036.html

相关文章:

  • 别再混淆了!一文讲透FPGA中Standard FIFO与FWFT(预读)FIFO的核心差异与应用选型
  • 安全攻防 - 04 GMSSL 工程介绍
  • 终极FPDF指南:5分钟学会用纯PHP生成专业PDF文档
  • 从STK到osgEarth:我的雷达可视化方案迁移踩坑全记录(附完整C++代码)
  • Ambari 3.0+Kafka安全认证
  • Python RTSP 视频流处理完全指南:从稳定接收到智能分析
  • Vue项目里用Highcharts+Canvas做实时频谱瀑布图,我是怎么解决30ms渲染不卡顿的?
  • UE4植被动态效果避坑指南:从SimpleGrassWind撕裂到完美风场(含顶点绘制替代方案)
  • 手把手教你学Simulink——考虑器件结温特性的双向DC-AC逆变器热管理建模仿真
  • 告别纸上谈兵:用Wireshark抓包实战解析5G N2/NGAP切换全流程(附pcap文件)
  • 从保险理赔到广告效果分析:不懂公式也能上手的‘置信区间’实战指南
  • 别再让求解器‘装傻’:COMSOL事件接口(显示/隐式)避坑指南与典型场景盘点
  • 从pnpm报错到Vite打包优化:手把手解决JeecgBoot-Vue3项目启动与构建的那些坑
  • 面试官:Agent 落地会遇到哪些坑?
  • 语言脑机接口解码流程对比【脑机接口恢复语言2】
  • 避坑指南:为什么你的Conda环境里LabelMe的转换命令总失效?详解Python包管理与路径冲突
  • 从‘打包’到‘解压’:一次搞懂tar命令的-cvf、-xvf、-cvzf、-zxvf在CentOS/Ubuntu下的实战
  • 手机变Linux开发机:用Termux和MT管理器打造移动端代码编辑与文件管理环境
  • 架构师的底层重构逻辑:面部松弛、纹路加深?用3大核心参数选对高阶胶原饮
  • C++入门刷题记录~(动态内存分配)
  • NestJS项目接口权限怎么管理?结合Swagger文档清晰展示JWT守卫与角色控制
  • Claude_Desktop——全流程指南-免登录-DeepSeek-中文汉化
  • 第10章:AI辅助安全审计实战——从漏洞检测到形式化验证
  • 烤火罩在潮湿环境容易发霉吗 新 E 选品牌源头厂家说明
  • Claude Code + DeepSeek V4 Pro +VS Code 安装
  • 别再傻傻分不清!SystemVerilog Interface里modport和clocking到底谁管谁?
  • 在OpenClaw中配置Taotoken作为后端AI供应商的详细步骤
  • ChatGPT销售话术优化:今天不重构话术逻辑,明天就被AI增强型竞品碾压——来自17家已部署企业的紧急预警
  • 到处听见韬τ定律
  • 推荐题目:洛谷 P5730 【深基5.例10】显示屏