AI大模型基于LangChain 进行RAG与Agent智能体开发

大模型,英文名叫Large Model,大型模型。早期的时候,也叫Foundation Model,基础模型。

大模型是一个简称,完整的叫法,应该是"人工智能预训练大模型"。预训练,是一项技术,我们后面再解释。

我们现在口头上常说的大模型,实际上特指大模型的其中一类,也是用得最多的一类------语言大模型(Large Language Model,也叫大语言模型,简称LLM)。

除了语言大模型之外,还有视觉大模型、多模态大模型等。现在,包括所有类别在内的大模型合集,被称为广义的大模型。而语言大模型,被称为狭义的大模型。

一、大模型基础简介

大模型(Large Language Model, LLM)是基于海量文本数据训练而成的深度学习模型,具备自然语言理解、生成、推理等核心能力,典型代表有GPT系列(OpenAI)、DeepSeek系列、Llama系列(Meta)等。

从开发视角,大模型可分为三类核心类型,对应不同的应用场景:

通用大模型:适用于文本生成、总结、翻译、问答等基础任务,如GPT-4、DeepSeek-R1。

聊天大模型:专为对话场景优化,支持多轮交互、上下文记忆,如GPT-4o、DeepSeek-Chat。

嵌入大模型(Embedding Model):根据文本生成embedding,用于语义检索、相似度计算、构建RAG应用,如text-embedding-3-small(OpenAI)、deepseek-embed-base(DeepSeek)

二、大模型调用方式

大模型调用方式主要包括厂商专用sdk和langchain体系调用两种方式

2.1 OpenAI

同义千问大模型的接入。我们去阿里云百炼上注册账号,获取apikey.

这里我们先安装python 环境

注册后获取apikey :

可以获取免费的token ,可以看到有各种大模型的model ,基本都是免费100万的token,基本够我们使用了。

接着我们来安装openai

Ollama 是一个强大的本地推理大模型平台,旨在简化模型的本地部署、管理和推理工作流。它允许用户在本地机器上拉取、管理、运行大模型,并提供多种访问方式,包括本地 CLI、HTTP 接口以及通过 OpenAI 客户端的集成。这篇文章将详细介绍 Ollama 的功能,如何使用 Ollama 拉取模型、运行模型,并通过多种方式访问推理服务。 这里不错介绍,由于本地机器配置问题,性能不够,就不做介绍。硬件配置要求大体如下:

调用本地机器时,只需要把base_url 改为"http://localhost:11434/v1"即可。本地机器配置有限,就不做介绍。

接下来我们来使用OpenAI类对象,写一个Chat程序,qwen3-max是聊天模型,用流的方式输出:

主要参数有2个:

model:选择所用模型,如代码的qwen3-max

messages:提供给模型的消息类型:list,可以包含多个字典消息每个字典消息包含2个key

role:角色

content:内容

system角色:设定助手的整体行为、角色和规则,为对话提供上下文框架(如指定助手身份、回答风格、核心要求),是全局的背景设定,影响后续所有交互。

assistant角色:代表AI助手的回答,可以在代码中认为设定user角色:代表用户,发送问题、指令或需求

复制代码
from openai import OpenAI

# 1. 获取client对象,OpenAI类对象
client = OpenAI(
    api_key="sk-xxxxxxx",
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)

# 2. 调用模型
response = client.chat.completions.create(
    model="qwen3-max",
    messages=[
        {"role": "system", "content": "你是一个Python编程专家,并且话非常多"},
        {"role": "assistant", "content": "好的,我是编程专家,并且话非常多,你要问什么?"},
        {"role": "user", "content": "输出1-10的数字,使用python代码编写"}
    ],
    stream=True     # 开启了流式输出的功能
)

# 3. 处理结果
# print(response.choices[0].message.content)
for chunk in response:
    print(
        chunk.choices[0].delta.content,
        end=" ",        # 每一段之间以空格分隔
        flush=True      # 立刻刷新缓冲区
    )

接着我们可以看到流式输出:

为了隐藏apikey,我们可以在环境变量里面设置配置:

在用户变量里面添加OPENAI_API_KEY之后,一定要从启电脑才可以生效!!

