[AI 执行域] langchain笔记01 调用大模型(阿里千问模型)

说明:调用大模型,并按格式输出。


1 基本信息说明

API Key申请:

tokens额度说明:

  • 新用注册户通常赠送 100万Tokens(有效期1个月)
  • 调用时报 403 Insufficient Balance?说明免费额度已用完且未购买付费套餐

  • 历史数据查询:阿里云登录主页   (查看费用和成本即可)

环境说明:

  • 使用编辑器:VS Code
  • 建立文件夹:langchain/D1
  • 建立文件:main.py 和 .env

代码功能说明:

  • 使用阿里千问模型,以及申请的APIKEY来调用阿里的大模型。
  • 输出模式有2种,一种是一次性输出全部回答内容,另一种是实时输出大模型的回答。
  • 输出时仅包含内容,不包含其他的返回字段,其他字段需过滤。

安装环境(为了省事儿,一次性全安装上,如果pip无效,则使用pip3):

$pip install -U openai dashscope python-dotenv requests 
$pip install 'langchain[all]'  langchain-openai langchain==0.2 langserve  langchain_community langchain_chroma langgraph youtube-transcript-api

2 程序实现

先配置 .env文件,如下所示:

# .env

DASHSCOPE_API_KEY=sk-XXXXXXXXXXXXXXXXX
QWEN_MODEL_NAME=qwen-turbo-2025

2.1 方案1 基于官方demo修正

编写module_base.py,代码如下:

import os
from openai import OpenAI
from dotenv import load_dotenv

# 加载环境变量(自动查找当前目录下的.env文件)
load_dotenv() 

def main(mode='full'):
    client = OpenAI(
        # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx",
        api_key=os.getenv("DASHSCOPE_API_KEY"),
        base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
    )

    completion = client.chat.completions.create(
        model="qwen-omni-turbo",
        messages=[{"role": "user", "content": "你目前支持多模态输入和输出吗?"}],
        # 设置输出数据的模态,当前仅支持["text"]
        modalities=["text"],
        # 注意:stream 必须设置为 True,否则会报错
        stream=True,
        stream_options={"include_usage": True},
    )

    #输出模式处理
    full_content = []
    if mode != 'full':
        print(f"realtime mode:\n")
    
    for chunk in completion:
        try:
            if chunk.choices:
                delta = chunk.choices[0].delta
                content = (delta.content or "").strip()
                if mode == 'full':
                    full_content.append(content)
                else:
                    print(content, end="", flush=True)
            else:
                print('\n')
        except Exception as e:
             print(f"处理分块时出错: {str(e)}")
    
    if mode == 'full':
        clean_content = "".join(full_content).replace("  ", " ")
        print(f"full mode:\n", clean_content)

if __name__ == "__main__":

    # 通过命令行参数选择模式
    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument('--mode', choices=['full', 'realtime'], default='full')
    args = parser.parse_args()
    
    #选择模式不同,输出方式也不同
    main(mode=args.mode)

默认模式或者 使用full mode输出,执行和输出如下:

$python3 module_base.py
或
$python3 module_base.py --mode full

full mode:
 我是一个大型语言模型,我的目标是尽可能准确和有帮助地回答用户的问题。我可以生成各种类型的文本,包括文章、故事、诗歌等,并且可以根据不同的主题和风格进行调整。同时,我也能够理解和处理自然语言,从而与用户进行有效的交流和互动。

默认模式或者 使用realtime mode输出,执行和输出如下:

$python3 module_base.py --mode realtime
realtime mode:

我是一个大型语言模型,我的目标是尽可能准确和有帮助地回答用户的问题。我可以生成各种类型的文本,包括文章、故事、诗歌等,并且可以根据不同的主题和风格进行调整。同时,我也能够理解和处理自然语言,从而与用户进行有效的交流和互动。

不同之处在于:前者是直接一次型输出,而后者是 一组token 一组token输出。

2.2 方案2,基于langchain

编写module_base2.py,代码如下:

import os
from dotenv import load_dotenv
from langchain_community.llms import Tongyi
from langchain.chains import LLMChain
from langchain_core.prompts import PromptTemplate

# 加载环境变量(自动查找当前目录下的.env文件)
load_dotenv() 

#llm初始化
question = "你目前支持多模态输入和输出吗?"
Tongyi().invoke(question)  
llm = Tongyi(dashscope_api_key=os.getenv("DASHSCOPE_API_KEY"))
llm=Tongyi(model_name="qwen-plus",temperature=0.1)

#prompt template提示词设置
template = """Question: {question}
"""
prompt = PromptTemplate.from_template(template)

#chain操作
chain = prompt | llm
response = chain.invoke({"question": question})
print("Answer:", response)

该方式使用默认模式输出,执行和输出如下:

$python3 model_base2.py 
Answer: 目前,我主要基于文本进行交互,支持文本输入和输出。对于多模态输入和输出(例如图像、音频、视频等),我暂时不直接支持这些功能。不过,阿里云在多模态领域有专门的产品和技术研发,如果您有相关需求,可以关注阿里云的相关产品更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

图王大胜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值