使用.NET AI本地快速入门教程时遇到IChatClient无CompleteStreamingAsync方法及Ollama命名空间不存在的编译错误
使用.NET AI本地快速入门教程时遇到IChatClient无CompleteStreamingAsync方法及Ollama命名空间不存在的编译错误
看起来你碰到的问题是由于预览版API的迭代变动导致的——毕竟你用的是9.3.0-preview版本的.NET AI包,官方教程的内容可能还没完全跟上最新的API变化。我来帮你一步步解决:
首先排查Ollama命名空间不存在的问题
- 确认项目目标框架:这些.NET AI预览包要求项目必须基于.NET 8或更高版本,你可以右键项目→属性,检查“目标框架”是否设置正确。
- 强制恢复NuGet包:有时候Visual Studio可能没有正确加载预览包,打开终端进入项目目录,运行命令:
确保所有包都能正常下载并引用。dotnet restore - 启用预览功能:在你的项目文件(.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




