用flask作为后端,写一个能调用本地ollama的api的后端接口demo
时间: 2025-06-02 22:27:30 浏览: 6
<think>嗯,用户想用Flask作为后端,写一个能够调用本地Ollama的API的接口demo。首先,我需要确认Ollama的API文档是什么样的,不过可能用户指的是类似调用本地大模型的服务,比如通过Ollama来运行类似Llama的模型。假设Ollama提供了一个本地的HTTP API,类似于Ollama的REST接口,比如生成文本或者对话的端点。
接下来,用户需要的是Flask的后端接口,所以得先搭建一个基本的Flask应用结构。可能需要安装Flask和requests库,因为要向后端的Ollama服务发送请求。然后,设计一个路由,比如POST方法到/generate,接收用户输入的prompt,转发给Ollama的API,再把结果返回给前端。
需要注意的是,Ollama默认的API端口可能是11434,比如它的生成端点可能是http://localhost:11434/api/generate,使用POST方法,发送JSON数据,包含model和prompt等参数。因此,在Flask后端中,需要处理接收到的请求参数,然后转发到本地的Ollama服务。
另外,要考虑错误处理,比如Ollama服务未启动或请求超时的情况,返回相应的错误信息。同时,设置CORS,如果前端和Flask不在同一个域,需要安装flask-cors来处理跨域问题。
然后,代码的结构大概是这样的:引入Flask和requests,创建应用实例,配置CORS,定义一个路由处理POST请求,解析请求中的JSON数据,提取prompt,然后向Ollama发送请求,获取响应,处理可能的错误,最后将结果返回给客户端。
测试步骤方面,用户需要确保Ollama已经在本地运行,并且有对应的模型,比如llama2。然后运行Flask应用,使用curl或者Postman发送POST请求进行测试,或者用前端页面调用接口。
可能用户在实际操作中会遇到的问题,比如端口冲突,模型不存在,或者参数传递错误,这些需要在代码中加入相应的检查和异常捕获。此外,响应的处理可能需要根据Ollama返回的具体数据结构进行调整,比如提取生成的文本内容。
最后,给出一个完整的示例代码,并说明如何运行和测试,以及注意事项,比如安装依赖,启动Ollama服务等。这样用户就能有一个清晰的步骤来搭建这个demo。</think>以下是一个使用 Flask 编写的调用本地 Ollama 的 API 接口 Demo。假设您已在本机安装并运行 Ollama 服务(默认端口 11434):
### 1. 安装依赖
```bash
pip install flask requests
```
### 2. 创建 Flask 后端代码(app.py)
```python
from flask import Flask, request, jsonify
import requests
app = Flask(__name__)
# Ollama 服务的地址(默认本地端口)
OLLAMA_URL = "http://localhost:11434/api/generate"
@app.route('/generate', methods=['POST'])
def generate_text():
try:
# 获取前端发送的请求数据
data = request.get_json()
prompt = data.get('prompt', '')
model = data.get('model', 'llama2') # 默认使用 llama2 模型
# 构造发送给 Ollama 的请求
ollama_payload = {
"model": model,
"prompt": prompt,
"stream": False # 关闭流式输出
}
# 发送请求到 Ollama
response = requests.post(
OLLAMA_URL,
json=ollama_payload,
headers={'Content-Type': 'application/json'},
timeout=300 # 设置超时时间(秒)
)
# 处理 Ollama 的响应
if response.status_code == 200:
result = response.json()
return jsonify({
"response": result.get('response', ''),
"status": "success"
})
else:
return jsonify({
"error": f"Ollama API 错误: {response.text}",
"status": "error"
}), 500
except Exception as e:
return jsonify({
"error": f"服务器错误: {str(e)}",
"status": "error"
}), 500
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)
```
### 3. 使用说明
#### 启动服务
1. 确保 Ollama 正在运行:
```bash
ollama serve
```
2. 在另一个终端启动 Flask 服务:
```bash
python app.py
```
#### 发送请求示例
使用 curl 测试接口:
```bash
curl -X POST http://localhost:5000/generate \
-H "Content-Type: application/json" \
-d '{
"prompt": "为什么天空是蓝色的?",
"model": "llama2"
}'
```
#### 预期响应
```json
{
"response": "天空呈现蓝色是因为瑞利散射现象...(此处为模型生成的回答)",
"status": "success"
}
```
### 4. 关键代码说明
1. **路由配置**:创建 `/generate` 端点处理 POST 请求
2. **请求转发**:将接收到的 prompt 和模型参数转发到本地 Ollama 服务
3. **错误处理**:捕获网络请求异常和 API 错误
4. **超时设置**:设置 300 秒超时(可根据模型响应时间调整)
### 5. 注意事项
1. 确保本地已安装并运行 Ollama([安装指南](https://ollama.ai/))
2. 首次使用前需拉取模型:
```bash
ollama pull llama2
```
3. 可根据需要修改:
- 模型名称(如使用 `mistral`、`codellama` 等其他模型)
- 温度参数(添加 `"temperature": 0.7` 到请求体)
- 最大 token 数(添加 `"max_tokens": 500`)
如果需要处理流式输出,可以修改 `stream` 参数为 `True` 并实现 SSE(Server-Sent Events)机制。
阅读全文
相关推荐


















