想知道langchain中模型调用通义api的具体实现,以及如何切换不同的dashscope模型
在LangChain中调用通义千问API的具体实现,以及如何切换不同的DashScope模型,可以通过以下步骤完成。以下是详细的实现方法和操作指南:
在开始之前,请确保满足以下条件: - 已安装Python环境。 - 安装了必要的依赖库,例如langchain_openai
或langchain-community
。 - 开通了阿里云百炼模型服务,并获取了API-KEY。 - 推荐将API-KEY配置到环境变量中,以降低泄露风险。
langchain_openai
SDK调用通义千问API非流式输出通过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-plus
、qwen-max
等。 - 可根据需求切换不同的模型,支持的模型列表请参考官方文档。
流式输出通过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使用信息。
langchain-community
调用通义千问API通过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-max
、qwen-plus
等。 - streaming=True
表示启用流式输出,若不需要流式输出,可将其设置为False
。
对于视觉或多模态任务,可以使用类似的方式调用通义千问视觉模型(如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
字段支持混合输入(文本+图片),适用于多模态任务。
在上述代码中,切换不同模型的关键在于修改model
参数。例如: - 文本生成模型:qwen-plus
、qwen-max
。 - 视觉模型:qwen-vl-plus
。
注意事项: - 确保所选模型已开通并支持当前调用方式。 - 不同模型可能具有不同的输入输出限制和计费规则,请参考官方文档确认。
通过langchain_openai
或langchain-community
,您可以灵活调用通义千问系列模型,并根据需求切换不同的DashScope模型。无论是文本生成还是多模态任务,均提供了非流式和流式两种输出方式,满足多样化的应用场景。