核心内容摘要
Vue3 的组件运行机制
大模型英文名叫Large Model大型模型。
早期的时候也叫Foundation Model基础模型。
大模型是一个简称完整的叫法应该是“人工智能预训练大模型”。
预训练是一项技术我们后面再解释。
我们现在口头上常说的大模型实际上特指大模型的其中一类也是用得最多的一类——语言大模型Large Language Model也叫大语言模型简称LLM。
除了语言大模型之外还有视觉大模型、多模态大模型等。
现在包括所有类别在内的大模型合集被称为广义的大模型。
而语言大模型被称为狭义的大模型。
大模型基础简介大模型Large Language Model, LLM是基于海量文本数据训练而成的深度学习模型具备自然语言理解、生成、推理等核心能力典型代表有GPT系列OpenAI、DeepSeek系列、Llama系列Meta等。
从开发视角大模型可分为三类核心类型对应不同的应用场景通用大模型适用于文本生成、
总结、翻译、问答等基础任务如GPT-
DeepSeek-R1。
聊天大模型专为对话场景优化支持多轮交互、上下文记忆如GPT-4o、DeepSeek-Chat。
嵌入大模型Embedding Model根据文本生成embedding用于语义检索、相似度计算、构建RAG应用如text-embedding-3-smallOpenAI、deepseek-embed-baseDeepSeek
大模型调用方式大模型调用方式主要包括厂商专用sdk和langchain体系调用两种方式。
1 OpenAI同义千问大模型的接入。
我们去阿里云百炼上注册账号获取apikey.这里我们先安装python 环境注册后获取apikey :可以获取免费的token ,可以看到有各种大模型的model ,基本都是免费100万的token基本够我们使用了。
接着我们来安装openaiOllama 是一个强大的本地推理大模型平台旨在简化模型的本地部署、管理和推理工作流。
它允许用户在本地机器上拉取、管理、运行大模型并提供多种访问方式包括本地 CLI、HTTP 接口以及通过 OpenAI 客户端的集成。
这篇文章将详细介绍 Ollama 的功能如何使用 Ollama 拉取模型、运行模型并通过多种方式访问推理服务。
这里不错介绍由于本地机器配置问题性能不够就不做介绍。
硬件配置要求大体如下调用本地机器时只需要把base_url 改为http://localhost:11434/v1即可。
本地机器配置有限就不做介绍。
接下来我们来使用OpenAI类对象写一个Chat程序qwen3-max是聊天模型用流的方式输出主要参数有2个:model:选择所用模型如代码的qwen3-maxmessages:提供给模型的消息类型:list可以包含多个字典消息每个字典消息包含2个keyrole:角色content:内容system角色:设定助手的整体行为、角色和规则为对话提供上下文框架(如指定助手身份、回答风格、核心要求)是全局的背景设定影响后续所有交互。
assistant角色:代表AI助手的回答可以在代码中认为设定user角色:代表用户发送问题、指令或需求from openai import OpenAI #
获取client对象OpenAI类对象 client OpenAI( api_keysk-xxxxxxx, base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1 ) #
调用模型 response client.chat.completions.create( modelqwen3-max, messages[ {role: system, content: 你是一个Python编程专家并且话非常多}, {role: assistant, content: 好的我是编程专家并且话非常多你要问什么}, {role: user, content: 输出
的数字使用python代码编写} ], streamTrue # 开启了流式输出的功能 ) #
处理结果 # print(response.choices[0].message.content) for chunk in response: print( chunk.choices[0].delta.content, end , # 每一段之间以空格分隔 flushTrue # 立刻刷新缓冲区 )接着我们可以看到流式输出为了隐藏apikey,我们可以在环境变量里面设置配置在用户变量里面添加OPENAI_API_KEY之后一定要从启电脑才可以生效
2 langchan_openailangchain-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 SDKchromadb:轻量向量数据库(后续使用)接着我们安装一下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(modelqwen3-max) # 准备消息列表 messages [ SystemMessage(content你是一个边塞诗人。
), HumanMessage(content写一首唐诗), AIMessage(content锄禾日当午汗滴禾下土谁知盘中餐粒粒皆辛苦。
), HumanMessage(content按照你上一个回复的格式在写一首唐诗。
) ] # 调用stream流式执行 res model.stream(inputmessages) # for循环迭代打印输出通过.content来获取到内容 for chunk in res: print(chunk.content, end, flushTrue)少样本模板Few-Shot Prompt Template组装FewShotPromptTemplate对象获取追踪提示词from langchain_core.prompts import FewShotPromptTemplateFewShotPromptTemplate(examplesNone,example_promptNone,prefixNonesuffixNone,input_variablesNone)参数: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_promptexample_template, # 示例数据的模板 examplesexamples_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(modelqwen-max) print(model.invoke(inputprompt_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(modelqwen3-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, flushTrue)输出结果以上是简单的基于主流的LangChain技术从大模型提示词已经apikey得使用AI智能体有很多需要学习后面继续。