大模型入门、向量数据库
文章目录
1.大模型目前存在的问题
(1)幻觉
①是指模型生成的内容看似合理,但与实际严重不符的现象
②形成原因:
- 训练数据噪声:模型从海量文本中学习,但数据本身包含错误、偏见或虚构内容(例如网络谣言、小说情节),模型可能误将其视为真实知识。
- 概率优先而非真实性:大模型现在使用的是transformer架构,模型目标是生成“最符合上下文概率分布”的文本,而非追求事实正确性。当缺乏明确答案时,模型倾向于用高频词汇或合理句式“填补空白”(做填词游戏)。
③即使使用rag也只能减轻幻觉,而不能根本消除幻觉
(2) LLM知识更新缓慢
(3)LLM对领域知识的理解有限
- 在一些较为浅显的领域,大型语言模型可能通过之前的大量训练数据获得了相应的能力。但当涉及到更深层次的专业领域时,这些模型往往会出现所谓的“幻觉”问题,即生成的信息可能偏离事实或专业知识的真实性。
- 形成原因:训练数据的覆盖广度与深度矛盾(广度优先 ):LLM的训练数据覆盖全网公开文本(书籍、网页、论文等),但领域知识往往分布稀疏
2.大模型后缀百科全书



3.OpenAI库
OpenAI库是OpenAI官方推出的Python SDK,核心作用是让开发者能简单、高效地调用 OpenAI 的各类 API(如 GPT 聊天、DALL・E 绘图、语音转文字等),无需手动处理 HTTP 请求、身份验证等底层细节。
由于其发布较早且比较易用,现如今许多模型服务商(如阿里云百炼平台)均兼容OpenAI SDK的调用。
3.1 OpenAI库的基础使用
(1)Completions和ChatCompletions,ChatCompletions实际上可以替换Completions
①Completions
import os
from openai import OpenAI
import os
from dotenv import load_dotenv
load_dotenv()
client: OpenAI = OpenAI(
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
api_key = os.getenv("DASHSCOPE_API_KEY")
)
# 根据提示,生成中文的文本
result = client.completions.create(
model='qwen-coder-turbo',
prompt='讲5个笑话给小朋友听',
max_tokens=1000,
temperature=0.5,
n=2
)
print(result.choices[0].text)
②ChatCompletions
from openai import OpenAI
from openai.types.chat.chat_completion import ChatCompletion
import os
from dotenv import load_dotenv
from pydantic_settings.sources.providers import dotenv
load_dotenv()
client: OpenAI = OpenAI(
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
api_key = os.getenv("DASHSCOPE_API_KEY")
)
response: ChatCompletion = client.chat.completions.create(
model="qwen3-max",
messages=[
{"role": "system", "content": "你是一个Python编程专家。"},
{"role": "assistant", "content": "我是一个Python编程专家。请问有什么可以帮助您的吗?"},
{"role": "user", "content": "for循环输出1到5的数字"}
]
)
print(response.choices[0].message.content)
(2)在chat 大语言模型中,user、assistant、system 是三种核心角色,它们的定位和功能不同,共同构成对话的上下文结构。
3.2 OpenAI库的流式输出
可以设定结果输出为stream模式(流式输出),获得更好的使用体验。
开启流式输出主要就2步:
在client.chat.completions.create()调用模型的时候设定参数:stream=True
for循环response对象,并在循环内输出内容
from openai import OpenAI
from openai.types.chat.chat_completion import ChatCompletion
import os
from dotenv import load_dotenv
load_dotenv()
client: OpenAI = OpenAI(
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
api_key=os.getenv("DASHSCOPE_API_KEY")
)
response: ChatCompletion = client.chat.completions.create(
model="qwen3-max",
messages=[
{"role": "system", "content": "你是一个Python编程专家。"},
{"role": "assistant", "content": "我是一个Python编程专家。请问有什么可以帮助您的吗?"},
{"role": "user", "content": "for循环输出1到5的数字"}
],
stream=True # 开启流式输出功能
)
for chunk in response:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end='', flush=True)
3.3 OpenAI库附带历史消息调用模型
import os
from openai import OpenAI
from dotenv import load_dotenv
load_dotenv()
client = OpenAI(
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
api_key=os.getenv("DASHSCOPE_API_KEY")
)
# chat completions ,交互式的API调用
# 1、准备一个message,同时这个message还要记录所有的聊天信息
message = [
{'role':'system','content':'你是一个无所不能的体育专家'},
{'role':'user','content':"你好啊"}
]
result = client.chat.completions.create(
model='qwen3-max',
messages=message
)
out_result = result.choices[0].message
print(out_result.content)
# 添加上一轮模型回复的内容
message.append({'role':out_result.role,'content':out_result.content})
# 第二轮聊天
new_chat = {
'role':'user',"content":'1.2024年的奥运会在哪个国家举行2.告诉我这个国家的首都是什么?'
}
message.append(new_chat)
result = client.chat.completions.create(
model='qwen3-max',
messages=message
)
out_result = result.choices[0].message
print(out_result.content)
new_chat = {
'role':'user',"content":'请问这个国家有多少人口?'
}
message.append(new_chat)
result = client.chat.completions.create(
model='qwen3-max',
messages=message
)
out_result = result.choices[0].message
print(out_result.content)

