背景
随着各种LLM的普及,ai agent的开发逐渐成为后端开发的必备,所以需要掌握相关的知识是后端所必须的 这里主要记录一些agent开发相关的基础知识学习
langChain LangGrapheino 是字节跳动开源的一款基于 Go 语言 的大模型(LLM)应用开发框架ai概念学习
对于程序员来说,掌握ai相关的知识是现在以及未来必须具备的能力,所以先要掌握ai的相关概念
token是大模型处理文本的基本单元
Agent = LLM(大模型)+ Planning(规划)+ Memory(记忆)+ Tools(工具)
发音为软安哥
golangpackage main
import (
"fmt"
"sort"
"strconv"
)
func maxLessThan(n int, digits []int) int {
sort.Ints(digits)
s := []byte(strconv.Itoa(n))
m := len(s)
res := make([]byte, m)
for i := 0; i < m; i++ {
cur := int(s[i] - '0')
// 找 <= cur 的最大数字
idx := upperBound(digits, cur) - 1
if idx >= 0 {
res[i] = byte(digits[idx] + '0')
// 当前位已经小于 n,后面全部填最大数
if digits[idx] < cur {
fillMax(res, i+1, digits[len(digits)-1])
return toInt(res)
}
} else {
// 当前位放不了,向前回退
return backtrack(res, i, digits)
}
}
// res == n,需要继续回退,保证严格小于 n
return backtrack(res, m, digits)
}
func backtrack(res []byte, pos int, digits []int) int {
for i := pos - 1; i >= 0; i-- {
cur := int(res[i] - '0')
idx := lowerBound(digits, cur) - 1
if idx >= 0 {
res[i] = byte(digits[idx] + '0')
fillMax(res, i+1, digits[len(digits)-1])
return toInt(res)
}
}
// 无法组成同位数,只能少一位
if len(res) == 1 {
return -1
}
ans := 0
for i := 0; i < len(res)-1; i++ {
ans = ans*10 + digits[len(digits)-1]
}
return ans
}
func fillMax(res []byte, start int, maxDigit int) {
for i := start; i < len(res); i++ {
res[i] = byte(maxDigit + '0')
}
}
func toInt(res []byte) int {
ans, _ := strconv.Atoi(string(res))
return ans
}
// 第一个 > target 的位置
func upperBound(arr []int, target int) int {
l, r := 0, len(arr)
for l < r {
mid := l + (r-l)/2
if arr[mid] <= target {
l = mid + 1
} else {
r = mid
}
}
return l
}
// 第一个 >= target 的位置
func lowerBound(arr []int, target int) int {
l, r := 0, len(arr)
for l < r {
mid := l + (r-l)/2
if arr[mid] < target {
l = mid + 1
} else {
r = mid
}
}
return l
}
func main() {
fmt.Println(maxLessThan(2533, []int{2, 3, 5})) // 2525
fmt.Println(maxLessThan(1000, []int{1, 2, 9})) // 999
fmt.Println(maxLessThan(345, []int{3, 4, 5})) // 344
fmt.Println(maxLessThan(111, []int{1})) // 11
fmt.Println(maxLessThan(5, []int{7, 8})) // -1
}
golangfunc longestList(arr []int) int {
list := []int
for _, num := range arr {
l,r := 0, len(list)
for l < r {
mid = l + (r-l)/2
if list[mid] < num {
l = mid + 1
}else{
r = mid
}
}
if l = len(list) {
list = append(list, num)
}else{
list[l] = num
}
}
return len(list)
}
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
说明:你不能倾斜容器。