avatar

17MEMORY

登录/注册
avatar
作者:vanner创建于:2025/03/31 12:03:03
点赞1
收藏1
评论0
浏览11
联系我们
关于站长关于站点
鄂 ICP 证 2020023150 号 · 17memory.cn 违法和不良信息举报:举报邮箱:vanneryoung@gmail.com · 举报邮箱:3047266440@qq.com
创建于:2025/05/11 08:42:28作者:vanner

AI学习笔记

测试 token 数量的站点

  • https://gpt-tokenizer.dev/

GPT-4O 参数设置

  • max_tokens: 限定最大返回 token 数量

  • temperature: 文风的温度, 越大创造性越强 0.8

  • n: 生成几条答案: 1,2,3

  • top_p:代替 temperature 参数,越大越有多样性的。 1.0

  • presence_penalty:增加多样性,避免生成重复内容: 0, (1.0)

  • frequency_penalty: 增加多样性,减少重复内容,增加流畅度,用于营销。0 (1.0)

/static/upload/2b102ec3d50aef76d35a6467da0f27e2.png

/static/upload/258ad63bd87fdb2e08206aeae94e0d03.png


AI-Langchain

LLMs

  • 指的是将外界的大模型统一的再度封装。封装为一层模型的标准

Message(通信消息模板):

  • AIMessage

{
  "response_metadata": "将大模型返回的内容进行一层封装",
  "tool_calls": "用于调用tools的一个入口"
}
  • SystemMessage 系统(功能/角色)设定, 例如,现在需要一个专门的翻译模型,那么就可以定义 SystemMessage 为:"请将下面我输入的内容翻译为英文"。

PromptTemplate(提示词模板)

  • ChatPromptTemplate.from_message 用于声明聊天的提示词模板,会将你输入的消息转义为: AIMessage | HumanMessage

  • MessagePlaceholder 聊天模板占位符。在使用模板的时候,可以使用 llm.invoke({args: "xxx"}) 用来转移问题中的占位符。但是这个,可以直接将消息声明为模板占用。

OutputParser(输出格式解析)

  • StrOutputParser 在前面有提到过,大模型的返回,langchain 会将其进行封装为一个对象,但是在只需要内容时,可以使用其将内容只转换为一个数据内容。而不是一个返回对象。

  • JsonOutoutParser 将大模型的返回,转换为 json 对象。

Chains (链式调用)

  • 链式写法,采用 "|" 来进行链式的调用。

      chain = model | parser | xxx
      chain.invoke(message)
    

stream、invoke 是同步的,如果要异步的可以使用: astream 与 ainvoke。

Few shot、Example Selector(批量提示词)

  • FewShortPromptTemplate 对于一些短的,已经存在的问题和答案模板,作为上下文,将其转化为一定的格式。

  • semanticSimilarityExampleSelector.from_examples 需要配合 embeddings、vectorStorages(向量数据库)、k(匹配顺序) 达成效果 这个是一个基础版本的 rag,将长的模板,转使用 embedding 转换为向量,存储数据库中,在进行数据库相似度检索,作为上下文。

LangServer(基于 FastAPI)

  • 模型代理服务器(省略简介,内容角度,可去官网查看。)

Message History、Chat History

  • 建议采用 redis 存储会话消息 两种不同的消息历史记录,需要安装 redis 的包,将消息历史存储在 redis 中,并进行消息上下文的存储。

Cache Model response(问题缓存命中)

  • langchain_core.caches InMemoryCache(内存 cache)|SqLiteCache(数据库 cache) 配合 set_llm_cache、sqlLite 保存 相同的问题,可以直接取缓存中的回复,采用 SqlLiteCache 将回复的内容,全部存储本地数据库,随后在下次提问时,直接从数据中得到答案。

多模态

OutputParser: JSON、XML

  • 自定义 JSON 字段:pydantic_object、pydantic 库

  • xml defusedxsl 库、XMLOutputParser 最终去 parser 不能直接通过 chain 的方式 parser

Tools

  • 联网搜索的功能,类似于 hooks

  • 一般的工具都可以写为异步函数

  • StructuredTool, 支持同步调用和异步调用,以及自定义传参 handle_tool_error: 自定义全局异常后的错误内容

  • ToolException 错误处理 handle_tool_error: True(只打印错误内容)、False(直接抛出异常)

  • 如何使用 Tool tool.invoke()

  • 内建 Tools

Agent(重点)

  • create_tool_calling_agent 参数分为三部分:model、tools:[xxx,xxx]、prompt 执行: invoke

  • 回答多个问题

意图匹配、向量检索(余弦相似度)

Rag search (mmr 检索)

Faiss 一般是用来做内存数据库的查询,本地数据库使用一般是 chroma、milvus