transformers提供模型、训练相关
datasets提供数据集相关
4. 提示词工程
(1)提示工程(Prompt Engineering),也称为 In-Context Prompting,是指在不更新模型权重的情况下如何与大模型交互以引导其行为以获得所需结果的方法。
(2)在人工智能领域,Prompt指的是用户给大型语言模型发出的指令。
例如,“「讲个笑话」”、“「用Python编个贪吃蛇游戏」”、“「写封情书」"等。
虽然看似简单,但实际上,Prompt的设计对于模型的结果影响很大。
因此如何设计prompt,进而与模型更好的交互,是研究人员必备的必不可少的技能(提示工程)。
4.1 技巧
(1)技巧1:详细的描述
任何Prompt技巧,都不如清晰的表达你的需求。这就类似人与人沟通,如果话说不明白,不可能让别人理解你的思想。因此,写出清晰的指令,是核心。
(2)技巧2:让模型充当某个角色
(3)技巧3:使用分隔符标明输入的不同部分
中括号、XML标签、三引号等分隔符可以帮助划分要区别对待的文本,也可以帮助模型更好的理解文本内容。常用三引号’‘’‘’'把内容框起来。
(4)技巧4:对任务指定步骤
对于可以拆分的任务可以尽量拆开,最好能为其指定一系列步骤,明确步骤可以让模型更容易实现它们。
(5)提供例子
本质类似于few-shot leaning。先扔给大模型举例,然后让模型按照例子来输出
5.GLM大模型调用的三种方式
(1)GLM自己的API,pip install zhipuai
from dotenv import load_dotenv
from zhipuai import ZhipuAI
import os
# 使用GLM自己的
load_dotenv()
api_key = os.getenv('API_KEY')
client = ZhipuAI(api_key=api_key)
response = client.chat.completions.create(
model='glm-4-0520',
messages=[
{'role': "user", 'content': '请介绍一下大模型的定义?'}
],
stream=True
)
# 输出
for s in response:
content = s.choices[0].delta.content
if content:
print(content, end="")
(2)openai的API, pip install openai
from dotenv import load_dotenv
from openai import OpenAI
import os
# 使用OpenAI的API
load_dotenv()
client = OpenAI(
api_key=os.getenv('API_KEY'),
base_url='https://open.bigmodel.cn/api/paas/v4/'
)
response = client.chat.completions.create(
model='glm-4-0520',
messages=[
{'role': "user", 'content': '北京天气怎么样?'}
],
)
print(response.choices[0].message.content)
(3)Langchain的API
# 一次性安装所有相关包
# pip install langchain langchain-openai langchainhub httpx_sse
# 验证安装
# python -c "import langchain; print(langchain.__version__)"
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain_classic.schema import HumanMessage, SystemMessage
load_dotenv()
import os
# 创建 LLM 实例
llm = ChatOpenAI(
temperature=0.7,
model="glm-5",
openai_api_key=os.getenv('API_KEY'),
openai_api_base="https://open.bigmodel.cn/api/paas/v4/"
)
# 创建消息
messages = [
SystemMessage(content="你是一个有用的 AI 助手"),
HumanMessage(content="请介绍一下人工智能的发展历程")
]
# 调用模型
response = llm.invoke(messages)
print(response.content)
6.向量、向量数据库
6.1 向量
(1)在数学中,向量(也称为欧几里得向量、几何向量),指具有大小(magnitude)和方向的量。它可以形象化地表示为带箭头的线段。箭头所指:代表向量的方向;线段长度:代表向量的大小。
(2)在计算机中我们用数组来表述向量
import numpy as np
v = np.array([3, 4]) # 数组表示向量
magnitude = np.linalg.norm(v) # 计算大小
unit_vector = v / magnitude # 计算单位向量(方向)
angle = np.arctan2(v[1], v[0]) * 180 / np.pi # 角度(度)
print(f"大小: {magnitude}")
print(f"单位向量 (方向): {unit_vector}")
print(f"与x轴角度: {angle:.1f}°")
(3)向量(Vector)就是文本的 “数学身份证”:它把一段文字的语义信息,转换成一串固定长度的数字列表,让计算机能 “看懂” 文字的含义并做相似度计算。简单来说,就是让计算机更方便的理解不同的文本内容,是否表述的是一个意思。
6.2 文本向量化(Embedding)
(1)Embedding 是将文本字符串表示为向量(浮点数列表),通过计算向量之间的距离来衡量文本之间的相关性。
向量距离越小,表示文本之间的相关性越高;距离越大,相关性越低。
(2)常见的 Embedding 应用包括:
搜索:根据文本查询的相关性对结果进行排序
聚类:根据文本相似性将其分组
推荐:根据相关文本字符串推荐项目
异常检测:识别与其他内容相关性较低的异常点
多样性测量:分析相似性分布
分类:将文本字符串根据其最相似的标签进行分类
6.2.1 在线转换(百炼)
(1)DashScope方式
(2)OpenAI方式

