Agent多工具超长上下文处理方案
方案原理rag方案rag 示例: https://github.com/run-llama/llama_index/blob/df48f1d83b032aae3ec232013a11401cd26ea184/docs/docs/examples/agent/openai_agent_retrieval.ipynb#L223 https://github.com/HRI-EU/tulip_agent/blob/main/examples/tool_library_search.py https://hri-eu.github.io/tulip_agent/ 工具搜索的原理图flowchart TD A[ToolLibrary] --> B[工具管理] A --> C[向量存储] A --> D[嵌入模型] B --> E[加载工具] B --> F[搜索工具] B --> G[执行工具] B --> H[更新工具] B --> I[删除工具] E...
beartype 运行时入参校验
beartype 和 pydantic 都是 Python 中用于类型检查和数据验证的工具,但它们的设计理念和应用场景有所不同。我们来详细对比一下它们的区别,以便你根据需求选择合适的工具。 🔍 beartype vs pydantic 特性 beartype pydantic 类型检查时机 运行时类型检查 运行时类型验证 + 数据模型构建 使用场景 函数、方法、类的类型检查 数据模型验证、序列化/反序列化 自动装饰 beartype_this_package 自动装饰 不支持自动装饰,每个模型需要手动定义 性能 高效、轻量,函数级别检查 性能较高,但因为有数据模型构建和验证,开销更大 错误提示 详细的参数和返回值错误提示 报错信息详细,支持字段级别的错误提示 复杂类型支持 对复杂类型支持有限 完全支持 Union、List、Dict、嵌套模型等复杂类型 静态代码支持 兼容 Python 原生类型提示(PEP 484) 使用自定义类型提示,与 MyPy 兼容 数据转换 无数据转换功能 自动数据转换(如 str 转 int,datetime...
AI断片了吗?探秘大模型在超长对话中的理解能力
AI断片了吗?探秘大模型在超长对话中的理解能力我们经常需要跟大模型进行反复、冗长的对话,才能令大模型给到我们一个满意的答复。像在写作、代码补全等长上下文的创作场景,需要不断的修正大模型的回答,对未完成内容进行续写,很容易就超出了目前大模型能够支持的上下文长度。 断片原因大模型断片是可以追溯的,这里需要讲解一下大模型的前置知识。关于大模型的 token 长度,这边有一篇文章讲如何构建 GPT 模型https://daojianime.github.io/posts/60917.html,阅读这篇文章可以对 token有更深一步的理解。 token简单来说就是我们跟大模型的对话文字在多维空间的一个表达,这里 token是模型训练、推理中使用的tokenizer将文字转换成的向量,token 数量跟文字数量并不是一一对应的,因为在多维空间的表达经常会将一个词作为一个token这种操作。 在我们理解何为 token 的基础上,我们再看看为什么 token 数有限。 首先在大模型的训练中,动辄是 TB 级的训练语料,需要用到的算力目前都是 H100、A100...
个人免签方案
个人免签方案方案说明介绍个人免签国内主要是解决网银的微信+支付宝支付渠道的对接,这两种方案要进行免签的话,可以通过监听通知消息回写数据库达到转账记录的目的,通过+/-0.1 金额进行多笔订单同时转账场景下确保订单一致性。比较符合的就有 V 免签、码支付、彩虹交易等。其中只有 V 免签有良好的开源生态,因此选用 V 免签进行定制化。 方案调研手机监听Android 15 Supported vmq apk PC 监听未开源 PC 端 Linux 虚拟化itchat-uos 架构设计 Api: fastapi + python3.12 SQL DB: Postgres Cache DB: Redis Cron: apscheduler Python Lint: ruff + mypy 设计问题同时多个订单生成,如何区分不同订单支付的通过订单金额不同,以 0.1 步长形成一个梯度去生成订单,同时对 key (price+商户 ID) 使用一个超时异步锁,设置默认 1 分钟超时时间,以订单生成时间字段形成一个锁,每次查询 uid 下最后一个订单,时间超过 1...
GPT学习分享
GPT学习分享序学习Microsoft Build 2023的分享State of GPT。围绕三个内容讲解: GPT模型 如何训练一个GPT助手 如何有效的将这些助手应用到业务上 有限状态马尔可夫链(FSMC) 本文展示了一个极简 GPT,它只有 2 个 token 0 和 1,上下文长度为 3; 这样的 GPT 可以看做是一个有限状态马尔可夫链(FSMC)。 我们将用 token sequence 111101111011110 作为输入对这个极简 GPT 训练 50 次, 得到的状态转移概率符合我们的预期。 二进制GPTtoken只有0和1 输入:0010101 输出:下一个token是0的概率(P0)和1的概率(P1) 例如输入的是:010,根据自身的参数和状态可能下一个token是1的概率为80%,即 P(0) = 20% P(1) =...
CSS中height 100%为何不生效?Flexbox布局解决方案
CSS设置height: 100%不生效父元素没有固定高度的时候,子元素设置height: 100%不生效。但是可以通过flexbox布局或者grid布局来让元素自动填充剩余宽度或者高度。 html: 123<div class="parent"> <div class="child"></div></div> css: 12345678910.parent { display: flex; flex-direction: column; /* 确保子元素在父元素内垂直排列 */}.child { flex-grow: 1; /* 让子元素填充剩余空间 */ /* 或者使用 flex: 1; 也可以实现同样的效果 */}
Golang面试题详解(十):并发模型、GMP调度、Context与defer
Golang题库(十)空结构体占不占内存空间? 为什么使用空结构体?空结构体是没有内存大小的结构体。通过 unsafe.Sizeof() 可以查看空结构体的宽度,代码如下: 12var s struct{}fmt.Println(unsafe.Sizeof(s)) // prints 0 准确的来说,空结构体有一个特殊起点: zerobase 变量。zerobase是一个占用 8 个字节的uintptr全局变量。每次定义 struct {} 类型的变量,编译器只是把zerobase变量的地址给出去。也就是说空结构体的变量的内存地址都是一样的。 空结构体的使用场景主要有三种: 实现方法接收者:在业务场景下,我们需要将方法组合起来,代表其是一个 “分组” 的,便于后续拓展和维护。 实现集合类型:在 Go 语言的标准库中并没有提供集合(Set)的相关实现,因此一般在代码中我们图方便,会直接用 map 来替代:type Set map[string]struct{}。 实现空通道:在 Go channel...
Golang面试题详解(九):内存模型、深浅拷贝与并发安全
Golang题库(九)怎么用go实现一个栈12345678910111213141516171819202122232425262728293031323334353637383940//一个队列type MyStack struct { queue []int}func Constructor() MyStack { return MyStack{ queue: make([]int, 0), }}func (this *MyStack) Push(x int) { this.queue = append(this.queue, x)}func (this *MyStack) Pop() int {//出队操作 n := len(this.queue)-1 for n!=0{ ////除了最后一个,其余的都重新添加到队列里 val := this.queue[0] this.queue =...
Golang面试题详解(八):GC、GMP、逃逸分析与并发陷阱
Golang题库(八)go语言的引用类型有什么? 切片(slice)类型 map类型 管道(channel)类型 接口(interface)类型 map的key可以是哪些类型?可以嵌套map吗? key的类型 bool, int, string, 指针 channel interface structs arrays map是可以进行嵌套的。 协程goroutine协程是一种用户态的轻量级线程,协程的调度完全由用户控制(进程和线程都是由cpu 内核进行调度)。 协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。 对于进程、线程,都是有内核进行调度,有 CPU 时间片的概念,进行抢占式调度(有多种调度算法)。而对于协程(用户级线程),这是对内核透明的,也就是系统并不知道有协程的存在,是完全由用户自己的程序进行调度的,因为是由用户程序自己控制,那么就很难像抢占式调度那样做到强制的 CPU...