前几天分享了 实验 | 使用本地大模型从文本中提取结构化信息 ,今天实验一个成功率更高的使用场景,生成单词书教案PDF。

一、任务描述

假设你是英语老师,你希望在单词书中增加历史文化方面的信息, 市面上的单词书并不能很好的满足你的需要。针对这一需求, 我们可以利用大模型,定制你的单词书教案。例如单词 abandon



二、准备工作

2.1 安装ollama

点击前往网站 https://ollama.com/ ,下载ollama软件,支持win、Mac、linux


2.2 下载LLM

ollama软件目前支持多种大模型, 如阿里的(qwen、qwen2)、meta的(llama3),


以llama3为例,根据自己电脑显存性能, 选择适宜的版本。如果不知道选什么,那就试着安装,不合适不能用再删除即可。


打开电脑命令行cmd(mac是terminal), 网络是连网状态,执行模型下载(安装)命令

ollama pull llama3

等待 llama3:8b 下载完成。


2.3 安装python包

在python中调用ollama服务,需要ollama包。

打开电脑命令行cmd(mac是terminal), 网络是连网状态,执行安装命令

pip3 install ollama

2.4 启动ollama服务

在Python中调用本地ollama服务,需要先启动本地ollama服务, 打开电脑命令行cmd(mac是terminal), 执行

ollama serve

Run

2024/06/14 14:52:24 routes.go:1011: INFO server config env="map[OLLAMA_DEBUG:false OLLAMA_FLASH_ATTENTION:false OLLAMA_HOST:http://127.0.0.1:11434 OLLAMA_KEEP_ALIVE: OLLAMA_LLM_LIBRARY: OLLAMA_MAX_LOADED_MODELS:1 OLLAMA_MAX_QUEUE:512 OLLAMA_MAX_VRAM:0 OLLAMA_MODELS:/Users/deng/.ollama/models OLLAMA_NOHISTORY:false OLLAMA_NOPRUNE:false OLLAMA_NUM_PARALLEL:1 OLLAMA_ORIGINS:[http://localhost https://localhost http://localhost:* https://localhost:* http://127.0.0.1 https://127.0.0.1 http://127.0.0.1:* https://127.0.0.1:* http://0.0.0.0 https://0.0.0.0 http://0.0.0.0:* https://0.0.0.0:* app://* file://* tauri://*] OLLAMA_RUNNERS_DIR: OLLAMA_TMPDIR:]"
time=2024-06-14T14:52:24.742+08:00 level=INFO source=images.go:725 msg="total blobs: 18"
time=2024-06-14T14:52:24.742+08:00 level=INFO source=images.go:732 msg="total unused blobs removed: 0"
time=2024-06-14T14:52:24.743+08:00 level=INFO source=routes.go:1057 msg="Listening on 127.0.0.1:11434 (version 0.1.44)"
time=2024-06-14T14:52:24.744+08:00 level=INFO source=payload.go:30 msg="extracting embedded files" dir=/var/folders/y0/4gqxky0s2t94x1c1qhlwr6100000gn/T/ollama4239159529/runners
time=2024-06-14T14:52:24.772+08:00 level=INFO source=payload.go:44 msg="Dynamic LLM libraries [metal]"
time=2024-06-14T14:52:24.796+08:00 level=INFO source=types.go:71 msg="inference compute" id=0 library=metal compute="" driver=0.0 name="" total="72.0 GiB" available="72.0 GiB"

cmd(mac是terminal)看到如上的信息,说明本地ollama服务已开启。



三、实验

3.1 读取词表

假设你需要背 *words.csv* 中的单词,

import pandas as pd

df = pd.read_csv('words.csv')
df


3.2 小实验

以单词march为例

import ollama



