首页
/ AutoGen.NET 接入 Ollama:使用 OllamaAgent 与本地 LLaMA 模型对话

AutoGen.NET 接入 Ollama:使用 OllamaAgent 与本地 LLaMA 模型对话

2026-09-04 16:01:32作者:蔡丛锟

本文基于 AutoGen.NET 官方文档 Chat-with-llama 展开,讲解如何用 AutoGen.Ollama 包中的 OllamaAgent 连接本地 Ollama 服务器,并调用 llama3:latest 模型完成一次完整的智能体对话。读完本文,你将掌握 AutoGen.Ollama 的安装与初始化方式、OllamaAgent 各构造参数的含义,以及消息连接器等中间件在消息流转中的作用,并能对照源码理解请求发送与响应反序列化的底层实现。

运行前提

要运行本文示例,需要满足以下环境条件:

  1. 本机(或同网段)已启动一个 Ollama 服务器;
  2. 服务器中已安装 llama3:latest 模型;
  3. Ollama 默认监听地址为 http://localhost:11434,示例中的 HttpClient 即指向该地址。

第 1 步:安装 AutoGen.Ollama

在项目目录中执行以下命令安装 NuGet 包:

dotnet add package AutoGen.Ollama

安装的是仓库 dotnet/src/AutoGen.Ollama 下实现的 AutoGen.Ollama 项目。如需从 nightly build 源安装,可参考官方 Installation 文档

第 2 步:添加 using 语句

示例代码(Chat_With_LLaMA.cs)需要引入两个命名空间:

using AutoGen.Core;
using AutoGen.Ollama.Extension;
  • AutoGen.Core 提供 OllamaAgent 所实现的 IStreamingAgentIMessage 等核心抽象;
  • AutoGen.Ollama.Extension 提供 RegisterMessageConnector()RegisterPrintMessage() 等扩展方法,其实现位于 OllamaAgentExtension.cs

第 3 步:创建 OllamaAgent 并发起对话

文档示例的完整代码如下:

using var httpClient = new HttpClient()
{
    BaseAddress = new Uri("http://localhost:11434"),
};

var ollamaAgent = new OllamaAgent(
    httpClient: httpClient,
    name: "ollama",
    modelName: "llama3:latest",
    systemMessage: "You are a helpful AI assistant")
    .RegisterMessageConnector()
    .RegisterPrintMessage();

var reply = await ollamaAgent.SendAsync("Can you write a piece of C# code to calculate 100th of fibonacci?");

对照源码 OllamaAgent.cs,构造函数签名为:

public OllamaAgent(HttpClient httpClient, string name, string modelName,
    string systemMessage = "You are a helpful AI assistant",
    OllamaReplyOptions? replyOptions = null)

各参数含义:

参数 说明
httpClient 指向 Ollama 服务器的 HttpClientBaseAddress 必须是 Ollama 端点(默认 http://localhost:11434
name 智能体名称,会作为消息信封(MessageEnvelope)的发送方标识
modelName 要在 Ollama 中调用的模型名,本例为 llama3:latest
systemMessage 系统提示词,缺省值为 "You are a helpful AI assistant"
replyOptions 可选的 OllamaReplyOptions,用于向 Ollama 传递额外推理参数

两个中间件扩展的作用

  • RegisterMessageConnector():注册 OllamaMessageConnector,负责将 AutoGen 的核心消息类型(如 TextChatMessageFunctionCallMessage 等)转换为 Ollama 请求体所需的 ChatRequest 消息格式,并在返回时把 Ollama 的 ChatResponse 还原为 AutoGen 消息类型;
  • RegisterPrintMessage():注册打印中间件,将智能体收发到的消息打印到控制台,便于调试观察。

底层实现:请求如何发往 Ollama

OllamaAgent.cs 的源码结构看,OllamaAgent 实现了 IStreamingAgent 接口,核心路径为:

  1. BuildChatRequest(messages, options) 将消息列表与 systemMessagemodelName 组装为 Ollama 的 ChatRequest DTO;
  2. BuildRequest(request) 将其序列化为 HttpRequestMessage,通过注入的 HttpClient 发送;
  3. 非流式调用 GenerateReplyAsyncrequest.Stream 置为 false,读取完整响应体后反序列化为 ChatResponse,并包装成 MessageEnvelope<ChatResponse> 返回;
  4. 流式调用 GenerateStreamingReplyAsyncrequest.Stream 置为 true,逐行读取 NDJSON 格式的 ChatResponseUpdate,在 Donefalse 时持续产出增量消息。

也就是说,文档示例中的 SendAsync 走的是非流式路径,而同一智能体还可以直接用于流式对话场景,这正是 OllamaAgent : IStreamingAgent 的意义。相关 DTO(ChatRequestChatResponseChatResponseUpdate 等)定义在 dotnet/src/AutoGen.Ollama/DTOs 目录下。

运行示例项目

仓库中的完整可运行示例位于 AutoGen.Ollama.Sample,其入口 Program.cs 默认调用的是多模态版示例:

await Chat_With_LLaVA.RunAsync();

项目文件 AutoGen.Ollama.Sample.csproj 通过 ProjectReference 直接引用了 AutoGen.OllamaAutoGen.SourceGenerator 等项目。运行前请确认:

  • Ollama 服务器已启动且 llama3:latest 已通过 ollama pull llama3:latest 拉取;
  • HttpClientBaseAddress 与你的 Ollama 端点一致(远程部署时改为对应主机地址)。

若要将入口改为 LLaMA 文本对话,只需在 Program.cs 中改为调用 Chat_With_LLaMA.RunAsync() 即可。

测试验证

AutoGen.Ollama 的单元测试位于 dotnet/test/AutoGen.Ollama.Tests,其中 OllamaAgentTests.cs 覆盖了 OllamaAgent 的回复生成与流式行为,OllamaMessageTests.cs 验证了消息转换逻辑,可作为示例行为正确性的佐证。

延伸阅读

同一个文档目录下还有一篇姊妹文档 Chat-with-llava,演示如何用同一个 OllamaAgent 对接 llava:latest 多模态模型进行图文对话,对应的示例代码在 Chat_With_LLaVA.cs。掌握本文的 Ollama 接入方式后,可顺带了解多模态消息的构造方法。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.12 K
2.72 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
528
588
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
906
1.83 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
854
1.34 K
docsdocs
暂无描述
Markdown
891
5.79 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.53 K
1.01 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.34 K
1.45 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
988
506
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
540
384