C#/.net实现调用api访问kimi,豆包等大模型的通用方法

本内容仅供自己参考学习

kimi、豆包、通义千问三个大模型都是通过apikey、apiurl以及大模型应用id来进行交互

1.TyClient接口

public interface TyClient
{
    string ChatAI(string input);
}

2.TyClientBase抽象类

实现TyClient接口,增加ConfigJosn字段存储请求体

public abstract class TyClientBase : TyClient
{
    protected string ConfigJson;

    public TyClientBase(string configjson)
    {
        ConfigJson = configjson;
    }

    public abstract string ChatAI(string input);
}

3.TyModel类

public class TyModel : TyClientBase
{
    private string _apiKey;
    private string _apiUrl;
    private string _endpointId;
    private static readonly HttpClient client = new HttpClient();

    public TyModel(string configjson) : base(configjson)
    {
        // 解析configjson
        var config = JsonConvert.DeserializeObject<dynamic>(configjson);
        _apiKey = config.ApiKey;
        _apiUrl = config.Url;
        _endpointId = config.EndpointId;
    }

    public override string ChatAI(string input)
    {
        var requestBody = new
        {
            model = _endpointId,
            messages = new[]
            {
                new { role = "system", content = "你是一个编程高手,精通各种编程语言" },
                new { role = "user", content = input }
            },
            stream = true
        };

        var json = JsonConvert.SerializeObject(requestBody);
        var content = new StringContent(json, Encoding.UTF8, "application/json");

        var request = new HttpRequestMessage
        {
            Method = HttpMethod.Post,
            RequestUri = new Uri(_apiUrl),
            Content = content
        };

        request.Headers.Add("Authorization", $"Bearer {_apiKey}");

        var response = client.Send(request, HttpCompletionOption.ResponseHeadersRead);

        var fullResponse = new StringBuilder();

        using (var stream = response.Content.ReadAsStream())
        using (var reader = new System.IO.StreamReader(stream))
        {
            while (!reader.EndOfStream)
            {
                var line = reader.ReadLine();
                if (line.StartsWith("data:"))
                {
                    var jsonString = line.Substring(5).Trim();
                    if (jsonString == "[DONE]")
                    {
                        break;
                    }
                    var jsonObj = JObject.Parse(jsonString);
                    var contentDelta = jsonObj["choices"]?[0]?["delta"]?["content"]?.ToString();
                    if (contentDelta != null)
                    {
                        fullResponse.Append(contentDelta);
                    }
                }
            }
        }

        return fullResponse.ToString();
    }
}

TyModel类继承了TyClientBase,并实现了ChatAI方法:

  1. 私有字段

    • _apiKey:存储API密钥。
    • _apiUrl:存储API的URL。
    • _endpointId:存储模型的端点ID。
    • client:静态HttpClient实例,用于发送HTTP请求。
  2. 构造函数

    • 接受一个配置JSON字符串,调用基类构造函数。
    • 使用JsonConvert.DeserializeObject<dynamic>解析配置JSON,并提取ApiKeyUrlEndpointId
  3. ChatAI方法

    • 创建请求体,包括模型ID和消息数组。
    • 将请求体序列化为JSON,并创建StringContent
    • 创建HttpRequestMessage,设置请求方法、URI和内容。
    • 添加Authorization头。
    • 发送请求并处理响应,以流的方式逐行读取响应内容。
    • 检查每行是否以"data:"开头,解析JSON并提取内容增量,逐行构建完整响应。

 请求示例:

using System;


namespace AiTy
{
    internal class Program
    {
        private static void Main(string[] args)
        {

            

            string config = "{ \"Url\": \"https://XXXXX/v1/chat/completions\", \"ApiKey\": \"XXXXXXXXXXXXXXXX\", \"EndpointId\": \"XXXXX\" }";

            TyClient Client = new TyModel(config);
            while (true)
            {
                Console.WriteLine("请输入你的问题(输入'exit'退出):");
                string input = Console.ReadLine();

                if (input.ToLower() == "exit")
                {
                    break;
                }


                string result = Client.ChatAI(input);
                Console.WriteLine("AI 回复:");
                Console.WriteLine(result);
                Console.WriteLine();
            }
        }

    }
}

### 使用Python调用Kimi大模型API 为了使用Python调用Kimi大模型API,通常需要遵循特定的接口定义来发送请求并处理响应。下面提供了一个基本的例子说明如何通过HTTP POST方法API端点发送查询,并接收返回的结果。 首先,确保安装了`requests`库用于发起网络请求: ```bash pip install requests ``` 接着,在Python脚本中导入必要的模块并设置访问令牌(如果API要求认证),构建请求体以及执行POST请求获取数据如下所示: ```python import json import requests def call_kimi_api(prompt, api_key): url = 'https://api.kimi.example.com/v1/models/kimi:predict' # 假设这是官方提供的API地址 headers = { 'Content-Type': 'application/json', 'Authorization': f'Bearer {api_key}' } payload = { "inputs": [ {"text": prompt} ] } response = requests.post(url=url, data=json.dumps(payload), headers=headers) if response.status_code == 200: result = response.json() return result['outputs'][0]['generated_text'] else: raise Exception(f'Request failed with status code {response.status_code}: {response.text}') if __name__ == '__main__': api_key = '<your-api-key-here>' # 用户需替换为自己实际拥有的有效API密钥 user_input = input('请输入您想要询问的内容:') output = call_kimi_api(user_input, api_key) print(output) ``` 上述代码展示了怎样利用Python中的`requests`库来进行一次简单的文本生成任务调用[^1]。请注意这里的URL仅为示意用途;真实的API路径应当参照Kimi大模型文档给出的信息进行配置。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值