说明:调用大模型,并按格式输出。
1 基本信息说明
API Key申请:
- 使用阿里百炼平台:阿里云登录主页
- 注意:申请时需要使用支付宝来验证。
- 首次调用参考文档:首次调用通义千问API-阿里云帮助中心
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: 目前,我主要基于文本进行交互,支持文本输入和输出。对于多模态输入和输出(例如图像、音频、视频等),我暂时不直接支持这些功能。不过,阿里云在多模态领域有专门的产品和技术研发,如果您有相关需求,可以关注阿里云的相关产品更新。