2.2 langchan_openai

  • langchain-openai 是基于 openai 原生 SDK 的上层封装库,依赖 openai 实现底层的 API 调用,简单说,就是针对 LangChain 生态做了适配,使其能够完美适配langchain的其他组件

  • Agent、LangChain和RAG三者关系:Agent是具备记忆、规划等能力的智能体;LangChain是提供基础设施的开发框架;RAG用于知识检索增强。

LangChain的定位是代码驱动的开发工具,适合需要高度定制化功能的场景。用户需通过 Python 编写代码,灵活组合模块(如记忆管理、RAG、Agent 等)构建复杂应用 。它更适合技术团队,尤其是需要结合多模型、多数据源的高阶开发者,这样拥有了更多的灵活度,以及更方便开发一些高级智能体。

langchain:核心包

langchain-community:社区支持包,提供了更多的第三方模型调用(我们用的阿里云千问模型就需要这个包)langchain-ollama:Ollama支持包,支持调用Ollama托管部署的本地模型

dashscope:阿里云通义千问的Python SDK

chromadb:轻量向量数据库(后续使用)

接着我们安装一下,pip安装依赖包会很慢,我们可以通过镜像来安装:

常用国内镜像源推荐‌(实测清华源速度最快、最稳定):

  • 清华大学:https://pypi.tuna.tsinghua.edu.cn/simple
  • 阿里云:https://mirrors.aliyun.com/pypi/simple/
  • 中国科技大学:https://pypi.mirrors.ustc.edu.cn/simple/
  • 豆瓣:http://pypi.douban.com/simple/

pip install langchain langchain-community langchain-ollama dashscope chromadb -i https://mirrors.aliyun.com/pypi/simple/

这样我们的LangChain环境就搞好了。

通用的基础大模型存在一些问题:

LLM的知识不是实时的,模型训练好后不具备自动更新知识的能力,会导致部分信息滞后

LLM领域知识是缺乏的,大模型的知识来源于训练数据,这些数据主要来自公开的互联网和开源数据集,无法覆盖特定领域或高度专业化的内部知识

幻觉问题,LLM有时会在回答中生成看似合理但实际上是错误的信息

RAG工作分为两条线:
离线准备线/在线服务线

RAG的核心价值:

解决知识实效性问题:大模型的训练数据有截止时间,RAG可以接入最新文档(如公司财报、政策文件),让模型输出"与时俱进"

降低模型幻觉:模型的回答基于检索到的事实性资料,而非纯靠自身记忆,大幅减少编造信息的概率。

无需重新训练模型:相比微调(Fine-tuning),RAG只需更新知识库,成本更低、效率更高。

LangChain 消息简写:

下面我们来生成一个聊天模型写搜古诗:

复制代码
from langchain_community.chat_models.tongyi import ChatTongyi
from langchain_core.messages import HumanMessage, AIMessage, SystemMessage

# 得到模型对象, qwen3-max就是聊天模型
model = ChatTongyi(model="qwen3-max")

# 准备消息列表
messages = [
    SystemMessage(content="你是一个边塞诗人。"),
    HumanMessage(content="写一首唐诗"),
    AIMessage(content="锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦。"),
    HumanMessage(content="按照你上一个回复的格式,在写一首唐诗。")
]

# 调用stream流式执行
res = model.stream(input=messages)

# for循环迭代打印输出,通过.content来获取到内容
for chunk in res:
    print(chunk.content, end="", flush=True)

少样本模板(Few-Shot Prompt Template)

组装FewShotPromptTemplate对象,获取追踪提示词

from langchain_core.prompts import FewShotPromptTemplate

FewShotPromptTemplate(

examples=None,

example_prompt=None,

prefix=None

suffix=None,

input_variables=None)

参数:

examples:示例数据,list,内套字典

example_prompt:示例数据的提示词模板

prefix:组装提示词,示例数据前内容suffix:组装提示词,示例数据后内容

input_variables:列表,注入的变量列表

如下代码:

复制代码
from langchain_core.prompts import PromptTemplate, FewShotPromptTemplate
from langchain_community.llms.tongyi import Tongyi

# 示例的模板
example_template = PromptTemplate.from_template("单词:{word}, 反义词:{antonym}")

