LangChain 调用 Ollama 完整教程
本文提供了LangChain与Ollama集成的完整环境配置指南,包含Python虚拟环境创建、依赖安装(Ollama相关组件)、Ollama服务部署(含模型下载)等步骤。重点演示了三个基础使用场景:通过ChatOllama实现简单对话交互、利用提示模板生成烹饪指导、以及构建多轮对话系统。示例代码展示了如何初始化模型、设计提示模板并处理响应,其中红烧肉案例详细解析了思考过程和烹饪步骤,体现了模型的
·
环境准备
1. 创建 Python 虚拟环境
推荐使用虚拟环境来隔离项目依赖:
# 方法一:使用 venv(Python 3.3+)
python3 -m venv langchain_env
source langchain_env/bin/activate # Linux/Mac
# langchain_env\Scripts\activate # Windows
# 方法二:使用 virtualenv
pip3 install virtualenv
virtualenv langchain_env
source langchain_env/bin/activate
# 激活后提示符会变成:
(langchain_env) user@host:~$
2. 验证 Python 环境
python3 --version # 确保 Python 3.8+
pip3 --version # 确保 pip3 可用
依赖安装
核心依赖包
# 使用阿里云镜像加速安装
pip3 install -U langchain -i https://mirrors.aliyun.com/pypi/simple/
pip3 install -U langchain-community -i https://mirrors.aliyun.com/pypi/simple/
pip3 install -U langchain-ollama -i https://mirrors.aliyun.com/pypi/simple/
pip3 install -U langchain-core -i https://mirrors.aliyun.com/pypi/simple/
Ollama 服务配置
1. 安装和启动 Ollama
# 下载并安装 Ollama
curl -fsSL https://ollama.ai/install.sh | sh
# 启动服务
ollama serve
# 下载模型(示例:deepseek-r1)
ollama pull deepseek-r1:8b
2. 验证模型可用性
# 查看已安装的模型
ollama list
# 测试模型
ollama run deepseek-r1:8b "你好,请介绍一下自己"
3. 网络配置(可选)
如果需要远程访问,配置 systemd 服务:
# 编辑服务文件
sudo vim /etc/systemd/system/ollama.service
# 添加环境变量
Environment="OLLAMA_HOST=0.0.0.0"
Environment="OLLAMA_PORT=11434"
Environment="OLLAMA_ORIGINS=*"
# 重启服务
sudo systemctl daemon-reload
sudo systemctl restart ollama
基础使用示例
1. 简单对话
from langchain_ollama import ChatOllama
from langchain_core.messages import HumanMessage
# 初始化 deepseek 模型
deepseek = ChatOllama(
base_url="http://127.0.0.1:11434", # deepseek 服务地址
model="deepseek-r1:8b" # 模型名称(需提前下载)
)
# 调用模型生成回复
response = deepseek.invoke([
HumanMessage(content="请用一句话解释人工智能是什么。")
])
print(response.content)
运行结果示例:
<think>
嗯,用户让我用一句话解释人工智能是什么。这个问题看起来简单,但其实需要精准把握核心概念。
首先得明确AI的定义范围,不能只说“机器模仿人脑”太片面了,应该涵盖从弱到强的人工智能发展现状。然后要突出技术本质——算法处理数据的能力,而不是具体方法(比如深度学习)。用户可能想要一个既通俗又专业的答案,所以用“模拟、延伸和扩展人类的智能活动能力”来解释范围比较合适。
考虑到用户可能是非专业人士想快速了解概念,或者学生写作业需要简洁定义。ta没有附加要求但用了直接提问方式,说明更注重回答效率而非细节探讨。
</think>
人工智能是一种利用算法让计算机模拟、延伸和扩展人类的智能活动能力的技术或系统。
2. 使用提示模板
from langchain_ollama import ChatOllama
from langchain_core.prompts import ChatPromptTemplate
# 初始化 deepseek 模型
deepseek = ChatOllama(
base_url="http://10.100.200.241:11434", # deepseek 服务地址
model="deepseek-r1:8b" # 模型名称(需提前下载)
)
# 定义提示模板
prompt = ChatPromptTemplate.from_template(
"你是一个专业厨师。请用简单步骤解释如何烹饪:{dish}。"
)
# 创建对话链:模板 -> 模型 -> 输出
chain = prompt | deepseek
# 调用链并生成回答
result = chain.invoke({"dish": "红烧肉"})
print(result.content)
运行结果示例:
<think>
嗯,用户让我以专业厨师的身份来讲解红烧肉的做法。首先得确定他们想要的是经典版本还是简化版,因为红烧肉有很多变化做法。但根据常见的需求,应该选最标准的版本,这样既保留传统风味又能确保步骤清晰。
接着要考虑用户的背景。可能是个家庭厨房的新手,或者想尝试做这道菜的人,所以步骤要简单易懂,避免使用太专业的术语。需要强调关键点,比如炒糖色的过程和控制火候的重要性,因为这两步是红烧肉成败的关键。
然后得分解每个步骤,确保逻辑连贯。从准备材料开始,选材很重要,五花肉的品质直接影响成品。接下来处理食材、炸制、炒糖色这些部分不能遗漏。还要注意小贴士的部分,比如如何让肥肉变瘦和瘦肉不变,这能帮助用户避免常见问题。
可能需要检查步骤之间的衔接,比如焯水后是否要立即转入热油锅中,这样可以节省时间并保持火候。同时,在炒糖色的时候,颜色的变化是个难点,得提醒用户注意观察,并且可能提到冰糖替代白砂糖的情况,但说明味道差异更大。
还要考虑安全提示,比如处理热油时小心烫伤,使用正确工具如炒锅而不是平底锅。另外,时间安排方面,炖煮需要耐心慢火,所以建议用砂锅或铸铁锅保持温度更合适。
最后要确保整体结构流畅,材料清单明确,并且每个步骤都有对应的技巧说明。这样用户不仅能跟着做,还能理解背后的原理,做出更好的红烧肉。
</think>
好的,作为一名专业厨师,我来为你分享制作经典红烧肉的简化版核心步骤。记住,这是一道功夫菜,需要耐心和细心(特别是炒糖色那步),但我会尽量让过程清晰易懂。
**目标:** 制作色泽红亮、肥而不腻、入口即化的经典口味红烧肉。
## 核心材料
1. **主料:** 精五花肉 (带皮,肥瘦相间为佳) - 约500克
2. **调味料:**
* 冰糖 或 白砂糖 - 约40-60克(冰糖风味更醇正)
* 酱油 - 约3汤匙 (根据酱油颜色和个人喜好调整)
* 料酒 - 约2汤匙
* 姜片 - 几片
* 葱段 - 一段
* 八角/桂皮(可选)- 少量,增加风味层次
* 食用油 (用于炸糖色和炒锅) - 约适量
## 简单步骤:
1. **准备五花肉:**
* 将五花肉切成2厘米左右见方的大块。
* 处理一下:可以冷水下锅加姜片、葱段和一勺料酒焯水去腥,煮沸后撇去浮沫,洗净血污。或者直接用热水将五花肉块烫几分钟,去除表面杂质。
2. **炸/煸炒五花肉 (可选但推荐):**
* 在锅中倒入足量的食用油(比平时炒菜多一些),烧热后放入处理好的五花肉块。
* 中小火慢煎:用筷子或勺子不断翻动,让肥肉部分中的油脂慢慢渗出来。这个过程要耐心,直到肉块表面金黄,出油明显增多,变得比较干爽(大约需要10-20分钟)。**这一步是为了让红烧后的肥肉不腻,口感更好。**
* **如果时间或设备不允许炸炒,可以跳过此步,直接用普通炒锅炒糖色并小火慢炖。**
3. **炒糖色 (关键步骤!):**
* 锅洗净后倒入少量食用油(比肉块需要的少),中火加热。
* 放入冰糖/白砂糖,开始慢慢炒化。**注意:用冰糖风味更好更稳定,白砂糖颜色控制难一些且味道差异大。**
* 糖会经历一个从透明到泛黄、再到变成焦糖色的过程:
* 刚开始是透明液体。
* 温度升高,糖液变稠,出现气泡。
* 继续加热并翻炒,颜色逐渐加深(浅黄色 -> 金黄色)。
* **非常关键:** 当糖色变成深琥珀色或焦糖色时,立刻将步骤2中准备好的五花肉块倒入锅中快速翻炒!让每块肉都均匀地裹上糖色。这一步决定最终的颜色和风味。
4. **调味与炖煮:**
* 肉块裹好糖色后(如果之前没炸,现在也得小火煸一下肉表面变微黄),沿着锅边淋入料酒。
* 接着加入酱油、姜片、葱段。翻炒均匀,让酱汁再次被肉吸收并稍微收干一点。
* 加入足量的热水或啤酒(能没过所有肉块即可,不能加冷水)。**水量要一次到位!**
* **大火烧开:** 沸腾后煮约15分钟,撇去重新产生的浮沫和血渣。
5. **慢炖 (耐心是美德):**
* 转成中小火(甚至小火),盖上锅盖。
* 约40-60分钟。期间检查水量,如果水少了需要加热水或开水,但必须小心不要溅到糖色和肉上。
6. **最后收汁:**
* 当肉块变得软烂入味时(用筷子能轻松戳透),打开锅盖转大火。
* 不断翻炒,让汤汁变浓稠,并最终收干至你喜欢的粘稠程度,呈现诱人的红褐色或栗色。期间注意防止糊底。
7. **装盘:**
* 将红烧肉盛出即可享用!
## 核心技巧与小贴士
* **选材:** 精五花是最佳选择,肥瘦相间能让成品口感俱佳。
* **炒糖色:** 耐心观察颜色变化!火候要足够大才能让糖变焦并上色,但也要时刻警惕防止烧糊。如果没把握好,可能导致颜色不够或味道发苦。白砂糖更容易冒泡和溅出,请务必小心。
* **水量:** 炒糖色后加足量的水是保证肉质软嫩不柴的关键。中途加水要慢,并确保锅内温度不过高(否则会破坏胶质)。
* **肥瘦处理:** 如果不喜欢油腻,可以先将五花肉块用厨房纸吸干表面油脂;或者在炒糖色时多翻动几次让一些油脂出来。
祝你烹饪成功这道美味的红烧肉!
3. 多轮对话
from langchain_ollama import ChatOllama
from langchain_core.messages import HumanMessage, AIMessage
# 初始化 deepseek 模型
deepseek = ChatOllama(
base_url="http://10.100.200.241:11434", # deepseek 服务地址
model="deepseek-r1:8b" # 模型名称(需提前下载)
)
# 初始化对话历史
messages = [
HumanMessage(content="你好!"),
AIMessage(content="你好!有什么可以帮助你的?"),
HumanMessage(content="推荐一本科幻小说。")
]
# 继续对话
response = deepseek.invoke(messages)
print("AI回复:", response.content)
运行结果示例:
AI回复: <think>
好的,用户让我推荐一本科幻小说。首先我要分析他们的请求。他们直接说需要推荐,但可能没有提供足够的背景信息。我应该考虑不同的子类型来覆盖更多可能性。
用户是男性还是女性呢?不确定,用中性称呼比较安全。年龄方面可能是年轻人或者成年人,因为提到《三体》的话,用户至少看过这本书,所以年龄层可以放宽到16岁以上。地区可能在华语区,毕竟中文推荐更常见,但也不排除其他可能性。
用户的使用场景:他们现在需要书籍推荐,可能是在寻找新的阅读材料,或者对科幻感兴趣想拓展视野。真实需求是得到合适的书目建议,而深层需求可能是希望找到符合自己口味、容易入门的经典作品,同时了解每本书的独特之处以便做出选择。
用户提到《三叶》,所以很可能已经有一定的科幻知识基础。这时候推荐其他经典可能更合适,比如阿西莫夫的机器人系列或者菲利普·K·迪克的作品,这些是公认的基石性读物,能帮助他们深入理解不同流派的特点。
需要确保推荐多样性:硬核科技、社会伦理、心理惊悚等不同类型,让用户有选择的空间。还要考虑语言问题,如果用户更习惯英文原著,可能需要调整,但根据历史回复,默认先提供中文推荐。
另外要避免重复推荐《三体》本身,虽然他们喜欢这部作品,但重点在于扩展他们的阅读范围。解释每本书的亮点和适合人群,帮助他们找到真正感兴趣的方向,并鼓励进一步探索。
</think>
好的!给你推荐几本广受好评且风格各异的经典科幻小说:
1. **《基地》 - 艾萨克·阿西莫夫**
* **类型:** 社会科幻、心理史学。这通常被认为是硬核科幻的基石之一,也奠定了太空歌剧的基础。
* **亮点:** 创造了“银河帝国”的宏大叙事,探讨了历史预测、政治斗争和人类文明兴衰等主题。故事分为几部分(如《基地前奏》、《基地与帝国》、《第二基地》),情节复杂且引人入胜。
* **适合人群:** 喜欢宏大世界观设定、帝国兴亡史、智谋交锋的读者。
2. **《银河系漫游指南》 - 道格拉斯·亚当斯**https://ollama.com/
* **类型:** 幽默讽刺科幻。这是一部独特的作品,将深刻的哲学思考和宇宙学概念融入轻松搞笑的情节中。
* **亮点:** 带你了解“无所不在的通用全息翻译机”、“ Infinite Improbability Drive (无限不可能驱动)”等著名概念,在银河系边缘进行一场充满想象力和幽默感的冒险。
* **适合人群:** 寻找一种轻松有趣又不失深度阅读体验的读者,喜欢脑洞大开和哲学思考。
3. **《神经漫游者》 - 威廉·吉布森**
* **类型:** 赛博朋克、网络空间惊悚。这部小说是赛博朋克文学流派的奠基之作之一。
* **亮点:** 构建了“计算机世界”(Computer World)这一迷人的虚拟现实概念,描绘了一个充满高科技与低生活反差的未来都市景观。文风前卫、独特,充满了对人类意识和数字时代的探索。
* **适合人群:** 对赛博朋克世界观着迷,喜欢虚拟现实、人工智能、黑客文化和城市奇幻设定的读者。
4. **《仿生人会梦见电子羊吗?》 - 岛田秀雄**
* **类型:** 赛博朋克(电影版更接近)、机器人伦理。这是菲利普·K·迪克众多经典作品中的一部,以其深刻的哲学思考和对现实的模糊处理而闻名。
* **亮点:** 探讨了何为“人类”、何为“真实”的深刻问题。主角瑞秋发现自己的记忆是人造的,引发了关于身份认同、情感来源以及生物与机器界限的大讨论。文风独特且充满悬念。
* **适合人群:** 喜欢心理惊悚、哲学探索和对未来社会伦理思考的读者。
5. **《沙丘》 - 弗兰克·赫伯特**
* ** **类型:** 科幻冒险、政治阴谋、生态科幻。这是一部极其复杂且影响深远的作品,融合了多种元素。
* **亮点:** 构建了一个名为厄拉科斯(Dune)的沙漠行星及其独特的生态环境和政治格局。主角保罗成为传奇性的“救世主”,故事充满了权力斗争、复杂的角色关系和深刻的寓意。
* **适合人群:** 喜欢复杂设定、权谋斗争、异域风情和英雄史诗感的读者。
这些都是非常有代表性和影响力的科幻小说,风格迥异但都值得一读。希望你能从中找到自己喜欢的那一本!
📚 扩展阅读
更多推荐
所有评论(0)