动手学Agent——Day2

文章目录

    • 一、用 Llama-index 创建 Agent
      • 1. 测试模型
      • 2. 自定义一个接口类
      • 3. 使用 ReActAgent & FunctionTool 构建 Agent
    • 二、数据库对话 Agent
      • 1. SQLite 数据库
        • 1.1 创建数据库 & 连接
        • 1.2 创建、插入、查询、更新、删除数据
        • 1.3 关闭连接
        • 建立数据库
      • 2. ollama
      • 3. 配置对话 & Embedding 模型
    • 三、RAG 接入Agent

一、用 Llama-index 创建 Agent

LlamaIndex 实现 Agent,需要导入:

  • Function Tool:将工具函数放在 Function Tool 对象中
    • 工具函数 -> 完成 Agent 任务。⚠️大模型会根据函数注释来判断使用哪个函数来完成任务,所以,注释一定要写清楚函数功能和返回值
  • ReActAgent:通过结合推理(Reasoning)和行动(Acting)来创建动态的 LLM Agent 的框架
    • 初始推理:agent首先进行推理步骤,以理解任务、收集相关信息并决定下一步行为
    • 行动:agent基于其推理采取行动——例如查询API、检索数据或执行命令
    • 观察:agent观察行动的结果并收集任何新的信息
    • 优化推理:利用新消息,代理再次进行推理,更新其理解、计划或假设
    • 重复:代理重复该循环,在推理和行动之间交替,直到达到满意的结论或完成任务

1. 测试模型

  • 使用一个数学能力较差的模型
# https://bailian.console.aliyun.com/#/model-market/detail/chatglm3-6b?tabKey=sdk
from dashscope import Generation messages = [{'role': "system", 'content': 'You are a helpful assistant.'},{'role': "user", 'content': '9.11 和 9.8 哪个大?'},
]gen = Generation()
response = gen.call(api_key=os.getenv("API_KEY"),model='chatglm3-6b',messages=messages,result_format='message',
)print(response.output.choices[0].message.content)
9.11 比 9.8 更大。

2. 自定义一个接口类

