Datawhale大模型应用开发实战:第二章学习笔记

笔记目录

一. 环境搭建

做了三次环境配置尝试,前两次失败了,所以用了第三种粗糙的方式

1.
create --name llm-app --file requirements_windows.txt -c conda-forge -c anaconda
失败,有大量冲突的 (后两个参数是因为我的清华源有一些包没有,我加了两个源)

2. 
create --name llm-app
pip install -r x.txt
会报告一些包装不了。然后去掉这些包,单独装,也不行。

3. 暂时简单装装环境
conda create -n llmfirst python=3.9
conda activate llmfirst
pip install langchain==0.0.292
pip install openai==0.27.6
pip install numpy==1.26.2
pip install scikit-learn==1.3.2
pip install urllib3==2.1.0

二. 代码介绍

看了第二章,自己跟着教程写了jupyter,跟着跑了,就是文心的api每日访问限额应该挺少,访问了几次就不给访问。

想汇总代码供以后用的时候,发现仓库里已经有很好的汇总代码
llm-universe/project/llm/call_llm.py
,推荐大家一看。

接下来我简单介绍一下
llm-universe-main/project/
目录下的内容:

  • call_llm.py
    中 进行了get_completion的统一实现。
  • [self_llm/wenxin_llm/zhupuai_llm/spark_llm].py
    就将三家的api封装成了LLM类, 供langchain使用。

解释下"供langchain使用"是什么意思?

要使用langchain的chain等实现思维链, 需要有一个封装了更多细节的LLM对象。

而openai等个别大模型, langchain已经为其封装好了, 也就是langchain.chat_models.ChatOpenAI

而对于文心/星火/智谱等, langchain没有封装, 需要自己封装。

封装过程就是继承
langchain.llms.base.LLM,
然后实现
_call
函数

之后这个自定义LLM类就同ChatOpenAI一样使用了.

下面是我对
call_llm.py
代码结构做出的注释

import ...

############ router to different get_completion_xxx     ############
def get_completion(prompt :str, model :str, temperature=0.1..)

# router to get different api_key
def parse_llm_api_key(model:str, env_file:dict()=None)

############ 调用各家的原生接口进而封装成get_completion_xxx ############
############ openai ############
def get_completion_gpt(prompt : str, model : str, temperature : float, api_key:str, max_tokens:int):

############ wenxin ############
def get_access_token(api_key, secret_key):
def get_completion_wenxin(prompt : str, model : str, temperature : float, api_key:str, secret_key : str):

############ spark ############
############ get_completion_spark传给下边的spark_main相应的url和参数, 该函数会通过讯飞指定的websocket(不是post方式)请求回应  ############
def get_completion_spark(prompt : str, model : str, ..):

############ zhipuai ############
def get_completion_glm(prompt : str, model : str, temperature, ..):

"""
上边仅是对get_completion的统一实现。 而要使用langchain的chain等函数,  需要有一个封装了更多东西的LLM对象。 
而openai等个别大模型,  langchain已经为其封装好了, 也就是langchain.chat_models.ChatOpenAI
而对于文心/星火/智拍,  langchain没有封装,  需要自己封装。  
封装过程就是继承langchain.chat_models.ChatBase,  然后实现get_completion函数
或者继承langchain.llms.base.LLM,  然后实现_call函数. 之后这个自定义LLM类就同ChatOpenAI一样使用了.

而llm-universe-main/project下的另外四个文件: self_llm/wenxin_llm/zhupuai_llm/spark_llm 就将三家的api封装成了LLM类,  供langchain使用
"""

""" 
下边就是通过websocket访问讯飞的spark_main函数实现
而notebook文件夹那边(也就是gitbook教程上)的逻辑是 在SparkApiSelf.py中实现一个以websocket访问讯飞的main函数,
然后在spark_api.py中,  装饰了@fastapi_app.post("/spark/")的get_spark_response函数 会接受post请求,  调用main函数。
然后四种方式都可以通过统一的post格式去访问
"""

##### 准备几个函数给spark_main中的 ws=websocket.WebSocketApp(wsUrl, on_message, on_error, on_close, on_open)使用 ###
# 这四个是编写收到websocket错误/关闭/连接建立/消息的处理
answer = ""
class Ws_Param(object):
	  def __init__(self)
	  def create_url(self)

def on_error(ws, error):
def on_close(ws,one,two):
def on_open(ws):
def on_message(ws, message):

# 这两个是包装data成dict并准备发送
def gen_params(appid, domain,question, temperature, max_tokens):
def run(ws, *args):

##### 接受参数,  请求星火 API,  返回答案 (汇总使用上边的小函数)
def spark_main(appid, api_key, api_secret, Spark_url,domain, question, temperature, max_tokens):

三. langchain调用本地大模型

这个就之后等和向量数据库的笔记一块放上来吧

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值