当前位置: 首页 > news >正文

小杰-大模型(one)——RAG与Agent设计——Langchain部署大模型。

1. Langchain部署本地大模型

1.1 Langchain的安装

pip install langchain==0.3.4
pip install langchain_community==0.3.5
pip install -U langchain-openai==0.2.5

这三个库都与构建和使用自然语言处理(NLP)和人工智能(AI)应用有关。下面是每个库的简要介绍:

1. langchain==0.3.4

langchain 是一个用于构建对话系统的框架。它提供了许多工具和模块,帮助开发者快速搭建和训练对话系统。这个库支持多种语言模型和服务,包括但不限于 OpenAI 的模型。

2. langchain_community==0.3.5

langchain_community 是一个社区驱动的扩展库,旨在为 langchain 提供更多的功能和插件。这个库通常包含由社区贡献的模块和工具,可以帮助开发者更快地实现特定功能。

3. langchain-openai==0.2.5

langchain-openai 是专门为 langchain 框架设计的 OpenAI 集成库。它提供了与 OpenAI API 交互的便捷方式,使得在 langchain 中使用 OpenAI 的模型变得更加简单

1.2 Langchain模型推理

Langchain中包含两种语言模型:LLMs(纯文本补全模型)和ChatModels(专门针对对话进行了调整的模型)。

其中LLMs以字符串作为输入并返回字符串而ChatModels以消息列 表作为输入并返回消息。

LLMs比较好理解输入输出都是字符串。

我们来说一下ChatModels。ChatModels输入是一个ChatMessage列表。而输出是一个单独的ChatMessage,一个ChatMessage具有两个必需的组件:

  • content: 这是消息的内容。
  • role: 这是ChatMessage来自的实体的角色。包括
  • HumanMessage来自人类/用户的ChatMessage
  • AIMessage(AI消息)来自AI/助手的ChatMessage
  • SystemMessage来自系统的ChatMessage(系统预设的提示或规则,定义AI的行为边界、角色设定或对话上下文)
  • FunctionMessage来自函数调用的ChatMessage(获得外部工具/函数执行后的返回结果,作用:向AI传递函数调用的执行结果))

Langchain为LLMs和ChatModels都提供了标准接口。

from langchain_openai import OpenAI是纯文本补全模型。它们包装的 API 将字符串提示作为输入并输出字符串完成。

from langchain_openai import ChatOpenAI是聊天模型,通常由LLMs支持,但专门针对对话进行了调整。

from langchain_openai import ChatOpenAI
from langchain_openai import OpenAIllm = OpenAI()
chat_model = ChatOpenAI()

但这种方式需要OpenAI的api,下面介绍两种Langchain调用大模型的方法。

.2.1 方法一

直接调用硅基流动上的OpenAI接口

from langchain_openai import ChatOpenAI
from langchain_openai import OpenAI
#续写能力
llm = OpenAI(openai_api_key="sk-bhpqpryfyiszcqwugbmjgvvccultcovcgbfbvauxnbbfkcdo",  # 替换为你的实际API密钥base_url="https://api.siliconflow.cn/v1",model="Qwen/Qwen2.5-7B-Instruct"
)print(llm.invoke("你好"))
print("------------------------------------")#聊天能力
chat_model = ChatOpenAI(openai_api_key="sk-bhpqpryfyiszcqwugbmjgvvccultcovcgbfbvauxnbbfkcdo",  # 替换为你的实际API密钥base_url="https://api.siliconflow.cn/v1",model="Qwen/Qwen2.5-7B-Instruct"
)print(chat_model.invoke("你好"))

1.2.2 方法二

使用手动封装续写模型 替换掉openai(手动封装的效果等于llm.invoke的效果,也就是纯文本补全)。

from langchain.llms.base import LLM
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
#分词
tokenizer = AutoTokenizer.from_pretrained("./models/Qwen/Qwen2.5-0.5B-Instruct")
#加载因果语言模型
model = AutoModelForCausalLM.from_pretrained("./models/Qwen/Qwen2.5-0.5B-Instruct",torch_dtype=torch.float16).to(device)class CustomLLM(LLM):def _call(self, prompt: str, stop: list = None) -> str:#-> str表示返回是字符串# 将输入 prompt 转换为模型的输入格式inputs = tokenizer(prompt, return_tensors="pt").to(device)# 生成模型输出# ** 是解包运算符,专门用于字典。当字典被 ** 解包时,字典的 键(key) 会作为参数名,# 值(value) 会作为参数值传递给函数outputs = model.generate(**inputs)# 解码输出 为文本格式generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)return generated_text# @property装饰器表示这是一个属性方法,可以通过实例._identifying_params直接访问(无需加括号)@propertydef _identifying_params(self):"""返回模型的标识信息,方便调试"""return {"model_path": model.config.name_or_path}@propertydef _llm_type(self):"""返回模型的类型标识"""return "custom"# 使用封装的模型
local_llm = CustomLLM()# 测试生成结果
result = local_llm("你好")
print(result)

