You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用.NET AI本地快速入门教程时遇到IChatClient无CompleteStreamingAsync方法及Ollama命名空间不存在的编译错误

使用.NET AI本地快速入门教程时遇到IChatClient无CompleteStreamingAsync方法及Ollama命名空间不存在的编译错误

看起来你碰到的问题是由于预览版API的迭代变动导致的——毕竟你用的是9.3.0-preview版本的.NET AI包,官方教程的内容可能还没完全跟上最新的API变化。我来帮你一步步解决:

首先排查Ollama命名空间不存在的问题

  1. 确认项目目标框架:这些.NET AI预览包要求项目必须基于.NET 8或更高版本,你可以右键项目→属性,检查“目标框架”是否设置正确。
  2. 强制恢复NuGet包:有时候Visual Studio可能没有正确加载预览包,打开终端进入项目目录,运行命令:
    dotnet restore
    
    确保所有包都能正常下载并引用。
  3. 启用预览功能:在你的项目文件(.csproj)里添加如下配置,确保允许使用预览版SDK和包:
    <PropertyGroup>
        <EnablePreviewFeatures>true</EnablePreviewFeatures>
    </PropertyGroup>
    

然后解决CompleteStreamingAsync方法不存在的问题

在最新的Microsoft.Extensions.AI预览版中,IChatClient的流式对话方法已经从CompleteStreamingAsync改名为StreamChatAsync,同时返回值的结构也有细微调整。你可以把代码修改成下面的样子:

using Microsoft.Extensions.AI;
using Microsoft.Extensions.AI.Ollama;

namespace Chat
{
    internal class Program
    {
        static async Task Main(string[] args)
        {
            // 改用Options类来配置Ollama客户端(新版本推荐的方式)
            var ollamaOptions = new OllamaChatClientOptions
            {
                Endpoint = new Uri("http://localhost:11434/"),
                ModelId = "phi3:mini"
            };
            IChatClient chatClient = new OllamaChatClient(ollamaOptions);

            List<ChatMessage> chatHistory = new();

            while (true)
            {
                Console.WriteLine("Your prompt:");
                var userPrompt = Console.ReadLine();
                // 加个退出逻辑,输入空内容就结束对话
                if (string.IsNullOrWhiteSpace(userPrompt)) break;
                
                chatHistory.Add(new ChatMessage(ChatRole.User, userPrompt));

                Console.WriteLine("AI Response:");
                var fullResponse = "";
                // 使用StreamChatAsync替代原来的CompleteStreamingAsync
                await foreach (var update in chatClient.StreamChatAsync(chatHistory))
                {
                    if (!string.IsNullOrEmpty(update.Text))
                    {
                        Console.Write(update.Text);
                        fullResponse += update.Text;
                    }
                }
                chatHistory.Add(new ChatMessage(ChatRole.Assistant, fullResponse));
                Console.WriteLine();
            }
        }
    }
}

最后验证

修改完成后,重新生成项目,应该就能解决这两个编译错误了。本质上是预览版API的命名和结构调整,教程内容的更新可能滞后于包版本迭代~

备注:内容来源于stack exchange,提问作者OlavT

火山引擎 最新活动