现在AI总是被人谈论,大家是否已经开始在工作中应用了呢?一直想做一个帮自己背单词的软件,之前苦于没有词库,现在有了Ollama里本地的大语言模型,作为知识库,把它和自定义的程序相连,就可以实现很多种类的应用,我想做的背单词小程序也可以很容易实现了。这篇文章我就来演示一下如何在Python中从Ollama中得到数据,视频课程已先一步在我的视频号「退役程序员」中发布,这里是作为对应视频的补充、重要知识点的讲解和源代码分享,欢迎大家关注。
安装Ollama访问Ollama的官网ollama.com下载安装,安装后在命令行运行或安装模型llama3.1
ollamarunllama3.1
安装Python访问Python的官网www.python.org下载安装
使用pip命令安装所需包
pip install ollama
在和AI交流时,给出详尽的指令或提示词至关重要,直接影响到AI反馈回来的信息。目前我还是习惯于用英文给出提示词(即使我的英语很破碎),一是目前有些平台中文支持的不是很好(如果用中文的可以试试阿里云通义千问大模型qwen2),一是可以练习下英语也是不错的机会。环境准备完后,我先在Ollama的环境中输入了下面的英文来测试一下是否可以得到我想要的英文翻译,这里我希望将输入的英文单词peace翻译成中文,并且提供该单词的英文解释、读音以及3个例句:
Translate an English word to Chinese, and provide the definition of the word in English. Including the word's pronunciation, and three example sentances. The English word is:peace
用ollama库实现从Python中获得AI返回信息
在Ollama环境下测试好要给AI的Prompt提示词后,我们来看用到的代码。首先访问下面的网址,其中已经给出了Python脚本的示例:
https://ollama.com/blog/python-javascript-libraries
1import ollama2response = ollama.chat(model='llama2', messages=[3 {4'role': 'user',5'content': 'Why is the sky blue?',6 },7])8print(response['message']['content'])
其中代码的含义为:
1. response = ollama.chat(…):
ollama.chat:这是 ollama 库中用于发起对话的函数。通过这个函数,我们可以向模型发送提示词或指令,并获取模型生成的文本。
model='llama2':指定了使用的语言模型是 llama2。我们使用的是llama3.1,需要在这里进行更改。
messages=[…]:这是一个列表,包含了想发送给模型的所有消息。在这个例子中,我们只发送了一条消息。
{'role': 'user', 'content': '…'}:这表示一条消息。
'role': 'user':表示这条消息是由用户发送的。
'content': '…':包含了要让模型执行的指令,之后我们要替换其中内容为之前测试了的自定义Prompt。
2. res = response['message']['content']:
response:包含了模型生成的所有响应。
response['message']:获取到包含模型回复的消息部分。
response['message']['content']:提取出消息中的文本内容。
在本视频课程中我希望实现的效果是循环让用户输入英文单词直到输入stop退出,因此在样例的基础上添加了无限循环While True,并判断如果接到的输入是stop则推出循环。
因为每次对ollama发起对话中的单词都不一样,因此,在将测试好的Prompt替代'content'的值时,还应修改最后的单词为接收到的字符串变量word
1import ollama 2 3whileTrue: 4 word = input("Enter a English word(or 'stop' to quit):") 5if word.lower() == "stop": 6break 7 response = ollama.chat(model='llama3.1', messages=[ 8 { 9'role': 'user',10'content': f'Translate an English word to Chinese, and provide the definition of the word in English. Including the word\'s pronunciation, and three example sentances. The English word is:{word}',11 },12 ])13 res = response['message']['content']14 if res:15 print(res)16 else:17 print("No response")18
执行上述脚本时系统需要等待服务器处理完所有请求,然后才返回完整的响应,我们在终端看到的效果单词输入后等待了一段时间之后,系统一次性把返回结果打在了屏幕上,如果想实时地获取模型生成的文本片段,可以在ollama.chat()中通过设置stream=True,,然后用for循环逐步将生成的响应打印出来
1import ollama 2 3whileTrue: 4 word = input("Enter a English word(or 'stop' to quit):") 5if word.lower() == "stop": 6break 7 response = ollama.chat(model='llama3.1', messages=[ 8 { 9'role': 'user',10'content': f'Translate an English word to Chinese, and provide the definition of the word in English. Including the word\'s pronunciation, and three example sentances. The English word is:{word}',11 },12 ],stream=True,)1314 for chunk in response:15 print(chunk['message']['content'], end='', flush=True)16
本节课只是简单的实现了输入英文单词,返回翻译信息的应用,并未对用户输入的内容作出限制和校验看输入内容是否为单词,另外我发现用llama3.1这个模型返回的中文结果准确率偏低,未来可考虑尝试其他模型。为了让这个应用更实用,我们可以要求 AI 返回 JSON 格式的翻译结果。JSON 格式的数据方便计算机处理,通过编写程序将这些 JSON 数据提取并保存到本地,这样一来,这个简单的翻译应用就变成了一个迷你版的生词本。有了这些生词数据,我们还可以进一步开发一个背单词的小程序来高效学习英语。我已经开始动手做了,大家也开始行动吧!