当前位置: 首页 > news >正文

Ollama大模型开发实战:从基础到高级功能的全面指南

本文全面介绍了Ollama大模型平台的核心功能与开发技巧,包括流式处理三种模式、CLI命令使用、Pydantic定义JSON结构、向量嵌入应用、Agent多轮工具调用以及Web Search API集成。通过丰富代码示例和最佳实践指导,帮助开发者掌握从基础到高级的Ollama应用开发技能,适合希望构建强大AI应用的程序员学习参考。


一、流式处理核心概念

1.1 三种流式模式

模式字段用途
聊天模式content流式输出助手消息,实时渲染
思考模式thinking显示模型推理过程
工具调用tool_calls执行外部工具并返回结果

1.2 流式处理示例

from ollama import chat stream = chat( model='qwen3:1.7b', messages=[{'role': 'user', 'content': 'What is 17 × 23?'}], stream=True, think=False ) # 初始化状态变量和累积字符串 in_thinking = False # 标记是否正在接收思考过程 content = '' # 存储最终回答内容 thinking = '' # 存储思考过程内容 # 遍历流式响应中的每个数据块 (chunk) for chunk in stream: # 如果当前块包含思考过程 (thinking) 内容 if chunk.message.thinking: # 如果是第一次接收到思考内容,则打印标题 if not in_thinking: in_thinking = True print('Thinking:\n', end='', flush=False) # 打印当前部分的思考内容(不换行) print(chunk.message.thinking, end='', flush=False) # 将当前思考内容追加到总的思考字符串中 thinking += chunk.message.thinking # 如果当前块包含实际回答 (content) 内容 elif chunk.message.content: # 如果之前在显示思考过程,则切换状态并打印答案标题 if in_thinking: in_thinking = False print('\n\nAnswer:\n', end='', flush=True) # 打印当前部分的回答内容(不换行) print(chunk.message.content, end='', flush=True) # 将当前回答内容追加到总的回答字符串中 content += chunk.message.content new_messages = [{'role': 'assistant', thinking: thinking, content: content}] print('\n\nNew messages:\n', new_messages)

二、CLI 命令速查

2.1 思考模式控制

# 启用思考模式 ollama run deepseek-r1 --think "Where should I visit in Lisbon?" # 禁用思考模式 ollama run deepseek-r1 --think=false "Summarize this article" # 隐藏思考过程(但仍使用思考模型) ollama run deepseek-r1 --hidethinking "Is 9.9 bigger or 9.11?"

2.2 交互式会话控制

# 启用思考 /set think # 禁用思考 /set nothink

2.3 GPT-OSS

# 支持三个级别: low, medium, high ollama run gpt-oss --think=low "Draft a headline" ollama run gpt-oss --think=medium "Draft a headline" ollama run gpt-oss --think=high "Draft a headline"

三、结构化 JSON 输出

3.1 使用 Pydantic 定义 Schema

from ollama import chat from pydantic import BaseModel from typing import Literal, Optional # class BlurLocation(BaseModel): # province: str # city: str # district: str # # response = chat( # model='qwen3:1.7b', # messages=[{'role': 'user', 'content': '曹县在具体在哪个位置'}], # think=False, # format=BlurLocation.model_json_schema() # ) # # loc = BlurLocation.model_validate_json(response.message.content) # print(loc) class Object(BaseModel): name: str confidence: float attributes: str class ImageDes(BaseModel): summary: str objects: list[Object] scene: str colors: list[str] time_of_day: Literal['Morning', 'Afternoon', 'Evening', 'Night'] setting: Literal['Outdoor', 'Indoor', 'Unknown'] text_content: Optional[str]=None response = chat( model='qwen3-vl:2b', messages=[{ 'role': 'user', 'content': 'Use Chinese to describe this photo and list the objects you detect.', 'images': ['/Users/okonma/Desktop/pics/misato.jpg'] }], format=ImageDes.model_json_schema(), options={ 'temperature': 0 } ) print(response.message.content)

3.2 最佳实践

推荐做法:

  • 使用 Pydantic (Python) 或 Zod (JavaScript) 定义 schema
  • 设置temperature=0获得确定性输出
  • 在提示词中包含 JSON schema 说明
  • 通过 OpenAI 兼容 API 使用response_format参数

