【大模型LLM第十四篇】Agent学习之anthropic-quickstarts Agent

前言

对于anthropic api的快速使用,在github上有几个example

  • Customer Support Agent:由 Claude 提供支持的客户支持代理。该项目演示了如何利用 Claude 的自然语言理解和生成功能来创建可访问知识库的 AI 辅助客户支持系统。
  • Financial Data Analyst :由 Claude 提供支持的金融数据分析师。该项目演示了如何利用 Claude 的交互式数据可视化功能通过聊天分析财务数据。
  • Computer Use Demo: Claude 可用于控制台式计算机的环境和工具。该项目演示了如何利用新 Claude 3.5 Sonnet 模型的计算机使用功能。

其中 Computer use Demo是agent的example
链接:https://github.com/anthropics/anthropic-quickstarts/tree/main/computer-use-demo/computer_use_demo

文件介绍

打开之后可能会发现一堆报错,不慌,因为版本的问题,里面有一些python语言的不兼容,开头加上这句

from __future__ import annotations

一般agent文件目录都这么设置,朴实无华

  • tools:包含base tool等一系列基础组件,接下来就是一个个tool了,最终会把tool做collection送给模型规定的格式,最终模型think后作出判断输出tool的name,collection根据name策略模式来选择对应的tool执行
  • loop:agent loop的主要逻辑
  • streamlit:轻量级的直接可视化工具:https://docs.streamlit.io/

除了这些,一般还会把llm单独搞个模块出来,memory等模块。

环境安装

streamlit>=1.38.0
anthropic[bedrock,vertex]>=0.39.0
jsonschema==4.22.0
boto3>=1.28.57
google-auth<3,>=2

Tool

BaseTool

from __future__ import annotationsfrom abc import ABCMeta, abstractmethod
from dataclasses import dataclass, fields, replace
from typing import Anyfrom anthropic.types.beta import BetaToolUnionParamclass BaseAnthropicTool(metaclass=ABCMeta):"""Abstract base class for Anthropic-defined tools."""@abstractmethoddef __call__(self, **kwargs) -> Any:"""Executes the tool with the given arguments."""...@abstractmethoddef to_params(self,) -> BetaToolUnionParam:raise NotImplementedError@dataclass(kw_only=True, frozen=True)
class ToolResult:"""Represents the result of a tool execution."""output: str | None = Noneerror: str | None = Nonebase64_image: str | None = Nonesystem: str | None = Nonedef __bool__(self):return any(getattr(self, field.name) for field in fields(self))def __add__(self, other: "ToolResult"):def combine_fields(field: str | None, other_field: str | None, concatenate: bool = True):if field and other_field:if concatenate:return field + other_fieldraise ValueError("Cannot combine tool results")return field or other_fieldreturn ToolResult(output=combine_fields(self.output, other.output),error=combine_fields(self.error, other.error),base64_image=combine_fields(self.base64_image, other.base64_image, False),system=combine_fields(self.system, other.system),)def replace(self, **kwargs):"""Returns a new ToolResult with the given fields replaced."""return replace(self, **kwargs)class CLIResult(ToolResult):"""A ToolResult that can be rendered as a CLI output."""class ToolFailure(ToolResult):"""A ToolResult that represents a failure."""class ToolError(Exception):"""Raised when a tool encounters an error."""def __init__(self, message):self.message = message

其他的tool都需要去实现BaseAnthropicTool,输出为定义的ToolResult结构体

Tool的基础参数格式

