點選上方 藍字 江湖評談 設為關註/星標
前言
重度後端研究,搞前端真有點不習慣。
目前所有大模型幾乎都提供了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模型進行對話等等。