CozeNet 0.0.6

dotnet add package CozeNet --version 0.0.6
                    
NuGet\Install-Package CozeNet -Version 0.0.6
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="CozeNet" Version="0.0.6" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="CozeNet" Version="0.0.6" />
                    
Directory.Packages.props
<PackageReference Include="CozeNet" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add CozeNet --version 0.0.6
                    
#r "nuget: CozeNet, 0.0.6"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package CozeNet@0.0.6
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=CozeNet&version=0.0.6
                    
Install as a Cake Addin
#tool nuget:?package=CozeNet&version=0.0.6
                    
Install as a Cake Tool

Coze NET

Coze API的.net实现。

实现了大多数接口,并重点测试了对话相关接口。

已实现

  • 鉴权
    • 个人访问令牌
    • 开发者JWT
  • 智能体
  • 会话
  • 消息
  • 对话
  • 文件
  • 工作流
  • 知识库

未实现

  • 空间
  • 渠道
  • 语音

使用示例

详见Test.cs

ASP.NET Core 集成

安装nuget包 dotnet add package CozeNet.AspNetCore

appsettings.json

"Coze": {
  "Endpoint": "api.coze.cn",
  "AppId": "1111111111",
  "PublicKey": "111-222222222222222",
  "PrivateKey": "private_key.pem",
  "BotID": "777777777",
  "PersonalAccessToken": "",
  "HttpClientName": "",
  "TokenExpire": null
},

注意: PersonalAccessToken和PublicKey、PrivateKey为二选一的关系。 HttpClientName用于获取注入自定义配置的HttpClient。 比如注入了一个名为CozeClient的httpclient,其中使用一个自定义的用于记录请求和响应日志的handler。则配置中需要设置为"HttpClientName":"CozeClient".

builder.Services.AddHttpClient("CozeClient").ConfigureHttpClientDefaults(defaults => defaults.AddHttpMessageHandler<LoggingHandler>());

Program.cs

builder.Services.AddCozeNet();

由于使用了IDistributedCache来对accessToken进行缓存,所以需要安装Redis包配置Redis连接。如果有用其他的IDistributedCache实现也可以。

builder.Services.AddStackExchangeRedisCache(options =>
{
    options.Configuration = builder.Configuration.GetConnectionString("Redis");
    options.InstanceName = "MyProjectName:";
});

通过依赖注入使用

注意:TypedResults.ServerSentEvents 为.net 10新增内容

public ChatController(ConversationService conversationService, ChatService chatService,IOptionsMonitor<CozeOptions> options)
{
    [HttpPost("complete")]
    public async Task<> Chat(string message, CancellationToken cancellationToken)
    {
      async IAsyncEnumerable<StreamChatResponse> ChatCompleteAsync(
          string message, ChatService chatService,
          [EnumeratorCancellation] CancellationToken cancellationToken)
      {
          var r = chatService.SendStreamAsync(conversation!.Id, new()
          {
              BotID = options.CurrentValue.BotId,
              AutoSaveHistory = true,
              Stream = true,
              AdditionalMessages = [new() { Role = RoleType.User, Content = message, ContentType =      ContentType.Text, Type = MessageType.Question }]
          }, cancellationToken);
          await foreach (var completionUpdate in r)
          {
              if (completionUpdate.Event is CozeNet.Chat.Models.StreamEvents.DeltaMessage)
              {
                  var message = completionUpdate.Data as MessageObject;
                  if (message!.Type is not (MessageType.Answer or MessageType.FollowUp)) continue;
                  yield return new StreamChatResponse(message.Content!, message.Type!);
              }
              else if (completionUpdate.Event is CozeNet.Chat.Models.StreamEvents.MessageComplete)
              {
                  var message = completionUpdate.Data as MessageObject;
                  if (message!.Type is MessageType.Answer)//MessageComplete时会完整返回回答内容
                  {
                      //保存对话历史                      
                  }
                  else if (message!.Type is MessageType.FollowUp)
                  {
                      yield return new StreamChatResponse(message!.Content!, message.Type!);
                  }
              }
              else if (completionUpdate.Event is CozeNet.Chat.Models.StreamEvents.ChatComplete)
              {
                  var chat = completionUpdate.Data as CozeNet.Chat.Models.ChatObject;
                  //对话完毕,会返回本次对话消耗的token数量等信息
              }
              else if (completionUpdate.Event is CozeNet.Chat.Models.StreamEvents.ChatFailed)
              {
                  var error = completionUpdate.Data as CozeNet.Chat.Models.ChatObject;
                  yield return new StreamChatResponse(error!.LastError?.Message ?? "", "Error");
                  yield break;
              }
              //None, Created, InProgress, DeltaMessage, DeltaAudio, MessageComplete, ChatComplete,       ChatFailed, RequireAction, Error, Done
          }
      }

      return TypedResults.ServerSentEvents(ChatCompleteAsync(message, _chatService,  cancellationToken));
    }

}

AspNet Core集成参考示例

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on CozeNet:

Package Downloads
CozeNet.AspNetCore

Coze.cn API的C#实现

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.0.6 266 7/17/2025
0.0.5 232 6/4/2025
0.0.4 203 5/29/2025
0.0.3 240 2/11/2025
0.0.2 153 2/5/2025
0.0.1 164 2/2/2025