API接口怎么接?自己做了一个适用于Groq API的应用

54 阅读3分钟

我平时会用GPT,Claude这些AI工具辅助写代码,查文档等功能。但是有一个问题就是每个月订阅费很贵,一些工具按token计费,用多了惦记着 后来我就用Groq来做免费的密钥,这个API有千问,llama,GPT等模型,然后我就集成做了一个应用

于是花了几个小时做了一个应用:Pack AI

可以干什么

市面上这种工具很多,我想解决的是

1.订阅太贵:我的应用完全免费

2.数据隐私问题:本来想着开源的,结果github老是打不开,可能要一些工具才可以打开,于是开源的计划推迟了一些,如果想看源代码的我放在下面了

3.开发者界面:我不会这么做,所以搞了一点点东西

目前状态: 已经上架itch.io,虽然那是独立游戏平台,但是没说不能上架工具 后续计划:

  • 支持更多模型,现在正在适配OpenAI格式
  • 增加对话历史本地记录(现在已经有了)
  • 优化一下,至少参考一下vs code内置的github copilot

希望得到的反馈 作为独立项目,我以我们团队的名义发布此软件

目前最大的问题是我自己用的很顺手,但是不知道别人用起来会不会遇到问题 如果你有兴趣,欢迎试一下,告诉我:

  • 有没有bug
  • 哪个功能不好用
  • 还缺什么功能

欢迎发到社区:pinchlg.nelify.app

itch.io小组件: <iframe frameborder="0" src="https://itch.io/embed/4447706" width="552" height="167"><a href="https://pack-en.itch.io/pack-ai">pack ai by pack en.-use your own api to chat, free forever by pack en</a></iframe>

itch.io地址:pack-en.icth.io/pack-ai 可能需要工具才可以访问

源代码:www.mediafire.com/folder/rga7… 我都是用visual studio做的,是WPF应用.net8

截图(仅供参考)

未命名.png 2.png 3.png 4.png

源代码要求片段:

           private string GetSystemPrompt()
           {
            string basePrompt = @"你是 Pack AI
    回复规则:
    1. 直接回答用户问题,不要说多余的话
    2. 代码用 ```语言名 和 ``` 包裹
    3. 用自然语言回复,不要用 Python 代码包装你的回复
    4. 不要输出类似 ''你好''' 这样的格式
    5. 不要输出 print() 语句,不要输出代码块外的代码
    6. 如果用户问代码问题,直接给出代码,不需要额外包装";

            if (_language == "中文")
            {
                return basePrompt + "\n\n7. 使用中文回复,保持专业友好的语气。";
            }
            else if (_language == "英文")
            {
                return basePrompt + "\n\n7. Use English to reply, keep professional and friendly. Always respond in English only.";
            }
            else
            {
                return basePrompt + "\n\n7. 根据用户提问的语言来回复。如果用户用中文提问,就用中文回复;如果用户用英文提问,就用英文回复。";
            }
        }

        private void RemoveLoadingMessage()
        {
            Dispatcher.Invoke(() =>
            {
                if (ChatPanel.Children.Count > 0)
                {
                    var last = ChatPanel.Children[ChatPanel.Children.Count - 1] as Border;
                    var text = last?.Child as TextBlock;
                    if (text?.Text == "think...")
                    {
                        ChatPanel.Children.RemoveAt(ChatPanel.Children.Count - 1);
                    }
                }
            });
        }


修改string basPrompt = ""段落以修改AI的对话风格

源代码callgroq方法:

private async Task<string> CallGroqApi(string apiKey, string apiUrl, string modelId, string userMessage)
{
    var requestBody = new
    {
        model = modelId,
        messages = new[]
        {
            new { role = "system", content = GetSystemPrompt() },
            new { role = "user", content = userMessage }
        },
        temperature = 0.7,
        max_tokens = 2048
    };

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

    _httpClient.DefaultRequestHeaders.Clear();
    _httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");

    var response = await _httpClient.PostAsync(apiUrl, content);
    var responseText = await response.Content.ReadAsStringAsync();

    if (!response.IsSuccessStatusCode)
    {
        throw new Exception($"Groq API 错误 ({response.StatusCode}): {responseText}");
    }

    using var doc = JsonDocument.Parse(responseText);
    return doc.RootElement
        .GetProperty("choices")[0]
        .GetProperty("message")
        .GetProperty("content")
        .GetString() ?? "无回复";
}

如果你感兴趣就去看看吧