基于 Ollama + LangChain 的 AI 旅行计划生成器开发教程

一、项目概述

1. 目标

使用本地部署的 Ollama DeepSeek 模型和 LangChain 框架,开发一个能根据用户输入生成旅行计划的 AI 应用。

2. 技术栈

  • 大语言模型:Ollama 部署的 DeepSeek 模型
  • 框架:LangChain(最新版)
  • 开发语言:Python 3.9+

二、环境准备

1. 安装 Ollama 并部署 DeepSeek 模型

# 安装 Ollama( macOS/Linux 示例)
curl https://ollama.ai/install.sh | sh

# 下载并部署 DeepSeek 模型
ollama pull deepseek-r1:32b

2. 创建 Python 虚拟环境

# 创建虚拟环境
python3 -m venv travel-env
source travel-env/bin/activate  # Linux/macOS
.\travel-env\Scripts\activate  # Windows

# 安装依赖
pip install --upgrade langchain langchain-community langchain-ollama

三、核心概念讲解

1. Ollama

  • 本地运行大语言模型的工具,支持多种开源模型
  • 通过 HTTP API 与模型交互

2. LangChain

  • RunnableSequence:替代旧的 LLMChain,用管道方式连接组件
  • 提示模板:结构化输入提示,引导模型生成更准确的输出
  • 回调系统:监控模型调用过程,实现流式输出

四、代码实现

1. 完整代码

import os
from langchain.prompts import ChatPromptTemplate
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
from langchain_ollama import OllamaLLM


# 配置 Ollama 模型
def setup_ollama_model(model_name="deepseek-r1:7b"):
  """设置Ollama模型连接"""
  return OllamaLLM(
    base_url="http://192.168.34.61:11434",
    model=model_name,
    callbacks=[StreamingStdOutCallbackHandler()]  # 使用callbacks替代callback_manager
  )


# 创建旅行计划生成链
def create_travel_chain(llm):
  """使用RunnableSequence创建旅行计划生成链"""
  # 定义提示模板
  prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个专业的旅行规划师。你的任务是根据用户的需求,生成详细的旅行计划。"),
    ("user", """我计划去{destination}旅行,时间为{duration}天,预算大约{budget}元。
        请为我生成一个详细的旅行计划,包括每日行程安排、交通方式、推荐的餐厅和住宿选择。
        请确保计划合理、有趣且符合我的预算。""")
  ])

  # 使用RunnableSequence替代LLMChain
  return prompt | llm


# 定义一个函数,用于提取思考过程和推理结果
def extract_langchain_thinking_and_response(data):
  """
    提取langchain思考过程和推理结果。

    参数:
        data (dict): Ollama 返回的 JSON 数据。

    返回:
        tuple: 包含思考过程和推理结果的元组。
  """
  # 初始化思考过程和推理结果变量
  thinking_process = ""
  response_content = ""

  # 检查是否包含思考过程
  if "<think>" in data and "</think>" in data:
    # 提取思考过程,去除标签
    start = data.find("<think>") + len("<think>")  # 找到 "<think>" 标签的起始位置
    end = data.find("</think>")  # 找到 "</think>" 标签的结束位置
    thinking_process = data[start:end].strip()  # 提取标签内的内容并去除首尾空格

    # 提取推理结果(即消息的其余部分)
    response_content = data.split("</think>")[-1].strip()  # 从 "</think>" 标签之后的内容中提取推理结果
  # 返回思考过程和推理结果
  return thinking_process, response_content


# 主函数
def main():
  # 设置API密钥(如果需要)
  os.environ["OLLAMA_BASE_URL"] = "http://localhost:11434"

  # 初始化模型
  print("正在连接到本地Ollama模型...")
  llm = setup_ollama_model()

  # 创建旅行计划链
  travel_chain = create_travel_chain(llm)

  # 收集用户输入
  destination = input("请输入你的旅行目的地:")
  duration = input("请输入你的旅行天数:")
  budget = input("请输入你的大致预算(元):")

  # 生成旅行计划
  print("\n正在为你生成旅行计划...\n")
  result = travel_chain.invoke({
    "destination": destination,
    "duration": duration,
    "budget": budget
  })

  # 保存结果
  with open("travel_plan.md", "w", encoding="utf-8") as f:
    f.write(f"# {destination}旅行计划 ({duration}天,预算{budget}元)\n\n")
    # f.write(result)
    thinking_process, response_content = extract_langchain_thinking_and_response(result)
    f.write(response_content)

  print("\n旅行计划已生成并保存到 travel_plan.md")


if __name__ == "__main__":
  main()

2. 关键代码解析

模型初始化
from langchain_ollama import OllamaLLM

llm = OllamaLLM(
    base_url="http://localhost:11434",
    model="deepseek-r1:7b",
    callbacks=[StreamingStdOutCallbackHandler()]  # 实时显示生成内容
)
提示工程
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是专业旅行规划师..."),  # 设定AI角色
    ("user", "我计划去{destination}旅行{duration}天...")  # 用户输入变量
])
模型调用
# 使用管道式调用替代旧的LLMChain
chain = prompt | llm
result = chain.invoke({
    "destination": "北京",
    "duration": "3",
    "budget": "3000"
})

五、运行与测试

1. 启动 Ollama 服务

ollama serve

2. 执行程序

python travel_planner.py

3. 示例输入与输出

旅行目的地:成都
旅行天数:4
预算(元):5000

# 生成内容示例
# 成都旅行计划 (4天,预算5000元)

### 第一天:市区文化探索
- **上午**:抵达成都双流机场,乘坐地铁10号线前往春熙路...
- **推荐餐厅**:钟水饺(春熙路店)...
- **住宿**:春熙路附近酒店(预算300-500元/晚)
...

六、常见问题与解决方案

1. 依赖问题

# 安装最新依赖
pip install -U langchain langchain-community langchain-ollama

2. API 变更

  • 旧版 Ollama → 新版 from langchain_ollama import OllamaLLM
  • callback_managercallbacks
  • LLMChainRunnableSequence

3. 连接错误

检查 Ollama 服务是否启动:

curl http://localhost:11434/api/tags  # 应返回模型列表

七、扩展与优化

1. 功能增强

  • 添加多轮对话支持
  • 集成地图可视化
  • 增加酒店/景点评分功能

2. 性能优化

  • 添加缓存机制
  • 实现异步调用
  • 模型量化压缩

3. 界面改进

开发 Web 界面:

pip install flask  # 或 streamlit

八、总结

通过本教程,你学会了:

  1. 本地部署和使用 Ollama 模型
  2. 使用 LangChain 最新 API 开发应用
  3. 处理库版本变更带来的兼容性问题
  4. 基于大模型构建实用工具的基本流程

这个项目可以作为 AI 应用开发的起点,你可以根据需求扩展更多功能!

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