LangChain学习一:入门-本地化部署-接入大模型

学习目标:快速入门,了解LangChain


学习内容一:LangChain之六大核心模块

  1. 模型(models) : LangChain 支持的各种模型类型和模型集成。

  2. 提示(prompts) : 包括提示管理、提示优化和提示序列化。

  3. 链(chains) : 链不仅仅是单个 LLM 调用,还包括一系列调用(无论是调用 LLM 还是不同的实用工具)。LangChain 提供了一种标准的链接口、许多与其他工具的集成。LangChain 提供了用于常见应用程序的端到端的链调用。

  4. 索引(indexes) : 与您自己的文本数据结合使用时,语言模型往往更加强大——此模块涵盖了执行此操作的最佳实践。

  5. 代理(agents) : 代理涉及 LLM 做出行动决策、执行该行动、查看一个观察结果,并重复该过程直到完成。LangChain 提供了一个标准的代理接口,一系列可供选择的代理,以及端到端代理的示例。

  6. 内存(memory)也叫记忆存储 : 内存是在链/代理调用之间保持状态的概念。LangChain提供了一个标准的内存接口、一组内存实现及使用内存的链/代理示例。

为了让大家记住这六个核心模块:举个例子-我们在使用使用大模型,首先就要使用模型对接。对接好了,我们怎么开始想怎么问大模型的问题(提示词),接着想好怎么问他,我们需要穿起来(链)。现在要强大我们的大模型,需要让他拥有额外知识(索引)和代替我们做一些工作(代理).再问问的时候我希望他拥有记忆(内存)

学习内容二:如何接入大模型-实战

2.1 前提-LangChain如何对接ChatGTP等开源大模型

2.1.1 原生 openai 模块调用大模型

如果你是在国外或者学会了科学上网,并且你在openai注册了key,你就可以使用opanai的模块进行调用

在这里插入图片描述

pip install openai==0.28
import os
import openai

def get_completion(prompt,model="gpt-3.5-turbo"):
    messages=[{"role":"user","content":prompt}]

    response=openai.ChatCompletion.create(
        model=model,
        messages=messages,
        temperature=0,
    )
    return response.choices[0].message["content"]


if __name__ == "__main__":
    # import your OpenAI key (put in your .env file)
    # 从.env文件中导入OpenAI的API密钥

    with open(".env", "r") as f:
        env_file = f.readlines()
    envs_dict = {
        key.strip("'"): value.strip("\n")
        for key, value in [(i.split("=")) for i in env_file]
    }
    os.environ["OPENAI_API_KEY"] = envs_dict["OPENAI_API_KEY"]

    # 第一步这是openai的key
    openai.api_key = os.environ["OPENAI_API_KEY"]
    print(get_completion("你是谁"))



结果

您好!我是一个基于人工智能技术的虚拟助手,旨在回答各种问题并提供帮助。我的设计初衷是为了提供信息、解答疑问以及进行有益的交流。如果您有任何问题,无论是关于科学知识、技术信息还是日常生活中的小事,都可以向我提问,我将尽力为您提供帮助。请注意,我会遵守相关法律法规,确保交流内容的合规性。```

2.1.2 使用LangChain封装的OpenAI模块

2.1.2.1环境准备

前提条件你是部署好了你的本地大模型,并且提供了API接口,如果你还不会搭建本地模型,你可以参考我的另一篇博客通义千问部署

这里我也不厌其烦在介绍一下
首先你需要下载你的大模型,这里用通义千问7B举例
https://www.modelscope.cn/models/qwen/Qwen-7B-Chat/files
在这里插入图片描述

在这里插入图片描述

在下载之前你需要安装环境

pip install openai==0.28
pip install transformers==4.32.0 accelerate tiktoken einops scipy transformers_stream_generator==0.0.4 peft deepspeed


pip install transformers_stream_generator


pip3 install -U modelscope
# 对于中国的用户,您可以使用以下命令进行安装:
# pip3 install -U modelscope -i https://mirror.sjtu.edu.cn/pypi/web/simple

默认是在/root/.cache文件夹,这里可以local_dir_root 指定下载位置

from modelscope.hub.snapshot_download import snapshot_download
local_dir_root = "/root/autodl-tmp/models_from_modelscope"
snapshot_download('qwen/Qwen-7B-Chat', cache_dir=local_dir_root)

当然这个只是一种下载方式,还有git方式,这里就不重复介绍了,那一篇博客有介绍,如下

git lfs install
# git clone https://www.modelscope.cn/<namespace>/<model-name>.git

2.1.2.2启动模型

拉去官方的demo,一般模型都有自己的demo,大家可以去看看

在这里插入图片描述
在这里插入图片描述

git clone https://github.com/QwenLM/Qwen.git

修改Qwen里面的openai_api地址为真实的地址
在这里插入图片描述
在这里插入图片描述

然后就可以正常启动了

pip install openai==0.28
pip install -r requirements.txt
pip install fastapi uvicorn openai pydantic sse_starlette
python openai_api.py

在这里插入图片描述
可以携带你参数

--checkpoint-path 增量模型地址
--cpu-only cpu启动
--server-port 服务端口默认8000
--server-name 服务ip默认127.0.0.1
---disable-gc在生成每个响应后禁用GC。

在这里插入图片描述

2.1.2.3 使用模型

当然此时我们还是可以使用openai的模块进行调用

import openai
openai.api_base = "http://localhost:8000/v1"
openai.api_key = "none"

# 使用流式回复的请求
for chunk in openai.ChatCompletion.create(
    model="Qwen",
    messages=[
        {"role": "user", "content": "你好"}
    ],
    stream=True
    # 流式输出的自定义stopwords功能尚未支持,正在开发中
):
    if hasattr(chunk.choices[0].delta, "content"):
        print(chunk.choices[0].delta.content, end="", flush=True)

# 不使用流式回复的请求
response = openai.ChatCompletion.create(
    model="Qwen",
    messages=[
        {"role": "user", "content": "你好"}
    ],
    stream=False,
    stop=[] # 在此处添加自定义的stop words 例如ReAct prompting时需要增加: stop=["Observation:"]。
)
print(response.choices[0].message.content)

在这里插入图片描述

当然应为我们选择LangChain最为我们的中间件,我们也可以使用LangChain封装的模块使用

pip install langchain
from langchain.chat_models import ChatOpenAI

from langchain.schema import HumanMessage

llm = ChatOpenAI(
    streaming=True,
    verbose=True,
    # callbacks=[callback],
    openai_api_key="none",
    openai_api_base="http://127.0.0.1:8000/v1",
    model_name="Qwen-7B-Chat"
)
instructions = """
你将得到一个带有水果名称的句子,提取这些水果名称并为其分配一个表情符号
在 python 字典中返回水果名称和表情符号
"""

fruit_names = """
苹果,梨,这是奇异果
"""

# 制作结合说明和水果名称的提示
prompt = (instructions + fruit_names)

# Call the LLM
output = llm([HumanMessage(content=prompt)])

print (output.content)
print("========")
print (type(output.content))
# 苹果: 🍎梨: 🥐奇异果: 🍓
# ========
# <class 'str'>

在这里插入图片描述

关于我-一个默默打工小孩

我是去年本科计算机毕业的,一直在前进。不存在商业化博客,乱七八糟的。
如果帮到大家了,或者遇到什么麻烦欢迎和我一起讨论
18956043585(微信同号)
如果解决你的麻烦,也欢迎在这里留下你的兴奋
目标是2天一更新,继续加油吧

  • 52
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码浪人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值