手动封装chatmodels模型

from langchain.llms.base import LLM
from transformers import AutoModelForCausalLM, AutoTokenizer
import torchdevice = torch.device("cuda" if torch.cuda.is_available() else "cpu")tokenizer = AutoTokenizer.from_pretrained("./models/Qwen/Qwen2.5-0.5B-Instruct")
model = AutoModelForCausalLM.from_pretrained("./models/Qwen/Qwen2.5-0.5B-Instruct").to(device)## 手动封装chatmodels模型
class CustomChatLLM(LLM):def _call(self, prompt: str, stop: list = None) -> str:messages = [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": prompt}]# 使用分词器将对话历史转换为适用于模型输入的格式,并添加生成提示。text = tokenizer.apply_chat_template(messages,tokenize=False,#设为False返回字符串,True返回token idsadd_generation_prompt=True #True为在末尾添加引导AI回复的提示符如 assistant)print(text)# 将输入 prompt 转换为模型的输入格式model_inputs = tokenizer([text], return_tensors="pt").to(device)# 使用模型生成新的token序列,最大生成新的token数量为512。generated_ids = model.generate(model_inputs.input_ids,max_new_tokens=512,)# 截取生成的token序列,去除原始输入的部分。generated_ids = [output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)]# 将生成的token序列解码回文本,并忽略特殊token。response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]return response@propertydef _identifying_params(self):"""返回模型的标识信息,方便调试"""return {"model_path": model.config.name_or_path}@propertydef _llm_type(self):"""返回模型的类型标识"""return "custom"## 使用封装的模型
local_llm = CustomChatLLM()
# 测试生成结果
result = local_llm("你好")
print(result)

方法3调用本地ollama大模型

from langchain_community.chat_models import ChatOllama# 聊天模型(Ollama 本地)
chat_model = ChatOllama(model="qwen2.5:0.5b",  # 你本地 ollama pull 下来的模型名字
)print(chat_model.invoke("你好"))
http://www.dtcms.com/a/583544.html

相关文章:

  • UE5 C++ 进阶学习 小知识点 —— 01 - 本地化语言
  • 如何来构建一个成交型网站wordpress手机端和pc端兼容
  • 网站建设客户资料收集清单个人网站有哪些站
  • 搜狐快站怎么样wordpress 多说评论插件
  • 网站广告psdwordpress 产品多个分类
  • 浏览器收录网站惠州网站建设点
  • 重庆建设网站哪个好中国企业500强名单公布
  • 邹城建网站研究院网站建设方案
  • 岳阳网站开发商城广州工商学院门户网站
  • 淮北专业三合一网站开发苏州城乡建设网站查询
  • 深圳网站建设服务电话alexa全球网站排名
  • php做网站需要什么技术做网站开发哪里可以接单
  • .net 网站制作唐山炎黄宽带网站
  • 做运营必知网站温州网站开发技术
  • 电子商务知名网站wordpress电子邮件
  • 技术支持 金华网站建设seo关键词怎么选
  • 临沂企业网站建站模板图片发到哪些网站 seo
  • 12数据网站建设discuz主题模板
  • 招聘网站建设公司张掖市作风建设年活动网站
  • 网站建设大作业选题免费ppt模板可编辑
  • 国内网站建设建设峨边网站建设
  • 顺序表vector--------练习题7题解
  • 网站建设含义六盘水网络推广
  • 江北网站制作制作网页用什么语言
  • 校园视频网站建设房地产开发公司账务处理流程
  • 给网站做维护是什么工作关注公众号一单一结兼职app
  • 子午谷网站建设百度投诉中心24小时电话
  • 今日行情明日机会——20251107
  • 做网页怎么在网站播放视频网站设计岗位的职责与要求
  • 毕设网站淘宝指数查询工具