首页 > 其他分享 >二次开发,在使用LangChain中的Tongyi模型进行流式输出streaming报错问题,官网框架的BUG修复。非常好的干货。

二次开发,在使用LangChain中的Tongyi模型进行流式输出streaming报错问题,官网框架的BUG修复。非常好的干货。

时间:2025-01-16 15:25:13浏览次数:1  
标签:elif LangChain tokens Dict import 二次开发 报错 Any merged

在使用LangChain中的Tongyi模型进行流式输出时,按照官方的代码直接运行会报一个类型错误:

TypeError: Additional kwargs key output_tokens already exists in left dict and value has unsupported type <class 'int'>.

​ 其指向的错误文件路径如下

C:\Users\Chenhao\AppData\Local\Programs\Python\Python39\lib\site-packages\langchain_core\utils\_merge.py

点开文件里面内容如下,其主要作用合并两个字典,然后处理字典中键值冲突的问题,之后将该BUG在stakflow上提问,得到了回复,根据测试直接让merge_dicts返回该字典即{'input_tokens': 530, 'output_tokens': 2, 'total_tokens': 532},该BUG目前还没有修复。

from __future__ import annotations

from typing import Any, Dict


def merge_dicts(left: Dict[str, Any], right: Dict[str, Any]) -> Dict[str, Any]:
    """Merge two dicts, handling specific scenarios where a key exists in both
    dictionaries but has a value of None in 'left'. In such cases, the method uses the
    value from 'right' for that key in the merged dictionary.

    Example:
        If left = {"function_call": {"arguments": None}} and
        right = {"function_call": {"arguments": "{\n"}}
        then, after merging, for the key "function_call",
        the value from 'right' is used,
        resulting in merged = {"function_call": {"arguments": "{\n"}}.
    """
    merged = left.copy()
    for k, v in right.items():
        if k not in merged:
            merged[k] = v
        elif merged[k] is None and v:
            merged[k] = v
        elif v is None:
            continue
        elif merged[k] == v:
            continue
        elif type(merged[k]) != type(v):
            raise TypeError(
                f'additional_kwargs["{k}"] already exists in this message,'
                " but with a different type."
            )
        elif isinstance(merged[k], str):
            merged[k] += v
        elif isinstance(merged[k], dict):
            merged[k] = merge_dicts(merged[k], v)
        elif isinstance(merged[k], list):
            merged[k] = merged[k] + v
        else:
            raise TypeError(
                f"Additional kwargs key {k} already exists in left dict and value has "
                f"unsupported type {type(merged[k])}."
            )

    return merged

修改之后的文件如下,由于修改的是库文件中的代码,所以会有确认提示,在修改了之后在运行上流式输出的代码即可,前提是已经申请成果,且配置好了相关的API-KEY

from __future__ import annotations

from typing import Any, Dict

def merge_dicts(left: Dict[str, Any], right: Dict[str, Any]) -> Dict[str, Any]:
    merged = {'input_tokens': 530, 'output_tokens': 2, 'total_tokens': 532}
    return merged

修复之后

再次运行流式输出,完成。

from langchain_community.llms.tongyi import Tongyi

# 通义获取api key
from dotenv import find_dotenv, load_dotenv
import os
load_dotenv(find_dotenv())
DASHSCOPE_API_KEY = os.environ["DASHSCOPE_API_KEY"]

model = Tongyi(model_name='qwen-max', streaming=True)

for chunk in model.stream("讲一个翠花的故事。"):
    print(chunk, end="", flush=True)

 

标签:elif,LangChain,tokens,Dict,import,二次开发,报错,Any,merged
From: https://www.cnblogs.com/edeny/p/18675006

