5分钟手把手:Langchain+Ollama本地AI Agent开发指南

5分钟手把手系列(三):本地编写一个AI Agent(Langchain + Ollama)

一、技术选型与核心优势

在本地开发AI Agent的场景中,Langchain与Ollama的组合展现出独特优势:

  1. Langchain框架:作为AI Agent开发的”瑞士军刀”,提供工具调用、记忆管理、链式处理等核心能力。其模块化设计支持快速搭建复杂智能体,同时保持代码可维护性。
  2. Ollama本地模型:通过将大语言模型部署在本地环境,解决数据隐私、网络依赖和成本控制三大痛点。支持Llama 3、Mistral等主流开源模型,性能与云端方案相当。
  3. 开发效率:相比从零实现,使用成熟框架可将开发周期从数周缩短至分钟级,特别适合原型验证和内部工具开发。

二、环境准备(1分钟)

2.1 硬件要求

  • 推荐配置:16GB RAM + NVIDIA GPU(4GB显存起)
  • 最低配置:8GB RAM + CPU(推理速度较慢)

2.2 软件安装

  1. # 创建虚拟环境(推荐)
  2. python -m venv langchain_agent
  3. source langchain_agent/bin/activate # Linux/Mac
  4. # 或 .\langchain_agent\Scripts\activate # Windows
  5. # 安装核心依赖
  6. pip install langchain ollama python-dotenv

2.3 模型部署

  1. # 下载模型(以Llama 3 8B为例)
  2. ollama pull llama3:8b
  3. # 验证运行
  4. ollama run llama3:8b "用三个词形容AI Agent"

三、核心组件实现(3分钟)

3.1 基础架构设计

  1. from langchain.agents import Tool, AgentExecutor
  2. from langchain.memory import ConversationBufferMemory
  3. from langchain.llms import Ollama
  4. from langchain.prompts import MessagesPlaceholder
  5. from langchain.schema import HumanMessage, SystemMessage
  6. class LocalAIAgent:
  7. def __init__(self, model_name="llama3:8b"):
  8. # 初始化LLM
  9. self.llm = Ollama(model=model_name)
  10. # 记忆管理
  11. self.memory = ConversationBufferMemory(
  12. memory_key="chat_history",
  13. input_key="input",
  14. output_key="output"
  15. )
  16. # 工具集(示例)
  17. self.tools = [
  18. Tool(
  19. name="WebSearch",
  20. func=self._web_search,
  21. description="用于检索实时网络信息"
  22. )
  23. ]
  24. # 提示词模板
  25. self.system_prompt = """你是一个专业的AI助手,擅长处理{tools_description}。
  26. 当前对话历史:{chat_history}
  27. 当前问题:{input}"""
  28. def _web_search(self, query):
  29. # 模拟网络搜索(实际可接入搜索引擎API)
  30. return f"搜索结果:关于'{query}'的最新信息显示..."

3.2 智能体执行器配置

  1. from langchain.agents import create_ollama_agent
  2. def build_agent():
  3. # 自定义提示词模板
  4. prompt = SystemMessage(content="""你是一个全能的AI助手,具备以下能力:
  5. 1. 使用工具:{tools}
  6. 2. 记忆上下文
  7. 3. 提供详细解答
  8. 当前任务:{input}""")
  9. # 创建Agent
  10. agent = create_ollama_agent(
  11. llm=Ollama(model="llama3:8b"),
  12. tools=tools,
  13. prompt=prompt,
  14. verbose=True,
  15. memory=ConversationBufferMemory()
  16. )
  17. return agent

四、功能扩展与优化(1分钟)

4.1 工具链增强

  1. # 添加计算工具
  2. def calculate(expression):
  3. try:
  4. return str(eval(expression))
  5. except:
  6. return "计算错误"
  7. tools.append(
  8. Tool(
  9. name="Calculator",
  10. func=calculate,
  11. description="用于数学计算,输入格式为'1+1'"
  12. )
  13. )

4.2 性能优化技巧

  1. 模型量化:使用ollama run --fp16 llama3:8b启用半精度计算
  2. 缓存机制:对重复查询实施结果缓存
  3. 流式输出
    ```python
    from langchain.callbacks import StreamingStdOutCallbackHandler

def stream_response():
callbacks = [StreamingStdOutCallbackHandler()]
response = self.llm.predict(
“解释量子计算”,
callbacks=callbacks
)

  1. ## 五、完整工作流示例
  2. ```python
  3. # 初始化
  4. agent = build_agent()
  5. # 执行多轮对话
  6. memory = ConversationBufferMemory()
  7. for _ in range(3):
  8. user_input = input("用户: ")
  9. response = agent.run(
  10. input=user_input,
  11. memory=memory
  12. )
  13. print(f"AI: {response}")
  14. memory.chat_memory.add_user_message(user_input)
  15. memory.chat_memory.add_ai_message(response)

六、部署与扩展建议

  1. 容器化部署

    1. FROM python:3.11-slim
    2. WORKDIR /app
    3. COPY requirements.txt .
    4. RUN pip install -r requirements.txt
    5. COPY . .
    6. CMD ["python", "agent.py"]
  2. API服务化
    ```python
    from fastapi import FastAPI
    app = FastAPI()

@app.post(“/chat”)
async def chat(input: str):
return {“response”: agent.run(input)}

  1. 3. **安全加固**:
  2. - 添加API密钥验证
  3. - 实现输入内容过滤
  4. - 限制单用户查询频率
  5. ## 七、常见问题解决方案
  6. 1. **内存不足错误**:
  7. - 降低`batch_size`参数
  8. - 使用更小模型(如`phi3:3b`
  9. - 增加系统交换空间
  10. 2. **模型响应延迟**:
  11. ```python
  12. # 调整生成参数
  13. self.llm = Ollama(
  14. model="llama3:8b",
  15. temperature=0.7,
  16. max_tokens=200,
  17. top_p=0.9
  18. )
  1. 工具调用失败
    • 检查工具描述是否清晰
    • 添加异常处理逻辑
    • 使用try-except块捕获具体错误

八、进阶方向

  1. 多模态支持:集成图像理解能力
  2. 持久化记忆:使用SQLite或Chromadb存储长期记忆
  3. 自主进化:通过反馈循环优化提示词
  4. 分布式部署:使用Ray框架实现多节点扩展

通过本指南,开发者可在5分钟内完成从环境搭建到功能验证的全流程。这种本地化AI Agent方案特别适合需要数据主权、低延迟响应的场景,如企业内部工具、隐私敏感应用等。实际开发中,建议从简单功能开始,逐步添加复杂特性,同时密切监控资源使用情况。