四、向量嵌入

4.1 推荐模型

模型链接
embeddinggemmaollama.com/library/embeddinggemma
qwen3-embeddingollama.com/library/qwen3-embedding
all-minilmollama.com/library/all-minilm

4.2 使用建议

  • 使用余弦相似度进行语义搜索
  • 索引和查询使用同一个嵌入模型

五、Agent 循环 (多轮工具调用)

5.1 概念

Agent 循环允许模型:

  • 自主决定何时调用工具
  • 将工具结果整合到回复中
  • 进行多轮工具调用

5.2 实现要点

💡提示:在提示词中告知模型它处于循环中,可以进行多次工具调用

5.3 完整示例:搜索 Agent

from ollama import chat, web_fetch, web_search # 准备工具字典 available_tools = {'web_search': web_search, 'web_fetch': web_fetch} messages = [{'role': 'user', 'content': "what is ollama's new engine"}] while True: response = chat( model='qwen3:4b', messages=messages, tools=[web_search, web_fetch], think=True ) # 显示思考过程 if response.message.thinking: print('Thinking: ', response.message.thinking) # 显示回答内容 if response.message.content: print('Content: ', response.message.content) messages.append(response.message) # 处理工具调用 if response.message.tool_calls: print('Tool calls: ', response.message.tool_calls) for tool_call in response.message.tool_calls: function_to_call = available_tools.get(tool_call.function.name) if function_to_call: args = tool_call.function.arguments result = function_to_call(**args) print('Result: ', str(result)[:200]+'...') # 限制上下文长度,截断结果 messages.append({ 'role': 'tool', 'content': str(result)[:2000 * 4], 'tool_name': tool_call.function.name }) else: messages.append({ 'role': 'tool', 'content': f'Tool {tool_call.function.name} not found', 'tool_name': tool_call.function.name }) else: break # 没有工具调用,退出循环

⚠️重要提示:

  • 建议将模型上下文长度增加到至少 32000 tokens
  • Ollama 云模型运行在完整上下文长度

六、Web Search & Fetch API

6.1 初始化客户端

import ollama # 配置 API Key client = ollama.Client( headers={ "Authorization": "Bearer API_KEY" } )

6.2 Web Search API

请求端点:POST <https://ollama.com/api/web_search>

参数:

  • query

    (string, 必填): 搜索查询字符串

  • max_results

    (integer, 可选): 最多返回结果数 (默认 5, 最大 10)

响应格式:

{ "results": [ { "title": "网页标题", "url": "网页 URL", "content": "相关内容片段" } ] }

使用示例:

import ollama response = ollama.web_search("What is Ollama?") print(response)

6.3 Web Fetch API

请求端点:POST <https://ollama.com/api/web_fetch>

参数:

  • url

    (string, 必填): 要获取的 URL

响应格式:

WebFetchResponse( title='网页标题', content='网页主要内容', links=['链接1', '链接2', ...] )

使用示例:

from ollama import web_fetch result = web_fetch('https://ollama.com') print(result)

七、MCP Server 集成

Ollama 支持通过 Python MCP server 在任何 MCP 客户端中启用 Web Search。

7.1 Cline 集成

在 Cline 中配置:Manage MCP Servers>Configure MCP Servers

{ "mcpServers": { "web_search_and_fetch": { "type": "stdio", "command": "uv", "args": ["run", "path/to/web-search-mcp.py"], "env": { "OLLAMA_API_KEY": "your_api_key_here" } } } }

7.2 Codex 集成

配置文件位置:~/.codex/config.toml

[mcp_servers.web_search] command = "uv" args = ["run", "path/to/web-search-mcp.py"] env = { "OLLAMA_API_KEY" = "your_api_key_here" }

7.3 Goose 集成

Ollama 可通过 MCP 功能与 Goose 集成。


AI大模型从0到精通全套学习大礼包

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

只要你是真心想学AI大模型,我这份资料就可以无偿共享给你学习。大模型行业确实也需要更多的有志之士加入进来,我也真心希望帮助大家学好这门技术,如果日后有什么学习上的问题,欢迎找我交流,有技术上面的问题,我是很愿意去帮助大家的!

