Ollama 搭配 DeepSeek 模型在本地进行文章生成,是一个既有趣又实用的选择。下面我将为你介绍如何通过 Python 来完成这件事,并提供一些优化技巧。
首先,通过一个表格来快速了解两种主要的调用方法:
| 调用方式 | 优点 | 适用场景 |
|---|---|---|
| 直接 HTTP 请求 | 依赖少(requests库即可),控制直接 |
快速测试,简单集成 |
| 官方 Python 库 | 代码更简洁,兼容OpenAI格式 | 复杂应用,需要工具调用,从OpenAI项目迁移 |
🔌 基础API调用方法
确保 Ollama 服务正在运行(默认地址为 http://localhost:11434),并且已通过 ollama pull deepseek-chat 或类似命令拉取了所需的 DeepSeek 模型。
使用直接 HTTP 请求
这是最基础的方式,使用 requests 库调用 Ollama 的 /api/generate 端点。
import requests url = "http://localhost:11434/api/generate" data = { "model": "deepseek-chat", # 请确保这是你已拉取的正确模型名 "prompt": "请用马克吐温的风格写一篇关于人工智能如何改变现代教育的短文,要求生动幽默,字数在500字左右。", "stream": False, # 为True时启用流式响应,适合长文本 "options": { "temperature": 0.7, # 控制创造性:越高越随机,越低越确定 "top_p": 0.9, # 影响采样词汇的范围 "max_tokens": 2000 # 控制生成文章的最大长度 } } response = requests.post(url, json=data) if response.status_code == 200: result = response.json() print(result["response"]) # 打印生成的文章 else: print(f"请求失败,状态码:{response.status_code}") print(response.text)
使用 Ollama Python 库
Ollama 提供了一个官方的 Python 库,让调用变得更简单。首先需要安装:pip install ollama。
1. 基础生成
import ollama response = ollama.generate( model="deepseek-chat", prompt="撰写一篇关于可再生能源未来发展的科技评论文章,需包含太阳能和风能的关键分析。", options={ "temperature": 0.7, "top_p": 0.9 } ) print(response['response'])
2. 流式输出
对于生成长篇文章,流式输出可以提供实时反馈,提升体验。
import ollama stream = ollama.generate( model="deepseek-chat", prompt="以探险家的口吻,描述在热带雨林中发现一个未知古代文明的经历。", stream=True ) # 逐块打印生成内容 for chunk in stream: print(chunk['response'], end='', flush=True)
3. 对话补全接口
如果文章生成需要多轮“对话”来引导和细化,使用 /api/chat 端点更合适,因为它能更好地维护上下文。
import ollama response = ollama.chat( model="deepseek-chat", messages=[ {"role": "system", "content": "你是一位资深财经作家,擅长用通俗易懂的语言解读复杂的市场现象。"}, {"role": "user", "content": "写一篇分析未来五年量子计算对金融行业潜在影响的文章。"}, # 可以继续添加多轮对话,例如: # {"role": "user", "content": "把重点放在对风险评估模型的影响上,并补充一个例子。"} ], options={ "temperature": 0.5, # 财经类文章可适当降低temperature,增加严谨性 "max_tokens": 1500 } ) print(response['message']['content'])
4. 工具调用(高级功能)
Ollama 支持工具调用,这能让模型在生成文章时获取外部信息。例如,让模型调用一个获取最新天气的函数来丰富文章内容。
import ollama response = ollama.chat( model='llama3.1', # 请确保你使用的模型支持工具调用 messages=[{ 'role': 'user', 'content': '写一篇关于旧金山今日天气如何影响市民户外活动的短文。' }], tools=[{ 'type': 'function', 'function': { 'name': 'get_current_weather', 'description': '获取指定城市的当前天气', 'parameters': { 'type': 'object', 'properties': { 'city': {'type': 'string', 'description': '城市名称'}, }, 'required': ['city'], }, }, }], ) # 注意:工具调用返回后,你需要根据模型的请求(在response['message']['tool_calls']中)实际执行函数,并将结果再次发送给模型
💡 生成文章的实用技巧
掌握了基础调用后,下面这些技巧能帮助你获得质量更高的文章:
-
明确你的需求:在提示词(Prompt)中清晰地说明文章主题、风格、目标读者、关键点和大致字数。越具体的提示,越能引导模型生成符合你期望的内容。
-
利用系统消息设定角色:在使用聊天接口时,通过
system角色消息为模型赋予一个身份(如“资深科技记者”、“历史学者”),这能有效塑造文章的写作风格和视角。 -
分步骤生成:对于长文或复杂主题,可以将其分解。例如,先让模型生成大纲,再基于大纲分部分撰写,最后进行总结和润色。
-
调整创造性参数:
-
temperature(温度):写小说、诗歌时调高(如0.8-1.0),写技术报告、说明文时调低(如0.3-0.5)。 -
top_p(核采样):通常设置在0.8到0.95之间,与温度参数协同作用,影响词汇选择的多样性。
-