点击关注公众号,“技术干货” 及时达!
关于项目空间02_DocQA.py报错的解决方法,以及本地使用langchain调用大模型的方法
一、 02_DocQA.py报错的解决方法
直接运行该文件,大概率会出现如下报错。查看报错信息的最后一行,发现“ArkNotFoundError”,
再查看Traceback的下一行,发现在代码的77行出现问题。根据该代码块的79、80行,发现使用了embedding模型,可是我们之前并没有配置。
打开火山方舟,新建推理接入点,选择Doubao-embedding(不要设访问限制)。
查看该模型的API调用方法,并打开.cloudiderc文件,将模型端点加入
export EMBEDDING_MODELEND="your_modelend_point"
在终端执行source ~/.cloudiderc
,再次运行02_DocQA.py即可。点击网络服务进入网址或直接在右侧的Web预览中进行问答。
二、 本地使用langchain调用大模型(本例使用了智谱大模型glm-4和火山引擎大模型)
【注意】上一篇提到我的langchain出问题了,后来发现是我给python文件名也起的langchain,大家不要犯类似的错误。解决了这个不算bug的bug,终于可以写代码了?当然不是,下面要解决其他bug!
1. 环境配置
我的原先环境还是有问题,把包都卸载重装了还是不管用,使用pip install
下载的langchain等包都不是最新版,老是各种bug,一怒之下,我重新创建并且配置了一个新环境
(大家可以按照我的步骤走一遍,然后有精力的话在自己的旧环境里面再试一遍)
1. 最新版本的langchain 0.3将不再支持python3.8了,这次使用的是3.9版本的python。
conda create --name bytedance python=3.9
conda activate bytedance
不创建新环境的,要在原环境中,更新python版本,并更新其他库(如果事先安装好了langchain 0.2版本以及其他依赖项,这个更新貌似没用, 不过可以尝试),然后查看版本是否都更新了
conda install python=3.9
conda update --all
conda list
2. 安装langchain
conda install conda-forge::langchain
【注意】由于pip安装可能不是最新版本,所以要用conda官网方法安装,进入anoconda官网,库的下载命令都可以从这里查看https://anaconda.org/
点击这里,进入安装说明(一般选择下载次数最多的,也基本是最新/最稳定的版本)
复制这个命令到anoconda prompt执行
3. 安装依赖项
conda install conda-forge::langchain-openai
conda install conda-forge::langchain-community
2. 代码环节
目录指引:
调用智谱大模型glm-4(免费) 调用火山大模型
如果按照我的流程新建环境一步步走下来执行下面的代码会很顺利,其余的代码执行过程中报错,可能是一些包的安装或者版本问题,说到底还是环境的问题。
1. 调用智谱大模型glm-4(免费)
我由于环境问题,尝试了各种方法,后来经历了一番波折,终于在使用openai测试的时候环境没问题了,但是由于openai并不在国内我无法连接,所以我先行尝试了其他的开源大模型,然后才使用火山大模型。下面是智谱大模型官网给出的langchain调用模板。
【注意】需要自己去智谱官网注册账号,并把api_key配置到自己的环境变量中
import os
from langchain_openai import ChatOpenAI
from langchain.prompts import (
ChatPromptTemplate,
MessagesPlaceholder,
SystemMessagePromptTemplate,
HumanMessagePromptTemplate,
)
from langchain.chains import LLMChain
from langchain.memory import ConversationBufferMemory
api_key = os.environ.get("ZHIPUAI_API_KEY")
llm = ChatOpenAI(
model="glm-4",
max_tokens=100,
openai_api_key=api_key,
openai_api_base="https://open.bigmodel.cn/api/paas/v4/",
)
prompt = ChatPromptTemplate(
messages=[
SystemMessagePromptTemplate.from_template(
"你是一个智能机器人,可以回答人类许多问题。"
),
MessagesPlaceholder(variable_name="chat_history"),
HumanMessagePromptTemplate.from_template("{question}")
]
)
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
chat = LLMChain(
llm=llm,
prompt=prompt,
verbose=True,
memory=memory
)
response = chat.invoke({"question": "请给我的花店起个名字。"})
print(response['text'])
智谱给出的是有提示词的模板,看着有一点复杂,于是我觉得是不是可以更简单一点,然后就产生了下面的简单版代码。
import os
from langchain_openai import ChatOpenAI
# 从环境变量中获取API密钥和模型端点
api_key = os.environ.get("ZHIPUAI_API_KEY")
# 实例化ChatOpenAI对象
llm = ChatOpenAI(openai_api_key=api_key,
openai_api_base="https://open.bigmodel.cn/api/paas/v4/",
model="glm-4",
temperature=0.8,
max_tokens=60)
# 通过对象调用模型
response = llm.predict("请给我的花店起个名字")
print(response)
大家或许更关心火山大模型的调用,代码如出一辙。
2. 调用火山大模型
之前我们在环境变量中已经分别配置了ARK_API_KEY
和LLM_MODELEND
,具体可以参考我上一篇文章。话不多说,直接上代码,这里用了两个版本的代码,大家可以对照掘金小册子和练中学之前的内容,自己试着解读一下代码
版本1
import os
from langchain_openai import ChatOpenAI
# 从环境变量中获取API密钥和模型端点
api_key = os.environ.get("ARK_API_KEY")
model = os.environ.get("LLM_MODELEND")
# 实例化ChatOpenAI对象
llm = ChatOpenAI(openai_api_key=api_key,
openai_api_base="https://ark.cn-beijing.volces.com/api/v3",
model=model,
temperature=0.8,
max_tokens=60)
# 通过对象调用模型
response = llm.predict("请给我的花店起个名字")
print(response)
这个版本执行时会报警,是因为调用方法的版本面临弃用,但是对执行结果没有影响
版本2
import os
from langchain_openai import ChatOpenAI
from langchain.schema import (
HumanMessage,
SystemMessage
)
# 从环境变量中获取API密钥和模型名称
api_key = os.environ.get("ARK_API_KEY")
model = os.environ.get("LLM_MODELEND")
# 初始化ChatOpenAI对象
llm = ChatOpenAI(openai_api_key=api_key,
openai_api_base="https://ark.cn-beijing.volces.com/api/v3",
model=model,
temperature=0.8,
max_tokens=60)
messages = [
SystemMessage(content="你是一个很棒的智能助手"),
HumanMessage(content="请给我的花店起个名")
]
response = llm.invoke(messages)
# 以下几行可直接替换20-24行代码
# response = llm.invoke([
# ("system", "你是一个智能机器人,可以回答人类许多问题。"),
# ("human", "请给我的花店起个名字。")
# ])
print(response.content)
三、总结与提示
环境的配置至关重要,这里包括库的安装、库的版本、依赖项......很多东西其实需要大家自己去相应的官网查看指引和相关文档,本文除了国内的大模型网站,像langchain、Anoconda、Github这些网站都是英文的,有些网页提供了翻译,大部分是没有的,大家可以先搜索关键词查看相应部分,或者复制到翻译软件中查看中文翻译,实在太别扭不理解的,就可以利用网站上的一些关键信息直接去请教AI了。 其实代码报错的内容大家基本都能看得懂,无非就是报错的最后一行、或者Traceback下面第一行,可以先试着去理解并尝试自己解决,不懂的再去查找官方文档或者AI,当然AI最方便,但是有的问题仍然无法解决; conda虚拟环境的问题其实AI只能解决大部分,有时候他最后会给你一个“如果以上方法都不能解决,请尝试重新创建一个环境” 最后再说一遍,AI要是都能完美解决,那我真白写了?我是不是人啊?我到底是不是人啊?!!
点击关注公众号,“技术干货” 及时达!