# https://www.datawhale.cn/learn/content/86/3058
from llama_index.core.llms import CustomLLM, LLMMetadata, CompletionResponse
from llama_index.core.llms.callbacks import llm_completion_callback
import os
from typing import Any, Generatorclass MyLLM(CustomLLM):api_key: str = Field(default=os.getenv("API_KEY"))base_url: str = Field(default=os.getenv("BASE_URL"))client: Generation = Field(default=Generation(), exclude=True)model_name: str@propertydef metadata(self) -> LLMMetadata:return LLMMetadata(model_name=self.model_name,context_window=32768,  # 根据模型实际情况设置num_output=512)@llm_completion_callback()def complete(self, prompt: str, **kwargs: Any) -> CompletionResponse:messages = [{'role': "user", 'content': prompt},  # 根据API需求调整]response = self.client.call(api_key=self.api_key,model=self.model_name,messages=messages,result_format='message',)return CompletionResponse(text=response.output.choices[0].message.content)@llm_completion_callback()def stream_complete(self, prompt: str, **kwargs: Any) -> Generator[CompletionResponse, None, None]:response = self.client.call(api_key=self.api_key,model=self.model_name,messages=[{'role': "user", 'content': prompt}],stream=True,)current_text = ""for chunk in response:content = chunk.output.choices[0].delta.get('content', '')current_text += contentyield CompletionResponse(text=current_text, delta=content)# 实例化时使用大写环境变量名
llm = MyLLM(api_key=os.getenv("API_KEY"), base_url=os.getenv("BASE_URL"), model_name='chatglm3-6b'
)

3. 使用 ReActAgent & FunctionTool 构建 Agent

from llama_index.core.tools import FunctionTool
from llama_index.core.agent import ReActAgentdef compare_number(a: float, b: float) -> str:"""比较两个数的大小"""if a > b:return f"{a} 大于 {b}"elif a < b:return f"{a} 小于 {b}"else:return f"{a} 等于 {b}"tool = FunctionTool.from_defaults(fn=compare_number)
agent = ReActAgent.from_tools([tool], llm=llm, verbose=True)
response = agent.chat("9.11 和 9.8 哪个大?使用工具计算")
print(response)
> Running step 8c56594a-4edd-4d63-a196-99198df94e12. Step input: 9.11 和 9.8 哪个大?使用工具计算
Observation: Error: Could not parse output. Please follow the thought-action-input format. Try again.
Running step 22bbb997-4b52-4230-8a4d-d8eda252b7d1. Step input: None
Thought: The user is asking to compare the numbers 9.11 and 9.8, and they would like to know which one is greater. I can use the compare_number function to achieve this.
Action: compare_number
Action Input: {'a': 9.11, 'b': 9.8}
Observation: 9.11 小于 9.8
> Running step c6ce4186-3ea7-48c8-8f76-7d219118afc4. Step input: None
Thought: 根据比较结果,9.11小于9.8。
Answer: 9.11 < 9.8
9.11 < 9.8

二、数据库对话 Agent

1. SQLite 数据库

1.1 创建数据库 & 连接
import sqlite3# 连接数据库
conn = sqlite3.connect('mydatabase.db')# 创建游标对象
cursor = conn.cursor()
1.2 创建、插入、查询、更新、删除数据
  • 创建
# create
create_tabel_sql = """CREATE TABLE IF NOT EXISTS employees ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, department TEXT,salary REAL );	"""cursor.execute(create_table_sql)# 提交事务
conn.commit()
  • 插入
insert_sql = "INSERT INTO employees (name, department, salary) VALUES (?, ?, ?)"# insert single
data = ("Alice", "Engineering", 75000.0)
cursor.execute(insert_sql, data)
cursor.commit()# insert many
employees = [("Bob", "Marketing", 68000.0),("Charlie", "Sales", 72000.0)
]
cursor.executemany(insert_sql, employees)
cursor.commit()
  • 查询
# 查询
# 条件查询(按部门筛选) 
cursor.execute("SELECT name, salary FROM employees WHERE department=?", ("Engineering",)) 
engineering_employees = cursor.fetchall() 
print("\nEngineering department:") 
for emp in engineering_employees: print(f"{emp[0]} - ${emp[1]:.2f}")
  • 更新
update_sql = "UPDATE employees SET salary = ? WHERE name = ?"
cursor.execute(update_sql, (8000.0, 'Alice'))
cursor.commit()
  • 删除
delect_sql = "DELECT FROM employees WHERE name = ?"
cursor.execute(delect_sql, ("Bob",))
conn.commit()
1.3 关闭连接
# 关闭游标和连接(释放资源)
cursor.close()
conn.close()
建立数据库

python建立数据库的方法

import sqlite3
# create sql
sqlite_path = "llmdb.db"
# 1. 创建数据库、创建游标对象
conn = sqlite3.connect(sqlite_path)
curosr = conn.cursor()create_sql = """CREATE TABLE `section_stats` (`部门` varchar(100) DEFAULT NULL,`人数` int(11) DEFAULT NULL);"""insert_sql = """INSERT INTO section_stats (部门, 人数)values(?, ?)"""data = [['专利部', 22], ['商务部', 25]]# 2. 创建数据库
cursor.execute(create_sql)
cursor.commit()
# 3. 插入数据
cursor.executemany(insert_sql, data)
cursor.commit()
# 4. 关闭连接
cursor.close()
conn.close()

2. ollama

安装 ollama
- 官网下载安装: [https://ollama.com](https://ollama.com/)
- 模型安装, 如运行 ollama run qwen2.5:7b(出现了success安装成功)- 然后出现 >>> 符号,即对话窗口, 输入 /bye 推出交互页面- 浏览器输入 127.0.0.1:11434, 如果出现 ollama is running,说明端口运行正常
- 环境配置- `OLLAMA_MODELS` & `OLLAMA_HOST` 环境配置1. 创建存储路径,如`mkdir -p ~/programs/ollama/models`2. 编辑环境变量配置路径 `vim ~/.bash_profile #  ~/.zshrc``export OLLAMA_MODELS=~/programs/ollama/models``export OLLAMA_HOST=0.0.0.0:11434`- 确定mac地址和防火墙允许:系统偏好设置 -> 网络 (安全性和隐私-> 防火墙)- 使配置生效`source ~/.bash_profile #  ~/.zshrc`

3. 配置对话 & Embedding 模型

!pip install llama-index-llms-dashscope

三、RAG 接入Agent

https://github.com/deepseek-ai/DeepSeek-R1/blob/main/README.md

在这里插入图片描述

在这里插入图片描述

https://github.com/deepseek-ai/DeepSeek-R1/blob/main/README.md

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

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

相关文章

最新国内 ChatGPT Plus/Pro 获取教程

最后更新版本&#xff1a;20250202 教程介绍&#xff1a; 本文将详细介绍如何快速获取一张虚拟信用卡&#xff0c;并通过该卡来获取ChatGPT Plus和ChatGPT Pro。 # 教程全程约15分钟开通ChatGPT Plus会员帐号前准备工作 一个尚未升级的ChatGPT帐号&#xff01;一张虚拟信用卡…

Redis哈希槽机制的实现

Redis哈希槽机制的实现 Redis集群使用哈希槽&#xff08;Hash Slot&#xff09;来管理数据分布&#xff0c;整个集群被划分为固定的16384个哈希槽。当我们在集群中存储一个键时&#xff0c;Redis会先对键进行哈希运算&#xff0c;得到一个哈希值。然后&#xff0c;Redis将该哈…

下载安装运行测试开源vision-language-action(VLA)模型OpenVLA

1. 安装 项目官网OpenVLA 首先按照官网提示的以下代码&#xff0c;执行创建环境->安装最小依赖->git克隆项目等 # Create and activate conda environment conda create -n openvla python3.10 -y conda activate openvla# Install PyTorch. Below is a sample comma…

外贸跨境订货系统流程设计、功能列表及源码输出

在全球化的商业环境下&#xff0c;外贸跨境订货系统对于企业拓展国际市场、提升运营效率至关重要。该系统旨在为外贸企业提供一个便捷、高效、安全的订货平台&#xff0c;实现商品展示、订单管理、物流跟踪等功能&#xff0c;满足跨境业务的多样化需求。以下将详细阐述外贸订货…

排序算法复习——包括插入排序、希尔排序、冒泡排序、快排(包括霍尔法、挖坑法、快慢指针法)、堆排、选择排序、归并排序等 (代码采用c/c++混编)

1.插入排序 插入排序就像我们打斗地主的时候&#xff0c;有一大把牌我们来不及理&#xff0c;就会一张一张的拿然后把拿到的牌放到合适的位置。 对于插入排序我们可以将待排序的数组理解为那一堆没有整理的牌&#xff0c;将排序好的部分理解为手上的牌&#xff0c;对于第i张牌我…

RocketMQ 5.0安装部署

0.前言 在微服务架构逐渐成为主流的今天&#xff0c;消息队列如同数字世界的快递员&#xff0c;承担着系统间高效通信的重要使命。 Apache RocketMQ 自诞生以来&#xff0c;因其架构简单、业务功能丰富、具备极强可扩展性等特点被众多企业开发者以及云厂商广泛采用。历经十余…

Jetson Agx Orin平台preferred_stride调试记录--1924x720图像异常

1.问题描述 硬件: AGX Orin 在Jetpack 5.0.1和Jetpack 5.0.2上测试验证 图像分辨率在1920x720和1024x1920下图像采集正常 但是当采集图像分辨率为1924x720视频时,图像输出异常 像素格式:yuv_uyvy16 gstreamer命令如下 gst-launch-1.0 v4l2src device=/dev/video0 ! …

【玩转全栈】----Django模板语法、请求与响应

目录 一、引言 二、模板语法 三、传参 1、视图函数到模板文件 2、模板文件到视图函数 四、引入静态文件 五、请求与响应 ?1、请求 2、响应 六、综合小案例 1、源码展示 2、注意事项以及部分解释 3、展示 一、引言 像之前那个页面&#xff0c;太过简陋&#xff0c;而且一个完整…

#渗透测试#批量漏洞挖掘#CyberPanel面板远程命令执行漏洞(CVE-2024-51567)

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。 目录 一、漏洞特征与影响 二、修复方案与技术细…

C++多态

目录 多态的概念多态的定义及实现协变析构函数的重写通过一段代码理解多态C11 final 和 override重载、覆盖(重写)、隐藏(重定义)的对比多态调用原理单继承中的虚函数表抽象类多继承中的虚函数表 多态的概念 概念&#xff1a;通俗来说&#xff0c;就是多种形态&#xff0c;具体…

PosgreSQL比MySQL更优秀吗?

一日&#xff0c;一群开发者对PosgreSQL是不是比MySQL更优秀进行了激烈的辩论&#xff0c;双方吵的都要打起来了 正方有以下理由&#xff1a; PostgreSQL严格遵循SQL标准规范&#xff0c;相较MySQL在语法兼容性和功能完整性方面展现出更强的体系化设计&#xff0c;尤其在事务处…

『大模型笔记』Jason Wei: 大语言模型的扩展范式!

Jason Wei: 大语言模型的扩展范式! 文章目录 一. What is scaling and why do it?1. 什么是Scaling?2. 为什么要Scaling?二. Paradigm 1: Scaling next-word prediction1. 下一个词预测2. 极限多任务学习3. Why does scaling work?三. The challenge with next-word predi…

TCP协议(Transmission Control Protocol)

TCP协议&#xff0c;即传输控制协议&#xff0c;其最大的特征就是对传输的数据进行可靠、高效的控制&#xff0c;其段格式如下&#xff1a; 源端口和目的端口号表示数据从哪个进程来&#xff0c;到哪个进程去&#xff0c;四位报头长度表示的是TCP头部有多少个4字节&#xff0c;…

瑞萨RA-T系列芯片ADCGPT功能模块的配合使用

在马达或电源工程中&#xff0c;往往需要采集多路AD信号&#xff0c;且这些信号的优先级和采样时机不相同。本篇介绍在使用RA-T系列芯片建立马达或电源工程时&#xff0c;如何根据需求来设置主要功能模块ADC&GPT&#xff0c;包括采样通道打包和分组&#xff0c;GPT触发启动…

TraeAi上手体验

一、Trae介绍 由于MarsCode 在国内由于规定限制&#xff0c;无法使用 Claude 3.5 Sonnet 模型&#xff0c;字节跳动选择在海外推出 Trae&#xff0c;官网&#xff1a;https://www.trae.ai/。 二、安装 1.下载安装Trae-Setup-x64.exe 2.注册登录 安装完成后&#xff0c;点击登…

三层渗透测试-DMZ区域 二三层设备区域

DMZ区域渗透 信息收集 首先先进行信息收集&#xff0c;这里我们可以选择多种的信息收集方式&#xff0c;例如nmap如此之类的&#xff0c;我的建议是&#xff0c;可以通过自己现有的手里小工具&#xff0c;例如无影&#xff0c;密探这种工具&#xff0c;进行一个信息收集。以免…

DeepSeek-R1:通过强化学习激励大模型的推理能力

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; DeepSeek 第一代推理模型&#xff08;reasoning models&#xff09; &#xff08;所以缩写为 R1&#xff09;的设计和训练过程&#xff1a; 要理解 DeepSeek-R1 的创新之处&#xff0c;可以先阅读 如何训…

演绎推理及其与数学的关系介绍

演绎推理及其与数学的关系介绍 什么是演绎推理&#xff1f; 演绎推理&#xff08;Deductive Reasoning&#xff09;是一种逻辑推理方法&#xff0c;它从一般性的规则或前提出发&#xff0c;得出一个具体的、必然正确的结论。换句话说&#xff0c;只要前提&#xff08;Premise&…

【git】工作场景下的 工作区 <-> 暂存区<-> 本地仓库 命令实战 具体案例

&#x1f680; Git 工作区 → 暂存区 → 本地仓库 → 回退实战 Git 的核心流程是&#xff1a; &#x1f449; 工作区&#xff08;Working Directory&#xff09; → git add → 暂存区&#xff08;Staging Area&#xff09; → git commit → 本地仓库&#xff08;Local Repos…

胶囊网络动态路由算法:突破CNN空间局限性的数学原理与工程实践

一、CNN的空间局限性痛点解析 传统CNN的瓶颈&#xff1a; 池化操作导致空间信息丢失&#xff08;最大池化丢弃85%激活值&#xff09;无法建模层次空间关系&#xff08;旋转/平移等变换不敏感&#xff09;局部感受野限制全局特征整合 示例对比&#xff1a; # CNN最大池化示例…