(3)注意:model选择文本向量即可
6.2.2 本地部署转换
(1)在网址中找到自己需要的文本向量模型
- Huggingface:https://huggingface.co/,Hugging Face 是一个专注于 机器学习(尤其是自然语言处理,NLP)的开源平台和社区,提供从模型开发、训练、部署到共享的一站式工具和资源
- 国内的镜像地址:https://hf-mirror.com/
- 魔搭社区:https://www.modelscope.cn/my/overview
(2)使用魔塔将模型下载到本地,执行该代码即可
from modelscope import snapshot_download
# cache_dir下载地址
model_dir = snapshot_download(
'BAAI/bge-large-zh-v1.5',
cache_dir="D:\BaiduNetdiskDownload\pythonNote\TuLing\DaMoXing\LLM")
(3)转换代码
# pip install sentence-transformers
# 用来加载模型,并使用模型生成向量
from sentence_transformers import SentenceTransformer
# 替换为实际路径
model_path = r"D:\BaiduNetdiskDownload\pythonNote\TuLing\DaMoXing\LLM\BAAI\bge-large-zh-v1___5"
model = SentenceTransformer(model_path)
sentences = [
"你好",
'你'
]
# 生成向量(默认返回numpy数组)
embeddings = model.encode(sentences)
print(embeddings)
print(embeddings.shape) # 输出: (2, 1024) (维度取决于模型)
6.3 嵌入模型(EmbeddingModel)
嵌入模型(EmbeddingModel)是嵌入过程中采用的模型。当前EmbeddingModel的接口主要用于将文本转换为数值向量,接口的设计主要围绕这两个目标展开:
(1)可移植性:该接口确保在各种嵌入模型之间的轻松适配。它允许开发者在不同的嵌入技术或模型之间切换,所需的代码更改最小化。这一设计与Spring模块化和互换性的理念一致。
(2)简单性:嵌入模型简化了文本转换为嵌入的过程。通过提供如embed(stringtext)和embed(Documentdocument)这样简单的方法,它去除了处理原始文本数据和嵌入算法的复杂性。这个设计选择使开发者,尤其是那些初次接触AI的开发者,更容易在他们的应用程序中使用嵌入,而无需深入了解其底层机制。
6.4 向量数据库(VectorStore)
(1)向量数据库是:一种专门用于存储、管理和检索向量数据(即高维数值数组)的数据库系统。
(2)其核心功能是通过高效的索引结构和相似性计算算法,支持大规模向量数据的快速查询与分析,向量数据库维度越高,查询精准度也越高,查询效果也越好。
(3)常见的向量数据库
(4)chromadb演示
chroma学习:https://zhuanlan.zhihu.com/p/680661442
import chromadb
# 连接向量数据库,默认存储在内存中
# client = chromadb.Client()
# 持久化存储path地址
# 存储使用的是sqlite3
client = chromadb.PersistentClient(path="./chroma_db")
# get_or_create_collection 如果有集合则返回,没有则创建
cll = client.get_or_create_collection(name="test")
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)