按照API官方文档为准,(代码里应该是有一些问题,缺少description,每个params不规范,都为自定义
https://docs.anthropic.com/zh-CN/docs/build-with-claude/tool-use/overview

{"name": "get_weather","description": "获取指定位置的当前天气","input_schema": {"type": "object","properties": {"location": {"type": "string","description": "城市和州,例如 San Francisco, CA"},"unit": {"type": "string","enum": ["celsius", "fahrenheit"],"description": "温度单位,可以是'celsius'或'fahrenheit'"}},"required": ["location"]}
}

特殊的三个Tool

文档:https://docs.anthropic.com/en/docs/agents-and-tools/computer-use
以下三个tool的参数和基础common参数不一致,是特殊的处理

  • Computer tool: 截图,通过x,y坐标 挪动 鼠标, 多模态 这里面的很多操作也都是通过执行shell命令完成的
  • Bash tool:shell命令的tool
  • text-editor-tool

这三个tool都是模型本身训练过的,computer和text相对多模态比较难,bash可能出于安全考虑所以三个常用的tool都是训练过的,这里注意使用的时候的形态。

Collection设计

class ToolCollection:"""A collection of anthropic-defined tools."""def __init__(self, *tools: BaseAnthropicTool):self.tools = toolsself.tool_map = {tool.to_params()["name"]: tool for tool in tools}def to_params(self,) -> list[BetaToolUnionParam]:return [tool.to_params() for tool in self.tools]async def run(self, *, name: str, tool_input: dict[str, Any]) -> ToolResult:tool = self.tool_map.get(name)if not tool:return ToolFailure(error=f"Tool {name} is invalid")try:return await tool(**tool_input)except ToolError as e:return ToolFailure(error=e.message)

to_params之后得到一个对应格式tool各个参数的list,直接送入model,进行判断,模型判断得到tool name再通过run,进行解析参数,并通过name拿到对应的tool执行

可以借鉴的tool

  • bash, 因为是模拟电脑运行,必不可少的就是shell
  • computer:控制鼠标的一些方式,通过给予的x和y坐标

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/39606.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用DrissionPage升级网易云音乐爬虫:更稳定高效地获取歌单音乐(附原码)

一、传统爬虫的痛点分析 原代码使用requests re的方案存在以下局限性&#xff1a; 动态内容缺失&#xff1a;无法获取JavaScript渲染后的页面内容 维护成本高&#xff1a;网页结构变化需频繁调整正则表达式 反爬易触发&#xff1a;简单请求头伪造容易被识别 资源消耗大&am…

2025年渗透测试面试题总结- PingCAP安全工程师(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 PingCAP安全工程师 一、SQL注入判断数据库类型技术分析 1. 常规判断方法 2. 盲注场景下的判断 3. 补…

【加密社】如何创建自己的币圈工具站

需要准备的工作 1.域名 2.服务器 周末的时候主要弄了快讯这方面的代码 我这里用的是星球日报的api&#xff0c;也可以订阅他们的rss&#xff0c;这部分在github上是开源的 https://github.com/ODAILY 我这里用的是WordPressonenav主题&#xff0c;然后用小工具在主页展示&am…

Oracle归档配置及检查

配置归档位置到 USE_DB_RECOVERY_FILE_DEST&#xff0c;并设置存储大小 startup mount; !mkdir /db/archivelog ALTER SYSTEM SET db_recovery_file_dest_size100G SCOPEBOTH; ALTER SYSTEM SET db_recovery_file_dest/db/archivelog SCOPEBOTH; ALTER SYSTEM SET log_archive…

Apache Hive:基于Hadoop的分布式数据仓库

Apache Hive 是一个基于 Apache Hadoop 构建的开源分布式数据仓库系统&#xff0c;支持使用 SQL 执行 PB 级大规模数据分析与查询。 主要功能 Apache Hive 提供的主要功能如下。 HiveServer2 HiveServer2 服务用于支持接收客户端连接和查询请求。 HiveServer2 支持多客户端…

FPGA_DDS_IP核

接下来对FPGA的DDS的ip核进行学习。 首先对DDS需要有些了解 DDS信号发生器采用直接数字频率合成&#xff08;Direct Digital Synthesis&#xff0c;简称DDS&#xff09;技术&#xff0c;简单来说就是 需要一个系统频率和一个输入的数字数据 &#xff0c;用这个系统频率计算出…

欢迎来到未来:探索 Dify 开源大语言模型应用开发平台

欢迎来到未来&#xff1a;探索 Dify 开源大语言模型应用开发平台 如果你对 AI 世界有所耳闻&#xff0c;那么你一定听说过大语言模型&#xff08;LLM&#xff09;。这些智能巨兽能够生成文本、回答问题、甚至编写代码&#xff01;但是&#xff0c;如何将它们变成真正的实用工具…

计算机工具基础(七)——Git

Git 本系列博客为《Missing in CS Class(2020)》课程笔记 Git是一种分布式版本控制系统&#xff0c;被其跟踪的文件可被查询精细到行的修改记录、回退版本、建立分支等 模型 一般流程&#xff1a;工作区 → \to →暂存区 → \to →仓库(本地 → \to →远端) 工作区&#xff1…

uniapp动态循环表单校验失败:初始值校验

问题现象 &#x1f4a5; 在实现动态增减的单价输入表单时&#xff08;基于uv-form组件&#xff09;&#xff0c;遇到以下诡异现象&#xff1a; <uv-input>的v-model绑定初始值为数字类型时&#xff0c;required规则失效 ❌数字类型与字符串类型校验表现不一致 &#x1…

前端框架学习路径与注意事项

学习前端框架是一个系统化的过程&#xff0c;需要结合理论、实践和工具链的综合掌握。以下是学习路径的关键方面和注意事项&#xff1a; 一、学习路径的核心方面 1. 基础概念与核心思想 组件化开发&#xff1a;理解组件的作用&#xff08;复用性、隔离性&#xff09;、组件通信…

【Python机器学习】3.5. 决策树实战:基于Iris数据集

喜欢的话别忘了点赞、收藏加关注哦&#xff08;关注即可查看全文&#xff09;&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 本文紧承 3.1. 决策树理论(基础) 和 3.2. 决策树理论(进阶)&#xff0c;没看过的建议先看理论分…

Unity2022发布Webgl2微信小游戏部分真机黑屏

复现规律&#xff1a; Unity PlayerSetting中取消勾选ShowSplashScreen 分析&#xff1a; 在Unity中&#xff0c;Splash Screen&#xff08;启动画面&#xff09; 不仅是视觉上的加载动画&#xff0c;还承担了关键的引擎初始化、资源预加载和渲染环境准备等底层逻辑。禁用后导…

docker desktop 集成WSL Ubuntu22.04

Windows docker desktop 设置WSL ubuntu 22.04启用与其他发行版的集成 Windows docker desktop 安装参考 wsl ubuntu 22.04 查看我宿主机的docker desktop 容器全部的信息 wsl -d Ubuntu-22.04 -u root

快速入手-基于Django的主子表间操作mysql(五)

1、如果该表中存在外键&#xff0c;结合实际业务情况&#xff0c;那可以这么写&#xff1a; 2、针对特殊的字典类型&#xff0c;可以这么定义 3、获取元组中的字典值和子表中的value值方法 4、对应的前端页面写法

使用cursor开发java案例——springboot整合elasticsearch

安装elasticsearch 打开cursor&#xff0c;输入如下提示词 使用springboot整合elasticsearch。其中elasticsearch服务器ip&#xff1a;192.168.236.134 管理员用户名elastic 管理员密码 PdQy_xfR2yLhpok*MK_ 监听端口9200点Accept all 使用idea打开生成的项目 &#xff0…

Deepseek结合企业数据挖掘平台能够给企业提升哪些效益?

Deepseek&#xff08;深度求索&#xff09;作为智能系统&#xff0c;在政务办公领域可通过AI技术优化流程、提升效率&#xff0c;具体应用场景分析如下&#xff1a; 1. 智能公文处理与流转 自动分类与审核 利用NLP解析公文内容&#xff0c;自动分类&#xff08;如请示、报告、通…

vite中sass警告JS API过期

在Vite创建项目中引入Sass弹出The legacy JS API is deprecated and will be removed in Dart Sass 2.0.0 vite中sass警告JS API过期 The legacy JS API is deprecated and will be removed in Dart Sass 2.0.0 警告提示表明你当前正在使用的 Dart Sass 版本中&#xff0c;旧的…

jenkins+1panel面板java运行环境自动化部署java项目

本文章不包含1panel面板安装、jenkins部署、jenkins连接git服务器等操作教程&#xff0c;如有需要可以抽空后期补上 jenkins安装插件Publish Over SSH 在系统配置添加服务器 查看项目的工作空间 项目Configure->构Post Steps选择Send files or execute commands over SSH…

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加导出数据功能

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加导出数据功能📚页面效果📚指令输入�…

SpringBoot与Redisson整合,用注解方式解决分布式锁的使用问题

文章引用&#xff1a;https://mp.weixin.qq.com/s/XgdKE2rBKL0-nFk2NJPuyg 一、单个服务 1.代码 该接口的作用是累加一个值&#xff0c;访问一次该值加1 RestController public class LockController {Autowiredprivate StringRedisTemplate stringRedisTemplate;GetMappin…