大模型及提示词
什么是RAG
RAG【Retrieval-Augmented Generation,检索增强生成】是对大模型语言模型输出进行优化,在原有强大能力的基础上,访问特定领域或组织的内部知识库,在无需重新训练的基础上得到和使用新的知识。
RAG的核心思想非常简单直白,就像它的名字一样:
- 检索(Retrieva:在接收到用户的问题时,先不是直接生成答案,而是先去查阅资料
- 增强(Augmented):在查阅资料"后,把资料和用户的问题一同提交给LLMI
- 生成(Generation):LLM在生成答案时,参考上下文资料,从而生成更准确、更可靠、更有针对性的答案
RAG应用场景
-
智能客服/聊网机器人:
场景:用户咨询企业的产品、服务、政策等问题
RAG价值:让机器人能够回答最新的产品信息、促销活动、售后政策等,而不是给出过时的信息。同时,可以接入企业内部知识库,回答更专业、更定制化的问题,提升客户满意度
例子:银行的智能客服,可以接入最新的利率政策、理财产品信息;电商平台的客服,可以回答最新的商品库存、物流信息、售后服务等企业内部知识库/文档问答:
-
内容创作/文章生成:
场景:需要LLM生成新闻报道、研究报告、产品文案等需要事实依据的内容
RAG价值:保证生成内容的准确性和时效性,避免LLM“胡编造”。同时,可以根据特定的知识库(例如,行业报告、专家访谈),生成更专业、更深入的内容
例子:新闻机构可以利用RAG系统,快速生成基于最新新闻事件的报道;研究机构可以利用RAG系统,快速生成基于科研论文和数据的研究报告
什么是大模型
大模型(LargeModel)通常指参数规模巨大的深度学习模型,参数量通常在数十亿、数首亿基至数干亿级别。能够处理和学习海量数据,并从中提取更复杂、更抽象的特征和知识。在多种任务上展现出卓越的性育,无其在直然语言处理、计算机视觉等领域。
当深度学习模型规模扩护展到一定程度时,会观祭到一些在较小模型中不明显的涌现特性,例如*提升的法化性能、展现出更复杂的任务角解决能能力(在某些方面可被视为推理的初步形式)、以及一些表现出类似人类智能的行为模式
这些涌现特性使得大模型成为当前人工智能领域探索通用人工智能(AGI)的一个重要且备受关注的方向
什么是大语言模型
大语言模型(LargeLanguageModel,ILM)是专门用于处理和生成自然语言的大模型。专门训练用于理解和生成人类语言,例如文本生成、对话、翻译、文本摘要、问答等
自然语言虽然只是深度学习的众多应用方向之一,但是由于文学语言拥有极强大的表达能力、有海量的数据、其他模态内容能够方便的处理为文学,使得大语言模型有以下特点:
适合作为AI技术的人机交互
从海量资料中捕捉更多的知识
作为基础模型,支持多模态数据
预训练通用数据,再微调专业数据
进而在A技术的应用可以上下游分工,比如:
1.学术界:研究和改进大模型的训练方法
2.工业界:拥有数据和算力,根据研究文献训练出通用模型
3.商业领域:对通用模型进行微调或RAG,提供专业领域模型或Agent
4.应用层面:使用模型或Agent,完成业务上的需求和任务
目前,国内外知名模型
如何使用大模型
使用方式 面向人群 操作方式 使用场景 在线应用 普通用户 提示词(Prompt) 日常对话,信信息查询,内容创作等。 API 开发人员 函数调用(Function Calling)、智能体(AI Agent) 构建智能应用,集成到现有系统,自动化工作流程。 模型文件 专业人员 模型微调(Fine-tuning) 针对特定领域优化模型性能,定制化模型功能。 训练数据 研究人员 模型训练(Model Training) 模型算法研究,新模型开发,性能benchmark测试改进。
Python API环境搭建及接入大模型
1、安装Python环境
2、安装大模型依赖库
pip install openai #安装单个库
pip install -r requirements.txt #安装多个库
3、创建环境变量
#放在环境变量中的好处是在代码中不会暴露密钥信息。
OPENAI_BASE_URL:接口地址
OPENAI_API_KEY:接口密钥
4、调用openai库
from openai import OpenAI
client = OpenAI()
completion = client.chat.completions.create(
model="deepseek-chat",#选择模型
messages=[ #发送对话
{
"role":"system", #对大模型的设定
"content":"所有的回答不得超过10个字"
},
{
"role":"user",
"content":"你是谁"
}
],
)
print(completion.choices[0].message.content) #输出结果
message消息对象
流式输出,是一个一个的输出,不是一次性输出。网页版的一般都是流式输出的。
from openai import OpenAI
client = OpenAI()
completion = client.chat.completions.create(
model="deepseek-chat",#选择模型
messages=[ #发送对话
{
"role":"system", #对大模型的设定
"content":"所有的回答不得超过10个字"
},
{
"role":"user",
"content":"你是谁"
}
],
stream=true, #启用流式传输
)
for chunk in completion:
print(chunk.choices[0].delta.content,end="") #逐个打印最新生成的内容
温度可以控制LLM生成文本的创造性和随机性,范围0-2,默认为1:
越接近0:生成的文本更保守、重复性高,更倾向于选择最有可能的Token。适合需要准确性和一致性的任务,例如事实、代码、数学相关等。
越接近2:生成的文本更创新、发散、重复性低,更倾向于选择不太常见但仍然合理的Token。适合需要创造性和灵感的任务,例如故事创作、头脑风暴等。
from openai import OpenAI
client = OpenAI()
for t in [0,0.3,0.6,0.9,1.2,1.5,1.7,2] #迭代不同的温度参数
completion = client.chat.completions.create(
model="deepseek-chat",#选择模型
messages=[ #发送对话
{
"role":"system", #对大模型的设定
"content":"所有的回答不得超过10个字"
},
{
"role":"user",
"content":"你好啊"
}
],
temperature=t,
)
print(completion.choices[0].message.content) #输出结果
print("--------------------")
多轮对话:
人与人之间的对话时,我们会记住之前的对话内容,以便更好地理解和回应对方。LLM也会参考之前的对话内容(上下文)来理解问题并生成合适回复。
为了让LLM得到之前的对话内容,实现多轮对话,需要维护messages列表:每次对话轮都将用户的消息和Al 助手的回复追加到messages列表中。
from openai import OpenAI
client = OpenAI()
#使用变量保存历史记录
messages = [{"role":"user", "content":"1+1等于几"}]
#Round 1
response = client.chat.completions.create(
model="deepseek-chat",#选择模型
messages=messages
)
messages.append(response.choices[0].message) #把AI的回得加入列表
print(f"Messages Round 1: {messages}")
#Round 2
messages.append({"role":"user", "content":"再加1呢"}) #把新的问题加入列表
response = client.chat.completions.create(
model="deepseek-chat",#选择模型
messages=messages #发送列表,包含此前的对话内容。
)
messages.append(response.choices[0].message)
print(f"Messages Round 2: {messages}")