def diy_dictionary(word):
    response = ollama.chat(model='llama3:8b', messages=[
          {
            'role': 'user',
            'content': f"""
                你是一名中英文双语教育专家,拥有帮助将中文视为母语的用户理解和记忆英语单词的专长,请根据用户提供的英语单词{word}完成任务。
                
                # {word}
                [美式音标]
                
                ## 语义
                - 系统地分析用户提供的单词,并以简单易懂的方式解答;
                
                ## 例句
                - 为该单词提供至少 3 个不同场景下的使用方法和例句。并且附上中文翻译,以帮助用户更深入地理解单词意义。其中英文例句加粗斜体!
                
                ## 历史文化
                - 详细介绍单词的造词来源和发展历史,以及在欧美文化中的内涵
                
                ## 相关单词
                - 列出单词对应的名词、单复数、动词、不同时态、形容词、副词等的变形以及对应的中文翻译。
               
                ## 词组搭配
                - 列出单词对应的固定搭配、组词以及对应的中文翻译。


                注意: 如非特别说明尽量用中文,结果返回markdown格式; 均为二级标题##, 无序列表用-而不是*。
                 
                请根据单词{word}制作内容
                """,
          
        },
        ])

    result = response['message']['content']
    return result


print(diy_dictionary(word = 'march'))

Run

# March
[美式音标] /mɑːrtʃ/

## 语义
march 是一種动詞,主要表达走路、行军或進行某种活动的意思。在日常生活中,march 可以用来描述人们的步伐、进军或进行一些形式上的活动。

## 例句
- **_I'll march to the store to pick up some milk._** 我将去超market购买牛奶。
- _The soldiers marched across the border._ 军队跨越边境行进。
- _March is one of my favorite months because of the spring weather._ 三月是我最喜欢的月份,因为春天气候很好。

## 历史文化
march 的词源来自Old French "_marcher_",表示「walk」或「go」。在中世纪,march 表示军队进军或进行某种活动。在英语语境中,march 通常与spring、summer、autumn、winter 等四季相关联。

## 相关单词
- 名词:March (一月份的名称)、march (行军、步伐)
	+ Plural:marches
- 单复数:
	+ March (动詞): march, marched
	+ March (名詞): march, marches
- 动词:
	+ Present tense: march
	+ Past tense: marched
	+ Past participle: marched
- 不同时态:
	+ Future tense: will march
	+ Conditional tense: would march
- 形容词:marching (进行某种活动的)
- 副词:on foot (徒步)、by foot (徒步)

## 词组搭配
- **_take a march_**:徒步旅行
- **_go on a march_**:进行军事演习或行军
- **_in step with the march_**:与某种活动保持同步

3.3 批量生成

%%time

import csv
import ollama
import pandas as pd

def diy_dictionary(word):
    response = ollama.chat(model='llama3:8b', messages=[
          {
            'role': 'user',
            'content': f"""
                你是一名中英文双语教育专家,拥有帮助将中文视为母语的用户理解和记忆英语单词的专长,请根据用户提供的英语单词{word}完成任务。
                
                # {word}
                [美式音标]
                
                ## 语义
                - 系统地分析用户提供的单词,并以简单易懂的方式解答;
                
                ## 例句
                - 为该单词提供至少 3 个不同场景下的使用方法和例句。并且附上中文翻译,以帮助用户更深入地理解单词意义。其中英文例句加粗斜体!
                
                ## 历史文化
                - 详细介绍单词的造词来源和发展历史,以及在欧美文化中的内涵
                
                ## 相关单词
                - 列出单词对应的名词、单复数、动词、不同时态、形容词、副词等的变形以及对应的中文翻译。
               
                ## 词组搭配
                - 列出单词对应的固定搭配、组词以及对应的中文翻译。


                注意: 如非特别说明尽量用中文,结果返回markdown格式; 均为二级标题##, 无序列表用-而不是*。
                 
                请根据单词{word}制作内容
                """}
    ])

    result = response['message']['content']
    return result
  
  
#读取词表
df = pd.read_csv('words.csv')
df['Dictionary'] = df['Word'].apply(diy_dictionary)

#保存成csv和md
df.to_csv('word-dictionary.csv', index=False)
with open('Your-Diy-Dictionary.md', 'w', encoding='utf-8') as mdf:
    mdf.write('<br><br>\n'.join(df['Dictionary']))

df


3.4 生成单词书

3.4.1 选择主题

打开 Typora(一种markdown软件), 选择一种自己喜欢的 主题Theme


3.4.2 导出pdf

依次文件–>导出–>PDF或HTML



四、讨论

在本文中,我们展示了利用ollama制作单词书教案,实际上各位可以结合自身学习工作需要, 开发更多的应用场景。如果这份利用 ollama 自制教案对你有帮助,欢迎转发分享给你的朋友。



精选内容