如果你也想通过学大模型技术去帮助就业和转行,可以扫描下方链接👇👇
大模型重磅福利:入门进阶全套104G学习资源包免费分享!

01.从入门到精通的全套视频教程

包含提示词工程、RAG、Agent等技术点

02.AI大模型学习路线图(还有视频解说)

全过程AI大模型学习路线


03.学习电子书籍和技术文档

市面上的大模型书籍确实太多了,这些是我精选出来的


04.大模型面试题目详解

05.这些资料真的有用吗?

这份资料由我和鲁为民博士共同整理,鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位,在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利,同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。

所有的视频由智泊AI老师录制,且资料与智泊AI共享,相互补充。这份学习大礼包应该算是现在最全面的大模型学习资料了。

资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。


智泊AI始终秉持着“让每个人平等享受到优质教育资源”的育人理念‌,通过动态追踪大模型开发、数据标注伦理等前沿技术趋势‌,构建起"前沿课程+智能实训+精准就业"的高效培养体系。

课堂上不光教理论,还带着学员做了十多个真实项目。学员要亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事‌!


如果说你是以下人群中的其中一类,都可以来智泊AI学习人工智能,找到高薪工作,一次小小的“投资”换来的是终身受益!

应届毕业生‌:无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。

零基础转型‌:非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界‌。

业务赋能 ‌突破瓶颈:传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型‌。

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

http://www.jsqmd.com/news/304471/

相关文章:

  • 从入门到精通:RAG生产级实战指南 | 大模型应用必备收藏
  • 大模型开发工程师年薪90万不是梦!零基础入门到高薪就业的完整攻略(附资料包)
  • Java毕设项目:基于springboot的机器人健康预警系统(源码+文档,讲解、调试运行,定制等)
  • 银源电力联系方式:企业信息查询与使用建议
  • 2026最新K歌电视品牌top5推荐!家庭娱乐影音设备企业及厂家权威榜单发布,沉浸式K歌体验
  • 【课程设计/毕业设计】基于JAVA+Vue+SpringBoot的个人健康管理系统健康档案、体检档案、健康咨询基于springboot的个人健康管理系统【附源码、数据库、万字文档】
  • 蓝凌软件联系方式:官方路径与背景介绍
  • Java计算机毕设之基于Springboot+MySQ基于springboot的个人健康管理系统基于SpringBoot + Vue的个人运动健康管理系统(完整前后端代码+说明文档+LW,调试定制等)
  • 【毕业设计】基于springboot的机器人健康预警系统(源码+文档+远程调试,全bao定制等)
  • 我的 OI 故事(二):世上本没有路
  • 提示工程架构中的意图识别优化
  • 银源电力联系方式:加盟咨询与官方信息指南
  • 伪爱加密企业 Frida反调试
  • 蓝凌软件 联系方式:企业级AI服务咨询路径解析
  • 怎么做一个微信小程序?10年程序员分享一个0代码教程
  • 2026最新100吋电视企业top5推荐!高品质品牌及厂家全面解析,技术创新与画质体验双优助力家庭观影升级
  • 蓝凌软件联系方式:获取官方信息指引
  • 河南精铸工匠不锈钢有限公司 联系方式:如何有效联系与初步沟通
  • RAG 效果差,80% 的问题和模型无关
  • 【开题答辩全过程】以 基于web的生鲜农产品信息管理系统为例,包含答辩的问题和答案
  • 【开题答辩全过程】以 基于HTML5的购物网站的设计与实现为例,包含答辩的问题和答案
  • 河南精铸工匠不锈钢有限公司 联系方式:公开联系途径及注意事项
  • 河南精铸工匠不锈钢有限公司 联系方式:官方渠道汇总与使用指南
  • 河南精铸工匠不锈钢有限公司联系方式:业务接洽与通用建议
  • 2026最新85吋电视品牌top5推荐!高品质企业及厂家选择指南,技术创新与观影体验双优之选
  • TCP 连接池技术调研
  • Python数据分析:Matplotlib数据可视化基础
  • 攻防世界Web_php_unserialize
  • 三年内淘汰?程序员的生存危机与转型之路
  • [Meachines] [Hard] Pollution MyBB+Redis_session+PHP-Filter+PHP-FPM+prototype - 教程