从零开始学 AI 总集篇
想多了解一点这个快速发展的世界,学习一下 AI 相关的知识。
一、工具篇
本地部署试过 Ollama + DeepSeek R1 32 b,19 年的英特尔芯片已经带不动了。
目前主要用的是 Cherry Studio + 字节方舟的 DeepSeek R1,主要是因为当时领了几十块钱的券~
但是腾讯元宝真的很方便,而且免费。
Web 端的话各种官网混用:腾讯元宝 、ChatGpt、Claude、通义千问。
编辑器的话,用的是Trae,之前用 Trae + Hugo 搭了一个摄影小站:
- www.timelesslens.site
二、AI 名词
2.1 RAG
RAG 的全称是:Retrieval-Augmented Generation,翻译成中文是:检索增强生成。
简而言之就是让大语言模型(比如 ChatGPT)在“生成答案”之前,先去找资料(检索)来增强它的知识,再用这些资料来生成更准确的回答。
2.1.1 为什么需要RAG?
因为对于很多大语言模型来说,他的知识是基于历史数据训练出来的,比如GPT-4是截止到2023年的数据,而在这之后发生的所有的新的事件,新的数据,他都是不知道的,那么他的回答就会有这部分的局限性。
还有就是,很多大模型是基于公开的资料训练出来的,而很多私域的信息他是没有学习过的,而很多知识是私有的知识,这就需要通过资料的方式增强他原来不熟悉的知识。
所以,有了RAG之后,就可以基于自己的知识构建自己的知识库,这样就能做到知识的更新和迭代,也能弥补大模型不知道一些特性领域的专业知识的不足。这样就能让大模型的回答更加的准确, 减少幻觉的发生。
2.1.2 如何构建一个RAG?
1、前置准备
首先我们需要做数据准备,把你要用的资料收集好,比如:公司内部文档(PDF、Word、Markdown)、FAQ列表、产品手册等,然后清洗这些数据,比如去掉无关信息、切分成合理的小段。
然后把每一小段文本用Embedding模型转成向量,把这些向量存到向量数据库里,比如FAISS、Milvus等。
2、检索查询
当用户提问时,先用相同的Embedding模型把问题也转成向量。然后在向量数据库里用向量相似度搜索,找出最相关的几段资料(比如Top 5)。这些找到的内容就是上下文增强材料。
3、生成回答
紧接着,就可以把用户的问题 + 检索到的资料一起,作为Prompt发给大语言模型(LLM)。 这样可以保证模型只在资料范围内生成答案,降低幻觉。
2.2 MCP
MCP 的全称是 Model Context Protocol,下面是官网上的解释:
MCP is an open protocol that standardizes how applications provide context to LLMs. Think of MCP like a USB-C port for AI applications. Just as USB-C provides a standardized way to connect your devices to various peripherals and accessories, MCP provides a standardized way to connect AI models to different data sources and tools.
MCP全称是模型上下文协议(Model Context Protocol),由Anthropic在2024年11月推出。它本质上是大模型与外部世界连接的标准化接口,就像给大模型装了个万能插座。
MCP中有三个核心组件
- MCP Hosts:如Claude Desktop或IDE(比如Cursor),作为AI应用的入口,发起数据请求。
- MCP Servers:轻量级服务,负责对接具体数据源或工具(如GitHub API、本地文件系统),提供标准化接口。(一般是别人开发好的,你要用的工具)
- MCP Clients:协议客户端,维护与服务器的连接并转发请求。
有了MCP之后,当用户提出一个问题时,就是大致下面的流程:
- 客户端(Claude Desktop / Cursor)将你的问题发送给大模型(如Claude)。
- Claude 分析可用的工具,并决定使用哪一个(或多个)。
- 客户端通过 MCP Server 执行所选的工具。
- 工具的执行结果被送回给 Claude。
- Claude 结合执行结果构造最终的 prompt 并生成自然语言的回应。
- 回应最终展示给用户
2.3 提示词工程
Temperature: 简单来说,temperature 的参数值越小,模型就会返回越确定的一个结果。如果调高该参数值,大语言模型可能会返回更随机的结果,也就是说这可能会带来更多样化或更具创造性的产出。(调小temperature)实质上,你是在增加其他可能的 token 的权重。在实际应用方面,对于质量保障(QA)等任务,我们可以设置更低的 temperature 值,以促使模型基于事实返回更真实和简洁的结果。 对于诗歌生成或其他创造性任务,适度地调高 temperature 参数值可能会更好。
Top_p: 同样,使用 top_p(与 temperature 一起称为核采样(nucleus sampling)的技术),可以用来控制模型返回结果的确定性。如果你需要准确和事实的答案,就把参数值调低。如果你在寻找更多样化的响应,可以将其值调高点。
使用Top_P意味着只有词元集合(tokens)中包含top_p概率质量的才会被考虑用于响应,因此较低的Top_p值会选择最有信心的响应。这意味着较高的top_p值将使模型考虑更多可能的词语,包括不太可能的词语,从而导致更多样化的输出。
一般建议是改变 Temperature 和 Top P 其中一个参数就行,不用两个都调整。
Max Length: 可以通过调整 max length 来控制大模型生成的 token 数。指定 Max Length 有助于防止大模型生成冗长或不相关的响应并控制成本。
Stop Sequences: stop sequence 是一个字符串,可以阻止模型生成 token,指定 stop sequences 是控制大模型响应长度和结构的另一种方法。例如,您可以通过添加 “11” 作为 stop sequence 来告诉模型生成不超过 10 个项的列表。
Frequency Penalty: frequency penalty 是对下一个生成的 token 进行惩罚,这个惩罚和 token 在响应和提示中已出现的次数成比例, frequency penalty 越高,某个词再次出现的可能性就越小,这个设置通过给 重复数量多的 Token 设置更高的惩罚来减少响应中单词的重复。
Presence Penalty: presence penalty 也是对重复的 token 施加惩罚,但与 frequency penalty 不同的是,惩罚对于所有重复 token 都是相同的。出现两次的 token 和出现 10 次的 token 会受到相同的惩罚。 此设置可防止模型在响应中过于频繁地生成重复的词。 如果您希望模型生成多样化或创造性的文本,可以设置更高的 presence penalty,如果您希望模型生成更专注的内容,您可以设置更低的 presence penalty。
与 temperature 和 top_p 一样,一般建议是改变 frequency penalty 和 presence penalty 其中一个参数就行,不要同时调整两个。