# 示例的动态数据注入 要求是list内部套字典
examples_data = [
    {"word": "大", "antonym": "小"},
    {"word": "粗", "antonym": "细"},
]

few_shot_template = FewShotPromptTemplate(
    example_prompt=example_template,    # 示例数据的模板
    examples=examples_data,             # 示例的数据(用来注入动态数据的),list内套字典
    prefix="告知我单词的反义词,我提供如下的示例:",                   # 示例之前的提示词
    suffix="基于前面的示例告知我,{input_word}的反义词是?",          # 示例之后的提示词
    input_variables=['input_word']      # 声明在前缀或后缀中所需要注入的变量名
)

prompt_text = few_shot_template.invoke(input={"input_word": "左"}).to_string()
print(prompt_text)

model = Tongyi(model="qwen-max")

print(model.invoke(input=prompt_text))

可以看到prompts输出结果:

三. chain链的构建和使用

chain链是将多个基础组件(Prompt、LLM 模型、输出解析器、工具等)按逻辑串联起来的执行流程,解决单一组件无法完成的复杂任务,上一个组件的输出作为下一个组件的输入。

构建chain链的组件,一般得是Runnable子类对象,(普通方法、字典也可加入)。langchain的绝大多数组件都是Runnable接口的子类,包括提示词模板,模型类等等,为什么都有invoke、stream方法,就是继承重写了Runnable接口的invoke抽象方法。

chain链的构建是通过 | 或连接符 进行连接,本质上是langchain各类组件对__or__()魔术方法的重写实现的,比如

chain = prompt | model | parser

返回值chain对象也是RunnableSerializable对象,RunnableSerializable对象是Runnable接口的直接子类也是绝大多数组件的父类,因此,chain对象也是通过invoke或者stream进行阻塞执行或者流式执行整条链条上的所有组件节点。

复制代码
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_community.chat_models.tongyi import ChatTongyi

chat_prompt_template = ChatPromptTemplate.from_messages(
    [
        ("system", "你是一个边塞诗人,可以作诗。"),
        MessagesPlaceholder("history"),
        ("human", "请再来一首唐诗"),
    ]
)

history_data = [
    ("human", "你来写一个唐诗"),
    ("ai", "床前明月光,疑是地上霜,举头望明月,低头思故乡"),
    ("human", "好诗再来一个"),
    ("ai", "锄禾日当午,汗滴禾下锄,谁知盘中餐,粒粒皆辛苦"),
]

model = ChatTongyi(model="qwen3-max")

# 组成链,要求每一个组件都是Runnable接口的子类
chain = chat_prompt_template | model

# 通过链去调用invoke或stream
# res = chain.invoke({"history": history_data})
# print(res.content)

# 通过stream流式输出
for chunk in chain.stream({"history": history_data}):
    print(chunk.content, end="", flush=True)

输出结果:

以上是简单的基于主流的LangChain技术从大模型提示词已经apikey得使用,AI智能体有很多需要学习,后面继续。

相关推荐
Sagittarius_A*2 小时前
角点检测:Harris 与 Shi-Tomasi原理拆解【计算机视觉】
图像处理·人工智能·python·opencv·计算机视觉
困死,根本不会2 小时前
OpenCV实时摄像头处理:曝光调节、降噪与二值化实战
人工智能·opencv·计算机视觉
LitchiCheng2 小时前
Mujoco 开源机械臂 RL 强化学习避障、绕障
人工智能·python·开源
A先生的AI之旅2 小时前
2026-1-30 LingBot-VA解读
人工智能·pytorch·python·深度学习·神经网络
Learn Beyond Limits2 小时前
文献阅读:A Probabilistic U-Net for Segmentation of Ambiguous Images
论文阅读·人工智能·深度学习·算法·机器学习·计算机视觉·ai
丝瓜蛋汤2 小时前
微调生成特定写作风格助手
人工智能·python
OpenMiniServer2 小时前
电气化能源革命下的社会
java·人工智能·能源
猿小羽2 小时前
探索 Codex:AI 编程助手的未来潜力
人工智能·openai·代码生成·codex·ai编程助手
菜青虫嘟嘟2 小时前
Expert Iteration:一种无需人工标注即可显著提升大语言模型推理能力的简单方法核心
人工智能·语言模型·自然语言处理