当前位置: 首页 > article >正文

本地大模型编程实战(01)实现翻译功能

这里写自定义目录标题

    • 准备
    • 使用本地大语言模型
    • 翻译测试
    • 流式输出
    • 提示词模板
    • 代码

大语言模型的主要功能是预测:输入一些字符串,它预测输出另一些字符串,这个特点使它擅长翻译。

本文描述了如何使用大语言模型(LLM)实现基本的翻译功能,此翻译功能的特点是:无需指定源语言,只需要指定目标语言就可以进行翻译了

准备

在正式开始撸代码之前,需要准备一下编程环境。

  1. 计算机
    本文涉及的所有代码可以在没有显存的环境中执行。 我使用的机器配置为:

    • CPU: Intel i5-8400 2.80GHz
    • 内存: 16GB
  2. Visual Studio Code 和 venv
    这是很受欢迎的开发工具,相关文章的代码可以在 Visual Studio Code 中开发和调试。 我们用 pythonvenv 创建虚拟环境, 详见:
    在Visual Studio Code中配置venv。

  3. Ollama
    Ollama 平台上部署本地大模型非常方便,基于此平台,我们可以让 langchain 使用 llama3.1qwen2.5 等各种本地大模型。详见:
    在langchian中使用本地部署的llama3.1大模型 。

使用本地大语言模型

from langchain_ollama.llms import OllamaLLM
model = OllamaLLM(model="llama3.1")

llama3.1 支持多语言,适合一般性任务。langchain也支持很多其它平台和模型,详见:Chat models 。

翻译测试

ChatModelLangChain Runnable 的实例,这意味着它们公开了一个用于与它们交互的标准接口。我们用 .invoke 方法即可简单的调用模型。

def translate_1(text):
    """将文字翻译为意大利语"""
    messages = [
        SystemMessage("Translate the following from English into Italian"),
        HumanMessage(text),
    ]

    return model.invoke(messages)

我们现在可以调用上述方法,测试一下大模型的能力。

if __name__ == '__main__':
    response = translate_1("Hello, how are you?")
    print(response)
Ciao! Come stai? (Hello! How are you?)

langchain 还支持用其它的格式作为invoke的参数,例如:model.invoke("Hello")等价于:

model.invoke([{"role": "user", "content": "Hello"}])

model.invoke([HumanMessage("Hello")])

流式输出

因为聊天模型是 Runnable,所以它们公开了一个包含异步和流调用模式的标准接口stream,我们用它把翻译方法改造一下:

def translate_1_stream(text):
    """将文字翻译为意大利语"""
    messages = [
        SystemMessage("Translate the following from English into Italian"),
        HumanMessage(text),
    ]
    for token in model.stream(messages):
        yield token

我们可以调用一下此方法:

for token in translate_1_stream("Hello, how are you?"):
    print(token, end="|")
C|iao|,| come| st|ai|?||

流式输出的好处是:大模型返回的数据可以"一点一点"的返回来。
当大模型响应比较慢时,可以让用户便等待边看到结果,很友好;另外,在后面练习比较复杂的 Agent 时,也可以通过 stream 调用看到调用过程,便于调试。

提示词模板

我们通过提示词模板构建比较复杂一点的提示词,它有两个参数:

  • language: 将文本翻译成的语言
  • text: 被翻译的文本
    然后我们再调用提示词模板的 invoke 方法初始化提示词。
# 1. system提示词
def translate_2(text,language):
    """用提示词模板构建提示词,翻译文字"""

    # 1. system提示词
    system_template = "Translate the following from English into {language}"

    # 2. 提示词模板
    prompt_template = ChatPromptTemplate.from_messages(
        [("system", system_template), ("user", "{text}")]
    )

    # 3. 调用invoke构建提示词
    prompt = prompt_template.invoke({"language": language, "text": text})
    print(prompt.to_messages())

    response = model.invoke(prompt)
    return response

请注意,ChatPromptTemplate 在单个模板中支持多种消息角色。在本例中,我们将 language 参数格式化为系统消息,将 text 格式化为用户消息。
我们调用一下这个方法,看看输出效果:

response = translate_2("First up, let's learn how to use a language model by itself.","Chinese")
print(response)
让我们先学习如何使用语言模型。

代码

  • github
  • gitee

🪐祝好运🪐


http://www.kler.cn/a/517387.html

相关文章:

  • doris:MySQL Load
  • C语言程序设计十大排序—冒泡排序
  • 量子编程语言:Qiskit 与 Cirq
  • 【第一天】零基础入门刷题Python-算法篇-数据结构与算法的介绍(持续更新)
  • java常量池
  • C语言常用知识结构深入学习
  • 详细介绍:持续集成与持续部署(CI/CD)技术细节(关键实践、CI/CD管道、优势与挑战)
  • leetcode 3090. 每个字符最多出现两次的最长子字符串
  • 深度学习-96-大语言模型LLM之基于langchain的ConversationBufferMemory缓冲记忆
  • 2025年数学建模美赛 A题分析(3)楼梯使用方向偏好模型
  • 简识JVM中并发垃圾回收器和多线程并行垃圾回收器的区别
  • C++ 中常见排序算法(归并、快速、桶、基数排序)
  • PADDLE PREDICT
  • Maven修改默认编码格式UTF-8
  • mysql学习笔记-数据库其他调优策略
  • 二分查找 分块查找
  • redis报错如何解决
  • 戴尔电脑设置u盘启动_戴尔电脑设置u盘启动多种方法
  • capter7:全局内存的合理使用
  • C++ 线程安全之互斥锁
  • 《机器学习数学基础》补充资料:超平面
  • 【Unity3D】《跳舞的线》游戏的方块单方向拉伸实现案例
  • 关于hexo-deploy时Spawn-Failed的几种解决方案
  • Mysql面试题----什么是垂直分表、垂直分库、水平分库、水平分表
  • 【华为OD-E卷 - 计算网络信号 100分(python、java、c++、js、c)】
  • 「 机器人 」扑翼飞行器控制方法浅谈