LLM - LangChain + RAG
局限
大模型的核心能力 - 意图理解 + 文本生成
局限
描述
数据的及时性
大部分 AI 大模型都是预训练的,如果要问一些最新的消息,大模型是不知道的
复杂任务处理
AI 大模型在问答方面表现出色,但不总是能够处理复杂任务AI 大模型主要是基于文本的交互(多模态除外)
代码生成与下载
根据需求描述生成对应的代码,并提供下载链接 - 暂时不支持
与企业应用场景的集成
读取关系型数据库里面的数据,并根据提示进行任务处理 - 暂时不支持
在实际应用过程中,输入数据和输出数据,不仅仅是纯文本
AI Agent - 需要解析用户的输入输出
AI Agent
AI Agent 是以 LLM 为核心控制器的一套代理系统
控制端处于核心地位,承担记忆、思考以及决策等基础工作
感知模块负责接收和处理来自于外部环境的多样化信息 - 文字、声音、图片、位置等
行动模块通过生成文本、API 调用、使用工具等方式来执行任务以及改变环境
LangChain - 开源 + 提供一整套围绕 LLM 的 Agent 工具
AI Agent 很有可能在未来一段时间内成为 AI 发展的一个重要 ...
LLM - Prompt
Prompt
是否充分使用好 AI 大模型,提示是关键
OpenAI
question / answer
prompt / completion - 给 LLM 一个提示,让 LLM 进行补全
LLM 训练原理
GPT 系列模型基于 Transformer 架构的解码器机制,使用自回归无监督方式进行预训练
训练过程 - 大量的文本输入,不断进行记忆
相比于监督学习,训练效率更低,但训练过程简单,可以喂大量的文本语料,上限比较高
completion
根据训练过的记忆,一个字一个字地计算概率,取概率最大的那个字进行输出
因此有人吐槽 LLM 输出很慢 - 逐字计算并输出
Prompt Engineering
需求描述越详细越准确,LLM 输出的内容就越符合要求
Prompt Engineering 是一门专门研究与 LLM 交互的新型学科
通过不断地开发和优化,帮助用户更好地了解 LLM 的能力和局限性
探讨如何设计出最佳提示,用于指导 LLM 帮助我们高效完成某项任务
不仅仅是设计和研发提示,还包含了与 LLM 交互的各种技能和技术
在实现与 LLM 交互、对接, ...
LLM - ChatGPT
Timeline
OpenAI 在 NLP 领域取得了突破性进展
ChatGPT 背后包含了一系列的资源整合 - 技术、资源、大厂背书、国际巨头的通力合作 - 工程 + 产品
NLPTransformer
基于 Transformer 架构的语言模型大体可分为两类
以 BERT 为代表的掩码语言模型 - Masked Language Model - MLM
以 GPT 为代表的自回归语言模型 - Autoregressive Language Mode - ALM
OpenAI
创造造福全人类的安全通用人工智能 - Artificial general intelligence - AGI
创立之初就摒弃了传统 AI 模型标注式的训练方式
可用来标注的数据总是有限的,而且很难做得非常通用
Autoregressive
基于自回归的无监督训练
BERT 由 Google 发布,非常权威,GPT 早期压力巨大 - GPT-2 引入了 zero-shot
按照人类语言的习惯,语言本身是有先后顺序的,下文依赖上文
自回归语言模型代表了标准的语言模型 - 利用上文信息预测下文
比传统 A ...
Kubernetes - Helm Doc
基本概念
Chart
包含在 Kubernetes 集群内部运行的应用程序、工具和服务所需的所有资源定义
Repository
用于存放和共享 Chart
Release
运行在 Kubernetes 集群中的 Chart 实例
一个 Chart 可以在同一个集群中被安装多次,每次安装都会创建一个 Release
基本使用Search
Source
Desc
hub
从 Artifact Hub 中搜索
repo
基于本地 repo 搜索,无需联网
hub123456$ h search hub wordpressURL CHART VERSION APP VERSION DESCRIPTIONhttps://artifacthub.io/packages/helm/kube-wordp... 0.1.0 1.1 this is my wordpress packagehttps://artifacthub ...
Go Engineering - CLI
应用框架
命令行参数解析 - Pflag
配置文件解析 - Viper
应用的命令行框架 - Cobra
命令需要具备 help 功能
命令需要能够解析命令行参数和配置文件
命令需要能够初始化业务代码,并最终启动业务进程
Pflag
命令行参数解析工具 - Kubernetes / Istio / Helm / Docker / Etcd / …
Flag
一个命令行参数会被解析成一个 Flag 类型的变量
1234567891011121314// A Flag represents the state of a flag.type Flag struct { Name string // name as it appears on command line Shorthand string // one-letter abbreviated flag Usage string ...
Go Engineering - Log
功能设计基础功能
支持基本的日志信息 - 时间戳、文件名、行号、日志级别、日志信息
支持不同的日志级别 - Debug / Info / Warn / Error / Panic / Fatal
logrus 支持 Trace 日志级别,Trace 不是必须的
Trace 和 Panic 是可选的级别
支持自定义配置 - 不同的环境采用不同的配置
开发环境的日志级别为 Debug,而生产环境的日志级别为 Info
通过配置,可以在不重新编译代码的情况下,改变记录日志的行为
支持输出到标准输出和文件
至少实现 6 个日志级别
日志调用时的属性
输出级别
glog.Info(“This is info message”)
开关级别
启动程序时,期望哪些输出级别的日志会被打印
glog -v=L - 只有输出级别 ≥L 的日志才会被打印
高级功能
支持多种日志格式 - TEXT / JSON / …
开发环境采用 TEXT 格式,生产环境采用 JSON 格式
按日志级别分类输出 - Error 级别日志可 ...
Go Engineering - Error Code
预期功能
有业务 Code 码标识 - HTTP Code 码有限
安全 - 对内对外展示不同的错误信息
设计方式
无论请求成功与否,都返回 200,在 HTTP Body 中包含错误信息
HTTP Code 通常代表 HTTP Transport 层的状态信息
缺点:性能不佳(需解析 Body) + 对客户端不友好
返回 4xx or 5xx,并在 Body 中返回简单的错误信息
返回 4xx or 5xx,并在 Body 中返回详细的错误信息 - 推荐
设计思路
区别于 http status code,业务码需要有一定的规则,可以通过业务码判断出是哪类错误
请求出错时,可以通过 http status code,直接感知到请求出错
需要在请求出错时,返回详细的信息:Code + Message + Reference(Optional)
返回的错误信息,需要是可以直接展示给用户的安全信息,不能包含敏感信息
但同时也要有内部更详细的错误信息,方便 Debug
返回的数据格式应该是固定的,规范的
错误信息要保持简洁,并提供有用的信息
Biz Code
纯数字表示,不同部位代表不同的服务,不 ...
Go Engineering - Doc
Swagger
Swagger 是一套围绕 OpenAPI 规范构建的开源工具
Component
Desc
Swagger Editor
基于浏览器的编辑器,可以编写 OpenAPI 规范,并实时预览
Swagger UI
将 OpenAPI 规范呈现为交互式 API 文档
Swagger Codegen
根据 OpenAPI 规范,生成服务器存根和客户端代码库,涵盖 40 多种语言
OpenAPI
OpenAPI 是一个 API 规范,其前身为 Swagger 规范
通过定义一种用来描述 API 格式或者 API 定义的 DSL,来规范 RESTful API 的开发过程
OpenAPI 3.0 ≈ Swagger 2.0
API 基本信息
对 API 的描述,介绍 API 可以实现的功能
每个 API 上可用的 Path 和 Method
每个 API 的输入和返回参数
验证方法
联系信息、许可证、使用条款和其它信息
OpenAPI 是一个 API 规范,而 Swagger 是实现该 API 规范的工具
go-swagger特性
功能强大、高性能、可以根据代码注释 ...
Go Engineering - Lint
golangci-lint
使用最多
优点
Advantage
Desc
速度快
基于 gometalinter 开发,但比 gometalinter 快 5 倍原因:并行检查 + 复用 go build 缓存 + 缓存分析结果
可配置
支持 YAML 格式的配置文件
IDE 集成
Goland / VS Code
linter 聚合器
不需要单独安装
最少误报数
调整了所集成 linter 的默认配置,大幅度减少误报
良好的输出
颜色、行号等
迭代快
不断有新的 linter 被集成到 golangci-lint 中
选项
配置
同时出现 - 命令行选项 / 配置文件
bool/string/int - 命令行选项
slice - 合并
命令行选项
golangci-lint run -h
Flag
Desc
–print-issued-lines
Print lines of code with issue (default true)
–print-linter-name
Print linter ...
Go Engineering - Makefile
基础语法
https://github.com/seisman/how-to-write-makefile
规则语法
伪目标
变量赋值
特殊变量
自动化变量
功能设计Target
Target
Desc
gen
Generate all necessary files, such as error code files.
format
Gofmt (reformat) package sources (exclude vendor dir if existed).
lint
Check syntax and styling of go sources.
test
Run unit test.
cover
Run unit test and get test coverage.
build
Build source code for host platform.
build.multiarch
Build source code for multiple platforms. See option PLATFORMS.
image
Build docker image ...