Rag 识别图像- 采用:OCR 工具(图像转换数据-(ragidocr-onnxruntime, 此库可以识别验证码))

  • PyPDFLoader(filepath, extract_images=True)

RecursiveCharacterTextSplitter 递归文字分割。

  • 分割时按照这种分割,性能较好,分割时,支持正则表达式

语义化进行分块(langchain_experimental -> SemanticChunker)

  • SemanticChunker(embedding, breakpoint_threshold_type="percentile", breakpoint_threshold_amount=50)

  • 文章内容什么的,适合此种方式切分。固定的格式,没有语义的文章,适合普通的方式拆分。 语义拆分,是将文章本身按照关键词拆分后,在按照语义进行分块合并后,再次拆分、普通的拆分,直接按照文章本身关键词进行拆分。

agent 其实也是不知道什么时候去调用什么工具的,所以只能通过提示词来让 agent 来决策。这个就叫做: React

让 agent 具备上下文的功能,在 AgentExecutor 中传递 memory 字段即可

如何获取到 agent 的执行过程以及思考过程

  • callback 的回调方式 如图:

    /static/upload/1d5f06e6eabcdfc96c39db2e5cad816d.png

chain 的 callback 回调函数

  • 使用 chain 的时候,使用回调函数

    /static/upload/3faf54f8ce1889795a56acaacdbe1d67.png

自定义 callback

  • 自定义模型的回调函数

    /static/upload/ccbe20eaad067118ee13651d0f17b577.png

rag 检索时,需要自定义检索的逻辑。可以尝试自定义 retriever 来实现

  • 自定义一个 retriever,继承 BaseRetriever

当有有一些特定格式或特殊格式文件时,如果需要 loader 加载,可以使用 自定义 loader

  • 自定义一个类,继承 BaseLoader

LangGraph

  • Graphs(整个流程/图)、State(节点之前的共享数据(Redux、Vuex))、Nodes(节点)、Edges(边,节点之间的联系边)

  • 持久化、多 Agent 协作

Hugging Face(类似于 AI 界的 github):

  • transformer

    编码器(bert):情感分类,文本分析。做分析所使用的。

    解码器(gpt):解压、特征还原、文章生成。做生成所使用的。 gpt2 模型是一个续写模型(接着你的问题进行继续描述的),现在的大模型都是基于此模型上的数据集训练的。

  • datasets、

  • tokenizers

  • hugging face 的使用

    安装必要的包:使用清华镜像源下载:pip install transformers datasets tokenizers -i https://xxxx

    模型 API 调用:https://api-inference.huggingface.co/madels/uer/{model-name}

  • hugging face 模型下载 pipeline 下载,指定模型类型以及模型的名称就可以下载了

  • hugging face 的本地模型一般分为三类 文本续写、文本分类()、问答系统(阅读理解)

  • 模型微调,训练 数据集(datasets):开源数据集、自定义数据集

    load_datasets:加载数据集,split:训练集、测试集、cache_dir:将训练集数据下载到本地 加载数据集分为:加载本地数据集(加载本地数据集时,必须使用 load_datasets 下载后,在使用 save_to_disk 保存在本地后再次进行加载。、支持加载 csv 格式的数据集)、加载在线的数据集、将数据集转换为其它格式,如:csv

    模型的 max_length 是可以动态调整的。

    模型本身就是一个数学矩阵,因此其是只识别数字的,因此,我们的训练数据集是需要将单词或字符转换为数字的。可以使用 tokenizer 在 vocab.txt 中去查看每个单词或字符对用的索引。这个索引就是模型识别的数值。

    一般的训练都是增量微调,精度到 .9 就可以了。或者计算损失度下降的阀值也可以

    模型最大长度中,训练文本超出模型最大长度问题处理:

    一个中文字符占 4 个 token、特殊字符两个

    bert 模型的训练一般是下游,本身的特征提取部分是不会参与训练的。 gpt 模型的训练一般都是基于特征提取部分训练。(训练有难度加大) gpt 的模型训练,在训练时,一定是要去掉最后一轮的。 drop_last = True。在训练时,顺序是打乱的,因此在多轮训练的情况下,舍弃掉的数据在下次的训练中会被继续训练到 批次太小的话,会导致在训练时,损失度会来回上下波动 batch_size 给到设备的最大上限是最好的。因为模型本身的训练其实就是学些数据集的特征,如果批次给的太小,那么模型的每次训练的特征占比整个数据集是很小的。(不论是 bert 模型还是 gpt 模型)

    bert 模型一般就是做分类任务的。(特征提取)

觉得作者写的还不错?助个力在走吧!
相关推荐
最新评论
not data
暂无最新评论