LangChain教程 | 实践过程报错集 | 持续更新

文章讲述了作者在使用LLM工具时遇到的三种常见错误:TypeError、Python-dotenv解析问题和RateLimitError,着重介绍了如何定位问题并提供了解决方案,包括检查代理错误、环境配置和调整请求策略以适应OpenAI模型的上下文长度限制。
摘要由CSDN通过智能技术生成

这是本人最近在做langchain教程过程中的遇到的报错,不分先后顺序。

报错:TypeError: 'NoneType' object is not iterable

这个报错很常见,咱们要看原始报错的位置是哪里,下面是我的截图:

找到源头之后,就在源头的位置打个断点:

然后启用debug模式 shift+F9,如果不懂断点模式,自行学习下先。

这里就能看到提示代理错误。再回到上面源码的位置,这是由于咱们在使用LLMs工具时,没有正常访问到大语言模型平台,这里用的是openai的代理,检查发现这是由于OPENAI-KEY代理商的问题,不支持默认的 text-embedding-ada-002 ,更换成其他代理商,就可以了。

以下这几个LLM都有可能报错:请注意检查自己的openai-key代理商都支持那些models

报错:Python-dotenv could not parse statement starting at line 2

直接检查配置文件 .env 格式是否正确,由于刚更新了最新的pycharm编辑器,使用快捷注释 ctrl + / ,直接采用 ; 进行注释而不是标准的 # ,改回正常注释即可,如图:

报错:openai.RateLimitError: Error code: 429 - {'error': {'message': 'Request too large for text-embedding-ada-002 in organization org-LuuLZeqq6vQg5xm5ykGftEgo on tokens per min (TPM): Limit 150000, Requested 301143. The input or output tokens must be reduced in order to run successfully.

原因如错误信息所示,速率限制。 问题是请求者最小( rpm )过多。

官方文档:https://platform.openai.com/docs/guides/embeddings/use-cases

 解决方案:

作为解决方案,通过在一个请求中获取多行的嵌入表示来降低RPM。
首先,计数每行的令牌数。

import tiktoken
embedding_encoding = "cl100k_base"  # this the encoding for text-embedding-ada-002
encoding = tiktoken.get_encoding(embedding_encoding)
df["num_tokens"]=df["embedding_text"].map(lambda x: len(encoding.encode(x)))

通过以接近TMP上限的令牌数请求,避免受到限制。

import time
embedding_model="text-embedding-ada-002"
embedding_texts=[]
token_sum=0
max_input=2048 # inputのlistの最大長は2048 https://github.com/openai/openai-python/issues/519
max_tmp=150000*2/3
responses=[]
for i,row in df.iterrows():
    token_sum+=row["num_tokens"]
    if (token_sum>=max_tmp) or (len(embedding_texts)>=max_input):
        print(i,"/",df.shape[0],len(embedding_texts),token_sum-row["num_tokens"])
        response=client.embeddings.create(input = embedding_texts, model=embedding_model)
        responses+=response.data
        token_sum=row["num_tokens"]
        embedding_texts=[row["embedding_text"]]
        time.sleep(65)
    else:
        embedding_texts+=[row["embedding_text"]]
    
responses+=client.embeddings.create(input = embedding_texts, model=embedding_model).data
df["ada_embedding"]=[r.embedding for r in responses]

除了数据过多( 200*150000令牌以上)以外,这样应该不会影响速率限制。

报错:This model's maximum context length is 4097 tokens. However, your messages resulted in 7998 tokens. Please reduce the length of the messages.

此模型的最大上下文长度为4097个标记。但是,您的消息产生了7998个令牌。请缩短信息的长度。

解决方案: 

其实就是openAI的model都有限制上下文大小,具体的model大小看下面:

model_token_mapping = {
            "gpt-4": 8192,
            "gpt-4-0314": 8192,
            "gpt-4-0613": 8192,
            "gpt-4-32k": 32768,
            "gpt-4-32k-0314": 32768,
            "gpt-4-32k-0613": 32768,
            "gpt-3.5-turbo": 4096,
            "gpt-3.5-turbo-0301": 4096,
            "gpt-3.5-turbo-0613": 4096,
            "gpt-3.5-turbo-16k": 16385,
            "gpt-3.5-turbo-16k-0613": 16385,
            "gpt-3.5-turbo-instruct": 4096,
            "text-ada-001": 2049,
            "ada": 2049,
            "text-babbage-001": 2040,
            "babbage": 2049,
            "text-curie-001": 2049,
            "curie": 2049,
            "davinci": 2049,
            "text-davinci-003": 4097,
            "text-davinci-002": 4097,
            "code-davinci-002": 8001,
            "code-davinci-001": 8001,
            "code-cushman-002": 2048,
            "code-cushman-001": 2048,
        }

目前现有的OpenAI model的上下文大小

按照提示来说,最好是更换成gtp-4或者是gpt-3.5-turbo-16k,如果追求更好性能的就gpt-4,如果想性价比高,价格便宜的就gpt-3.5的,价格差了将近20倍。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值