相关文章

  • 【YashanDB知识库】解压安装包时报错"tar:Error is not recoverable"
    本文内容来自YashanDB官网,原文内容请见https://www.yashandb.com/newsinfo/7919233.html?templateId=1718516现象解压安装时报如下错误:、分析过程1、检查解包命令是否正确tar--help2、查询CPU类型(arm/x86,32bit/64bit)是否与包匹配lscpu3、检查MD5值,md5sum再下载......
  • Bartender SDK C#调用二次开发 代码示例
    说明软件版本:Bartender2022是否支持32位:否SDK类型:Engine类调用(还有另一种风格的SDK,忘记是啥了)引用COM库参考路径:Seagull\BarTender2022\SDK\Assemblies\Seagull.BarTender.Print.dll可能只能用framework4.8跑启动引擎//启动引擎(第一次运行耗时较多)EnginebtEngine=......
  • 【YashanDB知识库】导入数据时报错:YAS-00008 type convert error:literal does not mat
    本文内容来自YashanDB官网,原文内容请见https://www.yashandb.com/newsinfo/7901522.html?templateId=1718516现象将数据通过SQL语气导入崖山时报错:YAS-00008typeconverterror:literaldoesnotmatchformatstring原因插入日期类型的字符串,不是配置参数DATE_FORMAT所指......
  • sqoop export报错Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]
    sqoopexport报错Timestampformatmustbeyyyy-mm-ddhh:mm:ss[.fffffffff]sqoopexport报错如下:Causedby:java.lang.IllegalArgumentException:Timestampformatmustbeyyyy-mm-ddhh:mm:ss[.fffffffff]atjava.sql.Timestamp.valueOf(Timestamp.java:204)atGS......
  • 开源商城系统完整源码售卖 | 终身免费更新 二次开发无忧,支持深度定制
    Tigshop官网:Tigshop官网-开源商城系统Tigshop开源商城系统,支持b2b2c、多商户、多店铺、商家入驻、分销系统、跨境电商、连锁商城等解决方案,免费下载,支持多语言、多端登录,代码开源、独立部署https://www.tigshop.com/Tigshop技术社区:Tigshop-技术社区-开源商城系统Tigsho......
  • 构建本地知识库:基于 LangChain 和 Ollama 的 RAG 实现教程
    构建本地知识库:基于LangChain和Ollama的RAG实现教程简介在这个教程中,我们将学习如何构建一个本地运行的知识库系统,它能够让用户上传PDF或TXT文档,并通过自然语言与文档内容进行交互。这个系统使用了RAG(检索增强生成)技术,结合了LangChain、Ollama和Streamlit......
  • 解决Hyper-V保留端口导致各种端口占用报错的问题
    0.有时候在本地启用一个服务比如MySQL服务,或者在启用IDEA的调试的时候,或者在本地启用一个监听端口的时候可能会出现监听失败的情况,经过查找之后会发现并没有应用占用相应的端口。1.经过查找发现其实是在启用了Hyper-V之后系统会保留一些端口,这些端口如果包含了你应用要使用的端口......
  • 解决 IDEA 编译报错:Error:(2048,1024) java: 找不到符号
    摘要在使用IntelliJIDEA开发Java项目时,“找不到符号”(Cannotfindsymbol)是一种常见的编译错误。本文将从初学者的角度,详细分析这一问题的可能原因,提供排查步骤,并附上代码示例,帮助你快速解决问题。引言“找不到符号”是Java编译器的一种错误提示,通常发生在......
  • linux编译protobuf-3.3.0 报错 automake-1.14 command not found 解决
    目录源码下载配置编译解决REFlinux编译protobuf-3.3.0报错automake-1.14:commandnotfound解决源码下载https://github.com/protocolbuffers/protobuf/releases配置编译配置完成后,编译出错./configuremakecd.&&/bin/bash/tmp/protobuf-3.3.0/miss......
  • sqoop-报错--/usr/local/src/sqoop/../hcatalog does not exist! HCatalog jobs will
    报错展示:解决办法:vi/usr/local/src/sqoop/bin/configure-sqoop##Movedtobearuntimecheckinsqoop.#if[!-d"${HCAT_HOME}"];then#echo"Warning:$HCAT_HOMEdoesnotexist!HCatalogjobswillfail."#echo'Pleaseset$HCAT_H......