简介: 本章将通过一个简单的例子,让你快速进入到通义千问大模型应用开发的世界。

引言

以前经常使用搜索引擎来解决问题的你,现在大概率已经在工作中频繁使用大模型了。 但是只在网页聊天框中和大模型对话,终究有一些局限性:比如你在本地有一个超大的用户反馈表格、或者是有一些仅内部可访问的网页,想要借助大模型做一系列处理,就不太好做到了。 幸运的是,现在很多大模型服务提供商,都提供了 API 接口,可以让你方便地实现各种原本在网页聊天框中不方便、或无法实现的功能。模型服务灵积 (DashScope)就提供了这样一个便捷的方案。

本章将通过一个简单的例子,让你快速进入到大模型应用开发的世界。

准备工作

安装

下载文档代码及安装依赖项

# 安装依赖
git clone https://github.com/AlibabaCloudDocs/llm_learning.git
cd llm_learning
pip install -r requirements.txt

如果遇到网络问题,GitHub无法使用,可以选择从atomgit来获取代码库

git clone https://atomgit.com/alibabaclouddocs/llm_learning.git
cd llm_learning
pip install -r requirements.txt

账号准备

使用通义千问 API 之前,你需要前往模型服务灵积官网创建 API Key。这样你就可以使用密钥 DASHSCOPE_API_KEY 访问通义千问大模型。

MacOS or Linux

您可以使用以下命令行导入环境变量 请参考MAC 环境变量设置方法

export DASHSCOPE_API_KEY="sk-****"

Windows

可以在终端使用SET命令设置环境变量

set DASHSCOPE_API_KEY=sk-****

或者在PowerShell中使用以下命令行配置环境变量

$Env:DASHSCOPE_API_KEY = "sk-****"

Jupyter Notebook

您可以使用os.environ方法,在代码开头设置临时环境变量。

文本生成实验

通过 langchain_community 库中封装的 Tongyi 工具,我们可以通过灵积API访问通义千问,让通义千问回答问题。

简单文本生成

首先,Tongyi 工具的接口默认是一次性输出全部生成的答案,用户需要等待数秒才能看到完整答案。下面,我们先来看看一次性生成全部答案的代码和执行效果。代码只有三行,如下:

from langchain_community.llms import Tongyi

llm = Tongyi()
print(llm.invoke('奥运会是什么时候创立的?'))

输出内容

奥运会的前身可以追溯到古希腊,当时的奥运会是一种宗教与体育结合的活动,最早记录的古代奥林匹克运动会是在公元前776年。而现代奥运会则是在1896年创立的,由国际奥委会(International Olympic Committee,简称IOC)发起,第一届现代奥运会在希腊雅典举行。此后,奥运会每四年举办一次,除了因为世界大战 而中断过几次之外,一直持续至今。

流式文本生成

采用LangChain封装的接口来实现流式文本生成,我们需要在创建Tongyi对象时声明采用流式输出(streaming=True),然后用一个循环来接收生成的文本,直到生成的文本为空。代码只需4行。

(注意:如果你遇到了 TypeError: Additional kwargs key output_tokens already exists in left dict and value has unsupported type 这个错误,请参考github中的说明)

from langchain_community.llms import Tongyi
llm = Tongyi(streaming=True)
for chunk in llm.stream('为什么要举办奥运会?'):
    print(chunk, end="", flush=True)

输出内容

奥运会的举办有多个原因和目的:

1. **促进国际交流与理解**:奥运会是一个全球性的体育盛事,来自世界各地的运动员齐聚一堂,不仅能够增进不同国家和地区之间的了解与友谊,还能促进文化的交流。

2. **弘扬奥林匹克精神**:奥林匹克精神强调的是公平竞争、尊重对手以及追求卓越。通过奥运会的举办,可以向全世界传达这些积极的价值观。

3. **推动体育事业发展**:奥运会的举办能够激发人们对体育运动的热情,鼓励更多人参与到体育活动中来,从而促进整个社会体育事业的发展。

4. **经济与社会发展**:举办奥运会需要建设或改造大量的体育设施和其他基础设施,这不仅能够为当地创造就业机会,带动相关产业的发展,还能够在一定程度上提升城市的整体形象和发展水平。

5. **展示国家实力与文化**:奥运会为东道国提供了一个向世界展示自身文化、历史和发展成就的重要平台,有助于提升国家的国际影响力。

总之,奥运会不仅是体育竞技的盛会,也是文化交流、经济发展和社会进步的重要契机。

封装成文件来访问通义千问

我们将上述两端代码功能封装进文件,读者可以直接调用文件来实现与大模型的对话。

批量输出

python main_simple.py "奥运会是什么时候创立的?"

输出内容

奥运会的前身可以追溯到古希腊,当时的奥运会是一种宗教与体育结合的活动,最早记录的古代奥林匹克运动会是在公元前776年。而现代奥运会则是在1896年创立的,由国际奥委会(International Olympic Committee,简称IOC)发起,第一届现代奥运会在希腊雅典举行。此后,奥运会每四年举办一次,除了因为世界大战 而中断过几次之外,一直持续至今。

流式输出

python main_stream.py "为什么要举办奥运会?"

输出内容

奥运会的举办有多个原因和目的:

1. **促进国际交流与理解**:奥运会是一个全球性的体育盛事,来自世界各地的运动员齐聚一堂,不仅能够增进不同国家和地区之间的了解与友谊,还能促进文化的交流。

2. **弘扬奥林匹克精神**:奥林匹克精神强调的是公平竞争、尊重对手以及追求卓越。通过奥运会的举办,可以向全世界传达这些积极的价值观。

3. **推动体育事业发展**:奥运会的举办能够激发人们对体育运动的热情,鼓励更多人参与到体育活动中来,从而促进整个社会体育事业的发展。

4. **经济与社会发展**:举办奥运会需要建设或改造大量的体育设施和其他基础设施,这不仅能够为当地创造就业机会,带动相关产业的发展,还能够在一定程度上提升城市的整体形象和发展水平。

5. **展示国家实力与文化**:奥运会为东道国提供了一个向世界展示自身文化、历史和发展成就的重要平台,有助于提升国家的国际影响力。

总之,奥运会不仅是体育竞技的盛会,也是文化交流、经济发展和社会进步的重要契机。

总结

通过本章的学习,你已经获得了两个与大模型对话聊天的命令行工具!你不仅已经了解了如何使用通义千问的 API,如何流式输出大模型返回的结果,并在本地运行了示例代码。 在开始下一章的学习之前,你也可以尝试调整 prompt 语句,让通义千问回答不同的问题。或者将这段代码集成到其他更复杂的场景中,来帮助你完成任务,比如从一个本地 excel 文件中逐行读取问题,并对其做出回答。

参考资料

, ,
轩源的网络日志微信公众号:源码跳动
微信公众号: 源码跳动
轩源和他的朋友们②群0914
更多技术讨论加微信群

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注