构建你的 Agent 框架 —— Hello-Agent Chapter 7 Learning
构建你的 Agent 框架第七章 构建你的智能体框架
本章目标本章目标为,我们需要手写以下架构:
123456789101112131415161718192021222324252627282930HelloAgent/ │ ├── core/ # 核心框架层 │ ├── agent.py # Agent基类 │ ├── llm.py # HelloAgentsLLM统一接口 │ ├── message.py # 消息系统 │ ├── config.py # 配置管理 │ └── exceptions.py # 异常体系 │ ├── agent/ # Agent实现层 │ ├── simpleAgent.py # SimpleAgent实现 │ ├── ...
Agent经典范式构建 —— Hello-Agent Chapter 4 Learning
第四章 智能体经典范式构建
本章任务:
Cli:构建一个基本的客户端,能够成功调用 LLM ,并解析 LLM 流式返回的结果
ReAct(Reasoning and Action):着重于实现如何让模型在执行过程不断根据当前状况动态地更新行动计划;
Plan-and-Solve:着重于构建模型的规划能力;
Reflection:模型的反思能力。
基本 Cli前置库:
1pip install openai python-dotenv
仔细阅读一下 HelloAgentLLM.py 具体干了什么。
初始化1234567891011def __init__(self, model: str = None, apiKey: str = None, baseUrl: str = None, timeout: int = None): # 1.初始化客户端。优先使用传入参数,如果未提供,则从环境变量加载。 self.model = model or os.getenv("LLM_MODEL_ID") apiKey = apiKey or os. ...
大模型调用工程实践 - JavaGuide学习
大模型 API 调用工程实践:流式输出、重试、限流与结构化返回
这篇文章从 构建一个生产级ai对话框 的实际业务出发,解析了一些开发者可能遇到的问题,并尝试解答。
LLM 的调用LLM 调用大致流程流程如下:
客户端请求,服务器鉴权:用户(客户端)提出访问请求,发给服务器(开发者的),服务器需要确认该请求的用户、套餐、配额,确认是否允许此次访问;
服务器组装 prompt:若访问合法,则服务器会将 system prompt、历史信息、RAG 知识、MCP 工具包、用户 prompt、输出格式等信息组装成需要 llm 处理的 prompt;
服务器 token 估算:组装好的 prompt 会被 Tokenizer 拆分为 token,同时计算 token 输入量,估算需要给输出留多少 token 量,并决定是否压缩上下文、裁切上下文、是否可以换用更加契合需求的模型;
模型网关路由:选择模型、供应商、区域等路由工作。此外模型网关还肩负这一个重要职能:全权确保大模型的输出稳定,所以还包含了超时参数、重试策略、限流桶等;
供应商 LLM 工作:服务器将请求发往供应商,请求调用大模 ...
LLM 运行机制 - JavaGuide 学习
LLM 运行机制:Token、上下文窗口与采样参数怎么影响输出
Token 及其影响基于历史 token 的预测
自回归生成:根据前面的历史,预测后面的输出。
如何去预测?一般来说需要模型自行识别历史 token 中哪些是相关性高的,哪些是相关性低的,选取高相关性的 token 更容易预测。因此,模型的一个重要参数是选取规则,目前有 Temperature / Top-p 等,选取规则本身是会影响模型预测精度的。
而选取 token 后,需要输出 token,这里引申另一个重要参数是 Max Tokens,即决定模型在单次预测中,最多可以输出的 token 总量。不过,这个参数并不会影响模型本身的预测精度,因为预测的结果是不变的,模型只是按照 max token 这个参数计算并输出,如果不够了截断就是了。
分词器 Tokenizer
分词器 Tokenizer:将自然语言切分 token 的规则。
Tokenizer 本身是需要训练的,一旦训练好,此后均按照这套规则进行分词。
各大模型基本上会自己训练一套 Tokenizer,所以不同的模型直接的 token 计算规则不能 ...
研一回顾
为啥考研
Java 反射基础
反射 基础什么是反射JVM 可以在运行时动态地拿到类的详细信息,这允许在运行时才确认类的信息。
谁在用反射首先,我们人肯定用得很少,或者说基本不用。用这个的多是一些支持自动化的组件,比如 Spring 和 Mybatis 这些框架。
从内存的角度说反射反射的物理层基础当 ClassLoader 加载一个类(注意是字节码)时,首先会把类的一些固有信息,例如类名、有哪些成员、成员方法的实现段、静态成员等,都会存到元空间,其格式是用Cpp写的,但是注意,只是存储格式是 Cpp 的,其成员名称、方法代码段原文是以 .class 存储的。
在将类的固有信息存入元空间之后,紧接着 JVM 会实例化一个java.lang.Class类型的对象存在堆区,这个对象同样用来存储类的固有信息,但和元空间的那个 Cpp 结构体的区别在于:元空间里那个存的是真正的数据;java.lang.Class对象存的是指向元空间那片空间的Cpp指针,所以这个 Class 对象相当于一个代理。
方法也是一样的,方法的实现段存在元空间,java.lang.reflect.Method对象就存方法在元空间内真实存在的方法实现段 ...
RabbitMQ的基础配置及使用
注意,以下所有内容均为个人理解,且建立在具体的场景上,可能不适应所有情况
RabbitMQ可以在允许最终一致性的场景下,将高并发请求简单化,也就是将高并发的请求处理成一条有序的消息队列,每一个请求都可以看作是一条消息,服务接口会绑定这条队列,按照消息进队列顺序依次处理消息
用在订单服务这种用户不需要立刻拿到反馈的场景简直绝配。
工作流程1.生产者(Publisher)生产消息,通过一条长连接将消息送到消息代理(Broker)
2.消息由消息头和消息体组成,其中消息体中包含了一个路由(route-key),决定着该消息会进入哪一个队列
3.消息代理先接收消息,再将将消息送到交换机
4.交换机通过消息的消息头包含的key-route,将消息送入对应的队列
5.消费者(Consumer)通过一条长连接与消息代理连接
6.消费者中的不同服务通过不同的信道,监听并接收不同队列的消息
几种交换机1.director:点对点模式,使用route-key绑定队列,并且route-key精确匹配
2.headers:点对点模式,属于JMS的一种,已淘汰
3.fanout:广播模式,交换机中所有队列都会收 ...
java三个月:从入门到门长腿跑了
算上今天,学java也学了三个月了,感觉还是没啥实感,怎么这么快呢?
“我怎么会学java呢?”实话实说,在正式学java之前,java给我的印象一直是跟风狗、卷、带专哥最爱,当然我学了之后这个刻板印象狠狠地又加深了😂,反正我也是跟风学的java,我就是跟风狗呗?跟风的起因是6月7月份的时候,看见群里水友老是“搓mall搓mall”啥的,我寻思mall是什么玩意,就去搜了,想着自己能不能搞一个出来,然后那天是7月24号,一个无风的傍晚,我对着网上随便招的一个教程干瞪眼,一直持续到晚上吃完饭,我终于理解了,这是一个坑,还是天坑。
不过好在我立刻就意识到这个项目的语言:java,这个东西以前就整过我,所以我一直对其抱有一种微妙的情绪。我依稀记得小时候为了玩mc,装环境装了一个下午,您能理解一个小学生对着一大堆英文无数次试错吗?总之在此之后java就成了一个背景板的玩意,只要有人问起我就知道,哦java就是写mc的,更多一点我会告诉人这似乎是一款编程的东西,再多一点我就不知道了,反正上大学了,mc也玩的少了,java对我来说也变成了一个可有可无的东西,并且我还非常乐意去看别人有关java已 ...
docker的安装及使用
由于项目的数据库和中间件都会部署在linux系统上,所以使用docker这一工具。
docker的安装如果嫌麻烦,可以直接安装最新版本
12sudo apt updatesudo apt install docker-ce docker-ce-cli containerd.io
安装指定版本可以参考:如何在 Ubuntu 20.04 上安装和使用 Docker
docker的运行及配置运行docker1systemctl start docker
查看docker现有的镜像1docker images
设置docker开机自启动1systemctl enable docker
容器开机自启动1docker update ($docker ps -a -q) --restart=always
配置下载地址docker的配置最主要就是配置下载地址,选用国内的阿里云镜像下载地址,依次执行:
1234567sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json<<-'EOF' { ...



