本文介绍在mac电脑上部署deepseek及相关测试。

使用 ollama 运行 deepseek

Ollama 是一个开源工具,旨在帮助用户在本地快速、轻松地运行大型语言模型(LLMs)。

# 下载并运行本地 1.5b 小模型
ollama run deepseek-r1:1.5b

ollama stop deepseek-r1:1.5b

使用 python 基于本地 deepseek 的 RAG 测试

# -*- coding: UTF-8 -*-

from langchain_community.document_loaders import PDFPlumberLoader
from langchain_experimental.text_splitter import SemanticChunker
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_community.vectorstores import FAISS
from langchain_community.llms import Ollama
from langchain.chains import LLMChain
from langchain.chains import RetrievalQA
from langchain.chains import StuffDocumentsChain

from langchain.prompts import PromptTemplate
from langchain.memory import ConversationBufferMemory
from langchain.prompts.chat import (
    ChatPromptTemplate,
    SystemMessagePromptTemplate,
    HumanMessagePromptTemplate,
)

def runLLMChain():
    llm = Ollama(model="deepseek-r1:1.5b", base_url='http://127.0.0.1:11434')

    template = "You are a helpful assistant that translates {input_language} to {output_language}."
    system_message_prompt = SystemMessagePromptTemplate.from_template(template)
    human_template = "{text}"
    human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)

    chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])

    chain = LLMChain(
        llm=llm,
        prompt=chat_prompt,
        output_parser=CommaSeparatedListOutputParser()
    )
    result = chain.invoke({
        "input_language" : "English",
        "output_language" : "Chinese",
        "text" : "Hello world."
    })
    print(result)


def runRag():
    # 加载pdf资料,作为扩展信息源
    loader = PDFPlumberLoader("/Users/suninf/Desktop/bike.pdf")
    docs = loader.load()

    # pdf信息向量化Embeddings
    text_splitter = SemanticChunker(HuggingFaceEmbeddings())
    documents = text_splitter.split_documents(docs)

    embeddings = HuggingFaceEmbeddings()
    vector_store = FAISS.from_documents(documents, embeddings)
    retriever = vector_store.as_retriever(search_kwargs={"k": 3})

    llm = Ollama(model="deepseek-r1:1.5b")

    prompt = """
        1. 仅使用以下上下文。
        2. 如果不确定,回答“我不知道”。
        3. 答案保持在4句话以内。

        上下文: {context}

        问题: {question}

        答案:
        """
    PROMPT = PromptTemplate(
        template=prompt, input_variables=["context", "question"]
    )

    chain_type_kwargs = {"prompt": PROMPT}

    qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=retriever,
                                     chain_type_kwargs=chain_type_kwargs)

    user_input = u"自行车的原理"
    response = qa(user_input)["result"]
    print(response)


if __name__ == '__main__':
    runLLMChain()
    runRag()
输出1:
<think>好,用户发了一个“Hello world.”,这是一个常见的问候消息,通常用来表示友好的回应或者欢迎新用户的到来。我需要保持回复的自然和亲切,同时确保信息准确无误。首先,我会确认“world.”是英文中的“world”的首字母加一个句点,所以正确的翻译应该是“Hello, world!”,这样看起来更加流畅和正式。接下来,我要确保没有遗漏任何细节,比如用户可能是在用中文或其他国家的表达方式。但在这个情况下,“World”在英语中是常见的问候术语,没有歧义。最后,我会简洁地回应,让用户明白我的响应:“Hello! 世界好!”这样整个回复既清晰又自然,符合用户的意图。
</think>

Hello! 世界好!


输出2:
<think>
嗯,我现在得帮用户分析一下自行车的原理。首先,我得回忆一下前面提供的上下文,看看有哪些关于骑行者使用的材料或工具如何影响自行车的设计和功能。

首先,上下文中提到了变速器和刹车系统的类型,比如前变速器将链条移动到不同大小的链轮上,而传动比越大,踩踏时越轻松,车轮转动的速度也越慢;传动比小的话则相反。这可能涉及的是齿轮或链轮的啮合比例变化。

然后,关于摩擦力部分,刹车片会产生足够的摩擦力来减速自行车。这里提到了滚动摩擦和静摩擦的关系,以及如何根据速度调整刹车力度。

接下来,历史部分提到自行车从无踏板步行机开始,发展到有踏板的传统形式,并且提到了一些现代设计的成果。这可能涉及到骑行者使用工具或材料对自行车设计的影响。

然后,减速系统分为 roller bearing brake(辊式刹车)和 disc brake(盘式刹车)。前者通过压在轮辋上的刹车片产生摩擦力,后者可能通过其他方式。

还有,自行车的历史从19世纪到现在的变化,包括多速变速、山地车的出现以及现代技术的发展。这些变化表明 biking逐渐变得更加高效和多样化。

现在,问题是要综合以上内容来回答。我需要确保每个部分都涵盖,同时保持简洁,只用四句话以内。

首先,自行车的设计依赖于齿轮或链轮的啮合比例,通过传动比来调节脚踏力和车轮转动速度。然后,刹车系统包括roll bearing brake和disc brake,前者通过摩擦产生力,后者可能通过其他方式。最后,历史上的发展显示 biking逐渐更高效多样。

这样应该涵盖了所有相关知识点,并且符合用户的要求。
</think>

自行车的原理主要源于齿轮或链轮的啮合比例调节脚踏力量与车轮转动速度的关系,变速器则改变传动比来调整踩踏力和车速。刹车系统包括roll bearing brake( roller brake)和disc brake,前者通过摩擦产生力以减缓或停止骑行。历史发展显示 biking逐渐变得更高效多样。

参考