点击上方 蓝字 江湖评谈 设为关注/星标
前言
重度后端研究,搞前端真有点不习惯。
目前所有大模型几乎都提供了python和curl形式的api/get/post,
无论脚本,服务,http/https,
用它俩玩大模型是比较顺手的。同时也用C#体验了下,本篇用这三种方式使用llama-atom的API以及前端展示。
先看下最终成型:
Curl
首先curl的请求,这个命令在linux/win上都适用。一般是通过http/https来操作,这里用的js fetch,关键代码如下:
fetch('https://api.atomecho.cn/v1/chat/completions', {
method: 'POST',
headers: headers, // 设置请求头
body: JSON.stringify(postData) // 将数据转换为 JSON 字符串并发送
})
.then(response => response.text()) // 解析 JSON 响应
.then(data => {
let str = data;
//message = str.match(/[\u4e00-\u9fa5]+/g);中文输出正则匹配,其它会出错
let fruits = str.split("content");
message='';
for (let i = 0; i < fruits.length; i++)
{
let regex = /":"(.*?)"}}],/;
let match = regex.exec(fruits[i]);
if (match && match[1]) {
let extractedContent = match[1];
//alert(extractedContent);
message= message.concat(extractedContent);
}
else{
console.log("No match found.");
}
}
let cleanedString = message
.replace(/\\\"/g, '\"') // 去掉转义的双引号
.replace(/\\n/g, ' ') // 去掉转义的换行符并替换为空格
.replace(/\\r/g, ' ') // 去掉转义的回车符并替换为空格
.replace(/\\t/g, ' ') // 去掉转义的制表符并替换为空格
.replace(/```/g, '') // 去掉反引号
.replace(/\\/g, '') // 去掉所有剩余的反斜杠
.replace(/\n/g, ' ') // 去掉实际的换行符并替换为空格
.replace(/\r/g, ' '); // 去掉实际的回车符并替换为空格
// 模拟 AI 的回复(可以根据实际情况修改)
setTimeout(() => {
appendMessage('AI', cleanedString);
}, 500);
因为跨域,代理,etc/host等问题,所以这里需要一个干净无任何限制的浏览器环境,以避免请求出错。打开cmd,切换到如下目录,然后运行chrome
C:\Program Files\Google\Chrome\Application>chrome.exe --disable-web-security --user-data-dir="c:/ChromeDevSession"
在chrome里面运行以上js/html代码,就可以对话了:
Python
python这里是脚本形式的,如下:
from openai import OpenAI
import sys
defABC(str):
client = OpenAI(api_key="sk-your atom key",base_url="https://api.atomecho.cn/v1",)
completion = client.chat.completions.create(model="Llama3-Chinese-8B-Instruct",messages=[{"role":"user", "content": str}],temperature=0.3,)
print(completion.choices[0].message.content)
return
print("欢迎使用llama3大模型对话")
while(1):
try:
print("\r\n")
user_input = input("Please type something and press enter: ")
if user_input =="exit":
exit(0)
if len(user_input)!=0:
ABC(user_input)
else:
print("请输入参数")
except KeyboardInterrupt:
print("\r\n")
sys.exit()
一般运行在后端:
C#
C#因为不太喜欢semantic kernel这种看似很沉重的框架,所以这里直接.NET8 API AOT项目构建的后端http-get请求。
publicstaticstringllama(string question)
{
var client = new RestClient("https://api.atomecho.cn/v1/chat/completions");
var request = new RestRequest("https://api.atomecho.cn/v1/chat/completions", Method.Post);
request.AddHeader("Authorization", "Bearer sk-your atom key");
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Accept", "*/*");
request.AddHeader("Host", "api.atomecho.cn");
request.AddHeader("Connection", "keep-alive");
var body = @"{
" + "\n" +
@" ""model"": ""Atom-7B-Chat"",
" + "\n" +
@" ""messages"": [
" + "\n" +
@" {
" + "\n" +
@" ""role"": ""user"",
" + "\n" +
@" ""content"":""+" + question + @"+""
" + "\n" +
@" }
" + "\n" +
@" ],
" + "\n" +
@" ""temperature"": 0.3,
" + "\n" +
@" ""stream"": true
" + "\n" +
@"}";
request.AddParameter("application/json", body, ParameterType.RequestBody);
RestResponse response = client.Execute(request);
string str = response.Content;
string[] str1 = str.Split("data");
StringBuilder addstr = new StringBuilder();
for (int i = 0; i < str1.Length - 1; i++)
{
try
{
string gg = str1[i].Substring(str1[i].IndexOf("content") + 10, (str1[i].IndexOf("usage") - str1[i].IndexOf("content")) - 16);
if (!gg.Contains("finish_reason"))
addstr.Append(gg);
}
catch
{
}
}
return addstr.ToString();
}
运行之后,API请求运行可以通过:http://localhost:5069/llama请求,它会返回如下:
如果你想要跟它对话,则在 http://localhost:5069/llama 后面加参数就可以了。比如要它作首诗,则可以请求如下: http://localhost:5069/llama/作首诗,它返回:
这种形式可以作为get请求数据,用在任何需要的地方。
结尾
以上是AI模型的三种请求方式,可以作为https,服务器,脚本等。大模型的调用情况基本上相同,非常简单,此处作为一个参考,可以快速切换其它AI模型进行对话等等。