langchain中llms.Tongyi 这个模型具体调用的是哪个通义模型

想知道langchain中模型调用通义api的具体实现,以及如何切换不同的dashscope模型

展开
收起
nullskymc 2024-01-26 16:57:09 356 分享 版权
阿里云 AI 助理回答

在LangChain中调用通义千问API的具体实现,以及如何切换不同的DashScope模型,可以通过以下步骤完成。以下是详细的实现方法和操作指南:


1. 前提条件

在开始之前,请确保满足以下条件: - 已安装Python环境。 - 安装了必要的依赖库,例如langchain_openailangchain-community。 - 开通了阿里云百炼模型服务,并获取了API-KEY。 - 推荐将API-KEY配置到环境变量中,以降低泄露风险。


2. 使用langchain_openai SDK调用通义千问API

2.1 非流式输出

非流式输出通过invoke方法实现,适用于一次性获取完整响应的场景。以下是具体代码示例:

from langchain_openai import ChatOpenAI
import os

def get_response():
    llm = ChatOpenAI(
        api_key=os.getenv("DASHSCOPE_API_KEY"),  # 如果未配置环境变量,请替换为实际API-KEY
        base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",  # DashScope兼容模式URL
        model="qwen-plus"  # 指定使用的模型名称
    )
    messages = [
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "你是谁?"}
    ]
    response = llm.invoke(messages)
    print(response.json())

if __name__ == "__main__":
    get_response()

说明: - model参数用于指定调用的模型,例如qwen-plusqwen-max等。 - 可根据需求切换不同的模型,支持的模型列表请参考官方文档。


2.2 流式输出

流式输出通过stream方法实现,适用于需要逐步接收响应内容的场景。以下是具体代码示例:

from langchain_openai import ChatOpenAI
import os

def get_response():
    llm = ChatOpenAI(
        api_key=os.getenv("DASHSCOPE_API_KEY"),  # 如果未配置环境变量,请替换为实际API-KEY
        base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",  # DashScope兼容模式URL
        model="qwen-plus",  # 指定使用的模型名称
        stream_options={"include_usage": True}  # 在最后一行展示token使用信息
    )
    messages = [
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "你是谁?"}
    ]
    response = llm.stream(messages)
    for chunk in response:
        print(chunk.model_dump_json())

if __name__ == "__main__":
    get_response()

说明: - 流式输出无需额外设置stream=True,直接调用stream方法即可。 - stream_options参数可选,用于控制是否在流式输出的最后一行显示token使用信息。


3. 使用langchain-community调用通义千问API

3.1 调用文本生成模型

通过ChatTongyi类调用通义千问模型,支持所有DashScope文本生成模型。以下是具体代码示例:

from langchain_community.chat_models.tongyi import ChatTongyi
from langchain_core.messages import HumanMessage

chatLLM = ChatTongyi(
    model="qwen-max",  # 指定使用的模型名称
    streaming=True  # 是否启用流式输出
)
res = chatLLM.stream([HumanMessage(content="hi")], streaming=True)
for r in res:
    print("chat resp:", r.content)

说明: - model参数用于指定调用的模型,例如qwen-maxqwen-plus等。 - streaming=True表示启用流式输出,若不需要流式输出,可将其设置为False


3.2 调用多模态模型

对于视觉或多模态任务,可以使用类似的方式调用通义千问视觉模型(如qwen-vl-plus)。以下是具体代码示例:

from langchain_openai import ChatOpenAI
import os

def get_response():
    llm = ChatOpenAI(
        api_key=os.getenv("DASHSCOPE_API_KEY"),  # 如果未配置环境变量,请替换为实际API-KEY
        base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",  # DashScope兼容模式URL
        model="qwen-vl-plus"  # 指定使用的视觉模型名称
    )
    messages = [
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "这是什么"},
                {
                    "type": "image_url",
                    "image_url": {
                        "url": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/dog_and_girl.jpeg"
                    }
                }
            ]
        }
    ]
    response = llm.invoke(messages)
    print(response.json())

if __name__ == "__main__":
    get_response()

说明: - model参数需指定为支持的视觉模型,例如qwen-vl-plus。 - messages中的content字段支持混合输入(文本+图片),适用于多模态任务。


4. 切换不同的DashScope模型

在上述代码中,切换不同模型的关键在于修改model参数。例如: - 文本生成模型:qwen-plusqwen-max。 - 视觉模型:qwen-vl-plus

注意事项: - 确保所选模型已开通并支持当前调用方式。 - 不同模型可能具有不同的输入输出限制和计费规则,请参考官方文档确认。


5. 总结

通过langchain_openailangchain-community,您可以灵活调用通义千问系列模型,并根据需求切换不同的DashScope模型。无论是文本生成还是多模态任务,均提供了非流式和流式两种输出方式,满足多样化的应用场景。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答

包含命名实体识别、文本分类、分词、关系抽取、问答、推理、文本摘要、情感分析、机器翻译等多个领域

热门讨论

热门文章

还有其他疑问?
咨询AI助理