5分钟手把手系列(三):本地编写一个AI Agent(Langchain + Ollama)
一、技术选型与核心优势
在本地开发AI Agent的场景中,Langchain与Ollama的组合展现出独特优势:
- Langchain框架:作为AI Agent开发的”瑞士军刀”,提供工具调用、记忆管理、链式处理等核心能力。其模块化设计支持快速搭建复杂智能体,同时保持代码可维护性。
- Ollama本地模型:通过将大语言模型部署在本地环境,解决数据隐私、网络依赖和成本控制三大痛点。支持Llama 3、Mistral等主流开源模型,性能与云端方案相当。
- 开发效率:相比从零实现,使用成熟框架可将开发周期从数周缩短至分钟级,特别适合原型验证和内部工具开发。
二、环境准备(1分钟)
2.1 硬件要求
- 推荐配置:16GB RAM + NVIDIA GPU(4GB显存起)
- 最低配置:8GB RAM + CPU(推理速度较慢)
2.2 软件安装
# 创建虚拟环境(推荐)python -m venv langchain_agentsource langchain_agent/bin/activate # Linux/Mac# 或 .\langchain_agent\Scripts\activate # Windows# 安装核心依赖pip install langchain ollama python-dotenv
2.3 模型部署
# 下载模型(以Llama 3 8B为例)ollama pull llama3:8b# 验证运行ollama run llama3:8b "用三个词形容AI Agent"
三、核心组件实现(3分钟)
3.1 基础架构设计
from langchain.agents import Tool, AgentExecutorfrom langchain.memory import ConversationBufferMemoryfrom langchain.llms import Ollamafrom langchain.prompts import MessagesPlaceholderfrom langchain.schema import HumanMessage, SystemMessageclass LocalAIAgent:def __init__(self, model_name="llama3:8b"):# 初始化LLMself.llm = Ollama(model=model_name)# 记忆管理self.memory = ConversationBufferMemory(memory_key="chat_history",input_key="input",output_key="output")# 工具集(示例)self.tools = [Tool(name="WebSearch",func=self._web_search,description="用于检索实时网络信息")]# 提示词模板self.system_prompt = """你是一个专业的AI助手,擅长处理{tools_description}。当前对话历史:{chat_history}当前问题:{input}"""def _web_search(self, query):# 模拟网络搜索(实际可接入搜索引擎API)return f"搜索结果:关于'{query}'的最新信息显示..."
3.2 智能体执行器配置
from langchain.agents import create_ollama_agentdef build_agent():# 自定义提示词模板prompt = SystemMessage(content="""你是一个全能的AI助手,具备以下能力:1. 使用工具:{tools}2. 记忆上下文3. 提供详细解答当前任务:{input}""")# 创建Agentagent = create_ollama_agent(llm=Ollama(model="llama3:8b"),tools=tools,prompt=prompt,verbose=True,memory=ConversationBufferMemory())return agent
四、功能扩展与优化(1分钟)
4.1 工具链增强
# 添加计算工具def calculate(expression):try:return str(eval(expression))except:return "计算错误"tools.append(Tool(name="Calculator",func=calculate,description="用于数学计算,输入格式为'1+1'"))
4.2 性能优化技巧
- 模型量化:使用
ollama run --fp16 llama3:8b启用半精度计算 - 缓存机制:对重复查询实施结果缓存
- 流式输出:
```python
from langchain.callbacks import StreamingStdOutCallbackHandler
def stream_response():
callbacks = [StreamingStdOutCallbackHandler()]
response = self.llm.predict(
“解释量子计算”,
callbacks=callbacks
)
## 五、完整工作流示例```python# 初始化agent = build_agent()# 执行多轮对话memory = ConversationBufferMemory()for _ in range(3):user_input = input("用户: ")response = agent.run(input=user_input,memory=memory)print(f"AI: {response}")memory.chat_memory.add_user_message(user_input)memory.chat_memory.add_ai_message(response)
六、部署与扩展建议
-
容器化部署:
FROM python:3.11-slimWORKDIR /appCOPY requirements.txt .RUN pip install -r requirements.txtCOPY . .CMD ["python", "agent.py"]
-
API服务化:
```python
from fastapi import FastAPI
app = FastAPI()
@app.post(“/chat”)
async def chat(input: str):
return {“response”: agent.run(input)}
3. **安全加固**:- 添加API密钥验证- 实现输入内容过滤- 限制单用户查询频率## 七、常见问题解决方案1. **内存不足错误**:- 降低`batch_size`参数- 使用更小模型(如`phi3:3b`)- 增加系统交换空间2. **模型响应延迟**:```python# 调整生成参数self.llm = Ollama(model="llama3:8b",temperature=0.7,max_tokens=200,top_p=0.9)
- 工具调用失败:
- 检查工具描述是否清晰
- 添加异常处理逻辑
- 使用
try-except块捕获具体错误
八、进阶方向
- 多模态支持:集成图像理解能力
- 持久化记忆:使用SQLite或Chromadb存储长期记忆
- 自主进化:通过反馈循环优化提示词
- 分布式部署:使用Ray框架实现多节点扩展
通过本指南,开发者可在5分钟内完成从环境搭建到功能验证的全流程。这种本地化AI Agent方案特别适合需要数据主权、低延迟响应的场景,如企业内部工具、隐私敏感应用等。实际开发中,建议从简单功能开始,逐步添加复杂特性,同时密切监控资源使用情况。