本案例编号:0001
>本案例知识点:变量、字符串、字典、input()函数
>如果你已经按照上一篇文章的指引,在电脑上安装了Anaconda和Jupyter Notebook,并成功调用了DeepSeek的API,那么,接下来我们就可以一起愉快地玩耍了。此后,本公众号的一切实用案例,将以之为基础,没有做好准备的朋友,请先回看前文。
下面开始今天的内容。
##1.问题预设
先问个问题:如果你经常使用大语言模型,有没有比较固定的应用场景?
我猜你有。
也许你常把他用作翻译器。一会儿你让他翻译:“急急如律令”,一会儿又让他翻译:“红红火火恍恍惚惚”,一会儿再让他翻译:“东风夜放花千树”......
如此这般,他一点儿也不累,你倒有可能累得够呛。
因为你每次都需要重复输入一遍相同的提示词!
如果你特别讲究,默念起江湖上流传的提示词秘诀,一板一眼地把“角色、背景、任务、目标”等都写进提示词,一次次地重复,那叫一个烦。
即便删繁就简,也总得交代清楚具体任务吧,诸如“请把以下文字翻译为英语:...”这般简单的命令,重复多了,也让人头疼手抖眼晕。
其他固定场景也同样如此。
上诉问题产生的原因是,DeepSeek等大模型是万用的,他为各种任务而生,你给他材料的同时必须告诉他是做哪一种任务,他才有可能完成。
有没有解决办法?
有。调用大模型的API,将万用变为专用,固定下来,反复使用。比如,让他只做翻译专员,那么喂份材料给他,他就自动生成译文;让他只做通讯专员,喂封邮件给他,他就自动写出回复文稿......不必重复输入任何提示词!
怎么做到?几行Python代码就可以实现。
##2.解决办法
直接上代码:
from openai import OpenAI
# 初始化 OpenAI 客户端,用你自己的API密钥替换掉your-api-key-here,引号保留
client = OpenAI(api_key="your-api-key-here", base_url="https://api.deepseek.com") # 替换为你的 API 密钥
while True:
text = input("汉译英—请输入要翻译的文字(输入 'quit' 退出): ")
# 检查用户是否想退出
if text == 'quit':
print("程序退出。")
break
# 调用 OpenAI 的 Chat Completions API 进行翻译
response = client.chat.completions.create(
model="deepseek-chat", # 注意原代码这里是gpt-4,国内无法运行,改为deepseek
messages=[
{"role": "system", "content": "You are a helpful assistant that translates text to English."},
{"role": "user", "content": f"Translate the following text to English: {text}"}
]
)
# 提取并返回翻译后的文本
translation = response.choices[0].message.content
# 输出翻译结果
print("汉英翻译结果: ", translation)
以上代码不用直接写,让deepseek代劳就行,我在deepseek官网窗口输入了以下提示词:
>你是一位资深程序员,请按以下要求编写一个python脚本:1.使用input函数,设置一个对话框,供用户输入文字材料;2.通过 openai 库调用 deepseek-chat 的 API,把用户输入的文字材料翻译为英语;3.返回英语译文;4.用户输入quit时退出程序
注意:本提示词自动生成的代码不能直接运行,需要一定的改动。由于deepseek采用了OpenAI的旧版调用格式,现在OpenAI的调用方法已经更新,deepseek生成的还是旧格式,所以直接运行会报错。如果你能优化提示词,生成出直接运行的代码,欢迎留言分享。
##3.运行代码
打开jupyter,新建一个文件夹并命名,这里姑且命名为“ai学ai用”(图1),以后本教程的案例代码都统一放进该文件夹中。
图1.新建文件夹并命名
双击打开文件夹,如图2所示,在该文件夹下新建一个python编辑页,命名为“case0001-汉译英对话框”,把以上代码复制粘贴到新编辑页的空白框中,然后点击“运行”,即可在代码编辑框下方出现一个对话框,在对话框中输入你需要翻译的汉语文字,再点击键盘上的回车键('Enter'键),稍等即可出现结果(图3)。
图2.测试代码
翻译结果出来后,如果想继续翻译其他任务,可以继续在下方的对话框中输入文字,然后再敲击键盘上的‘Enter’键,稍等就会有新任务的翻译结果。所有任务完成后,如果想退出,请在框中输入'quit',再点击键盘上的'Enter'键,即可退出(图3)。
图3.退出程序的方法
至此,我们专用的汉英翻译助手成功诞生!以后只要你做汉译英任务,直接把汉语粘贴到那个对话框里,点击一下回车就可以了!
##4.举一反三
有的同学说,老师,我并不总是做汉译英,我还经常做英译汉呢!好办,你再新建一个代码编辑页,命名为“英译汉对话框”,把前面的代码原样粘贴进去,再改改提示词,让他做英译汉任务就可以了。需要修改的提示词是这一行:
{"role": "user", "content": f"Translate the following text to English: {text}"}
单看这一行,它总体上是个字典(dictionary)类型的数据。python的字典数据有以下特征:
1)数据用大括号{}包裹;
2)字典中的元素由“键值”对的形式构成:键在前,值在后;键与值之间用半角的冒号隔开;键和值如果是字符串(string),需要加引号;
如"role": "user",其中"role"是键,"user"是值,二者间用冒号隔开,二者都是字符串,都加了引号。
3)字典中多个元素之间,用逗号间隔。如本例中"content"前的逗号。
需要修改的提示词就是"content"键下所对应的值,即:
f"Translate the following text to English: {text}"
只要把"Translate the following text to English..."中的"English"改为"Chinese"即可。
当然,最好还能改一下对话框边的说明文字,即此处:
text = input("汉译英—请输入要翻译的文字(输入 'quit' 退出): ")
把“汉译英”改为“英译汉”就可以了:
text = input("英译汉—请输入要翻译的文字(输入 'quit' 退出): ")
其他不动,我们专用的英汉翻译助手也成功诞生了!其他功能,如发邮件、改论文等,也是改改提示词和对话框说明文字就可以了。
##5.可能发生的问题
在执行翻译任务时,本来应该点击回车键的时候,如果习惯性地点击“运行”,就会出错(等很久不出结果,甚至报错。图4中红圈处的梅花*标记,说明程序还在运行),此时,可以点击图4中Jupyter导航栏上的黑色方块,即可强行终止程序。然后再次点击运行,就又恢复了。
图4.强行终止程序并恢复运行的方法
##6.本案例知识点
为了配合本次课程的知识点,实现由易到难的渐进过程,本案例所用代码专门经过简化。本案例主要讲解两大知识点:变量和数据类型
###1)变量
在Python中,变量是用来存储数据的容器。你可以把变量想象成一个标签或名字,它指向某个存储在计算机内存中的数据。
举个例子:
x = 10
这里,x 是一个变量,它存储了数字 10。在Python中,这个等号=不是‘等于’的意思,它的意思是‘赋值’,即给x赋值为10。
你可以把 x 想象成一个盒子,盒子里放了数字 10。
变量的特点:
(1)可以改变:变量的值是可以改变的。
(2)可以存储不同类型的数据:变量可以存储数字、文本、列表等。
-
(3)变量命名规则:
-
变量名只能包含字母、数字和下划线(
_
)。 -
变量名不能以数字开头。
-
变量名是区分大小写的(
age
和Age
是两个不同的变量)。
-
回到本案例中来,本案例中的以下代码就是给变量命名+赋值:
text = input("汉译英—请输入要翻译的文字(输入 'quit' 退出): ")
text是变量名,变量是一种数据类型,不同于字符串,不用加引号;等号表示赋值,input()是python的内置函数,向用户提供对话框,用于接纳用户的输入数据。input()括号中的内容,如果是引导用户填写对话框的说明文字,就是字符串,需要用引号引起来。
本行代码的意思是:用对话框的内容向变量text赋值。
由此,我们可以看出“变量”顾名思义就是“能够变化的量”,用户往框里输入的内容是不断变化的的,用变量来承接这些内容,就可以适应这种变化。
变量是Python的一种数据类型,变量名不能加引号,以示与字符串区分,如果加了引号,则会被视为字符串。这时,就产生了一个问题:如果变量需要用在字符串中怎么办?本案例的代码就有这种情况:
f"Translate the following text to English: {text}"
该行代码的主体是我们设置的大模型提示词,提示词是字符串,所以总体用引号。
第一个“text”:“the following text"中的"text"是提示词的一部分,也是字符串,受引号直接管辖;
第二个“text”:用大括号括住的“text”,是来自对话框的内容,是变量,用大括号包裹以示区别。此外,该大括号必须与本行最开始的f配合使用,这个 f 是字符串格式化标记,使用这种标记可以在字符串中直接插入变量或表达式,当然这些变量或表达式需要用大括号包裹起来。
###2)python的主要数据类型一览
数据类型 | 例子 | 特点 |
---|---|---|
整数 | 10 , | 整数值 |
浮点数 | 3.14 , | 带小数点的数 |
字符串 | "你好" , | 文本数据 |
布尔值 | True , | 真或假 |
列表 | [1, 2, 3] | 有序、可变 |
元组 | (1, 2, 3) | 有序、不可变 |
集合 | {1, 2, 3} | 无序、不重复 |
字典 | {"name": "小明", "age": 18} | 键值对 |
空值 | None | 表示没有值 |
##7.课后练习
1.请修改本次案例,做一个自动回复邮件的通讯助手。
2.请理解、识记以下概念:
变量、字符串、字典