我平时会用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
截图(仅供参考)
源代码要求片段:
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() ?? "无回复";
}
如果你感兴趣就去看看吧