第三篇:用 Ollama 构建 MAF 的聊天案例

现在越来越多的同学开始尝试本地大模型,一方面省钱,另一方面数据也更可控。那如果我们想把Ollama 自部署模型接入到 MAF(Microsoft Agents Framework) 里,做一个真正能“聊天”的 Agent,该怎么搞呢?

这篇文章就用一个翻译 Agent 的小例子,一步一步讲清楚思路,帮你快速跑起来。

整体思路先说清楚

这个案例其实做的事情很简单:

本地用 Ollama 跑一个模型(比如 ministral-3)
通过 OllamaSharp 连接到本地模型
再用 MAF 的 AIAgent 包一层
最后通过 RunStreamingAsync 实现流式聊天输出
一句话总结就是:Ollama 负责模型,MAF 负责 Agent 能力,代码负责把两者连起来

准备工作

在写代码之前,你需要先准备好这些东西:

安装并启动 Ollama

确保你本地已经装好了 Ollama,并且能正常访问:

http://localhost:11434

同时确认你已经拉好了模型,比如:

ollama pull ministral-3

ollama上有很多模型,可以根据自己的硬件速度选择恰当的模型来使用。

项目里需要的 NuGet 包

示例代码里用到了这些核心库:

OllamaSharp
Microsoft.Agents.AI
Microsoft.Extensions.AI

完整代码示例

下面这份代码可以直接作为一个最小 Chat 示例来看,所有关键点我都在注释里标出来了。

using Azure.AI.OpenAI;
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
using OllamaSharp;
using System.ClientModel;

class Program
{
static async Task Main()
{
// 1. 创建一个基于 Ollama 的翻译 Agent
var translatorAgent = CreateOllamaAgent();

    // 2. 模拟一次真实对话输入
    //    前面是日文内容,后面是中文指令
    var content = """
        環境省の調査によると、花粉を飛散させるスギの雄花の芽の数は、今シーズンは全国26の道府県で過去の平均値よりも多くなっています。
        特に北海道や大阪など9の道府県では平均の2倍から3倍以上の多さだということで、早めの対策の徹底を呼びかけています。
        -----
        把上面日语翻译成中文。
        """;

    // 3. 使用流式方式运行 Agent
    //    模型一边生成,这里一边输出
    await foreach (var responseUpdate in translatorAgent.RunStreamingAsync(content))
    {
        Console.Write(responseUpdate);
    }
}

/// <summary>
/// 创建一个基于 Ollama 的 AIAgent
/// </summary>
static AIAgent CreateOllamaAgent()
{
    // Ollama 本地服务地址
    var ollamaEndpoint = "http://localhost:11434";

    // 使用的模型名称(需提前 pull)
    var ollamaModel = "ministral-3:latest";

    // 通过 OllamaSharp 创建 Chat Client
    // 然后使用 AsAIAgent 包装成 MAF 的 AIAgent
    var agent = new OllamaApiClient(ollamaEndpoint, ollamaModel)
        .AsAIAgent(new ChatClientAgentOptions
        {
            // Agent 的名字
            Name = "Translator",

            // Agent 的整体描述(偏元信息)
            Description = "一个专业的职业辅导AI助手,根据上下文内容友好,耐心回答问题。",

            // Chat 相关配置
            ChatOptions = new ChatOptions
            {
                // 这里本质上就是 System Prompt
                // 用来定义 Agent 的角色、能力边界和输出规则
                Instructions = """
                你是一名专业翻译员,精通源语言和目标语言,具备良好的语言理解能力与表达能力。

                你的任务是:
                将我提供的文本从【源语言】准确、清晰地翻译为【目标语言】。

                翻译要求:
                - 忠实原文含义,不遗漏、不添加、不曲解信息
                - 语言自然流畅,符合目标语言的表达习惯,而非逐字直译
                - 保留原文语气和风格(如正式、口语、学术、商业等)
                - 专有名词、技术术语、人名、地名应准确翻译或保留原文(必要时加括号说明)
                - 不进行总结、解释或改写,仅输出翻译结果

                输出格式:
                - 仅输出翻译后的文本,不添加任何额外说明
                """
            }
        });

    return agent;
}

}
运行结果如下:

声明:来自硅基-桂迹,仅代表创作者观点。链接:https://eyangzhen.com/6017.html

硅基-桂迹的头像硅基-桂迹

相关推荐

添加微信
添加微信
Ai学习群
返回顶部