Kani (カニ) เป็นเฟรมเวิร์กที่มีน้ำหนักเบาและแฮ็กได้สูงสำหรับโมเดลภาษาที่ใช้การแชทด้วยการใช้เครื่องมือ/การเรียกใช้ฟังก์ชั่น
เมื่อเปรียบเทียบกับเฟรมเวิร์ก LM อื่น ๆ Kani มีความคิดเห็นน้อยกว่าและให้ความสามารถในการปรับแต่งได้ดีกว่าในส่วนของการควบคุมการไหลที่สำคัญทำให้เป็นตัวเลือกที่สมบูรณ์แบบสำหรับนักวิจัย NLP มือสมัครเล่นและนักพัฒนา
Kani มาพร้อมกับการสนับสนุนสำหรับรุ่นต่อไปนี้นอกกรอบพร้อมกรอบการทำงานที่ไม่เชื่อเรื่องพระเจ้าเพื่อเพิ่มการสนับสนุนอีกมากมาย:
โมเดลโฮสต์
โมเดลโอเพ่นซอร์ส
Kani รองรับทุกรูปแบบการแชทที่มีอยู่บนหน้ากอดผ่าน transformers
หรือ llama.cpp
!
โดยเฉพาะอย่างยิ่งเรามีการใช้งานอ้างอิงสำหรับโมเดลฐานต่อไปนี้และการปรับแต่ง: ของพวกเขา:
ตรวจสอบสวนสัตว์รุ่นเพื่อดูวิธีการใช้แต่ละรุ่นเหล่านี้ในแอปพลิเคชันของคุณ!
สนใจที่จะบริจาค? ตรวจสอบคำแนะนำของเรา
อ่านเอกสารเกี่ยวกับ readthedocs!
อ่านกระดาษของเราเกี่ยวกับ arxiv!
Kani ต้องการ Python 3.10 หรือสูงกว่า ในการติดตั้งการพึ่งพาเฉพาะรุ่น Kani ใช้ความพิเศษต่าง ๆ (วงเล็บหลังจากชื่อไลบรารีใน pip install
) ในการพิจารณาว่าจะติดตั้งพิเศษใด ๆ ให้ดูตารางรุ่นหรือใช้ [all]
พิเศษเพื่อติดตั้งทุกอย่าง
# for OpenAI models
$ pip install " kani[openai] "
# for Hugging Face models
$ pip install " kani[huggingface] " torch
# or install everything:
$ pip install " kani[all] "
สำหรับการเปลี่ยนแปลงที่ทันสมัยที่สุดและรุ่นใหม่คุณสามารถติดตั้งเวอร์ชันการพัฒนาได้จากสาขา main
ของ Git:
$ pip install " kani[all] @ git+https://github.com/zhudotexe/kani.git@main "
Kani ต้องการ Python 3.10 หรือสูงกว่า
ขั้นแรกให้ติดตั้งไลบรารี ใน quickstart นี้เราจะใช้เครื่องยนต์ Openai แม้ว่า Kani จะเป็นแบบจำลอง
$ pip install " kani[openai] "
จากนั้นลองใช้ Kani เพื่อสร้าง chatbot อย่างง่ายโดยใช้ CHATGPT เป็นแบ็กเอนด์
# import the library
import asyncio
from kani import Kani , chat_in_terminal
from kani . engines . openai import OpenAIEngine
# Replace this with your OpenAI API key: https://platform.openai.com/account/api-keys
api_key = "sk-..."
# kani uses an Engine to interact with the language model. You can specify other model
# parameters here, like temperature=0.7.
engine = OpenAIEngine ( api_key , model = "gpt-4o-mini" )
# The kani manages the chat state, prompting, and function calling. Here, we only give
# it the engine to call ChatGPT, but you can specify other parameters like
# system_prompt="You are..." here.
ai = Kani ( engine )
# kani comes with a utility to interact with a kani through your terminal...
chat_in_terminal ( ai )
# or you can use kani programmatically in an async function!
async def main ():
resp = await ai . chat_round ( "What is the airspeed velocity of an unladen swallow?" )
print ( resp . text )
asyncio . run ( main ())
Kani ใช้เวลาในการตั้งค่าโมเดลแชทที่ใช้งานได้สั้น ๆ ในขณะที่เสนอโปรแกรมเมอร์การปรับแต่งที่ลึกลงไปในทุก ๆ การแจ้งเตือนการเรียกใช้ฟังก์ชันและแม้แต่รูปแบบภาษาพื้นฐาน
การเรียกใช้ฟังก์ชันทำให้โมเดลภาษามีความสามารถในการเลือกเมื่อเรียกใช้ฟังก์ชั่นที่คุณระบุตามเอกสาร
ด้วย Kani คุณสามารถเขียนฟังก์ชั่นใน Python และเปิดเผยพวกเขาไปยังโมเดลด้วยรหัสเพียงบรรทัดเดียว: @ai_function
DEANCHENATER
# import the library
import asyncio
from typing import Annotated
from kani import AIParam , Kani , ai_function , chat_in_terminal , ChatRole
from kani . engines . openai import OpenAIEngine
# set up the engine as above
api_key = "sk-..."
engine = OpenAIEngine ( api_key , model = "gpt-4o-mini" )
# subclass Kani to add AI functions
class MyKani ( Kani ):
# Adding the annotation to a method exposes it to the AI
@ ai_function ()
def get_weather (
self ,
# and you can provide extra documentation about specific parameters
location : Annotated [ str , AIParam ( desc = "The city and state, e.g. San Francisco, CA" )],
):
"""Get the current weather in a given location."""
# In this example, we mock the return, but you could call a real weather API
return f"Weather in { location } : Sunny, 72 degrees fahrenheit."
ai = MyKani ( engine )
# the terminal utility allows you to test function calls...
chat_in_terminal ( ai )
# and you can track multiple rounds programmatically.
async def main ():
async for msg in ai . full_round ( "What's the weather in Tokyo?" ):
print ( msg . role , msg . text )
asyncio . run ( main ())
Kani รับประกันได้ว่าการโทรฟังก์ชั่นนั้นใช้ได้ตามเวลาที่พวกเขาไปถึงวิธีการของคุณในขณะที่ช่วยให้คุณมุ่งเน้นไปที่การเขียนโค้ด สำหรับข้อมูลเพิ่มเติมตรวจสอบเอกสารการโทรฟังก์ชั่น
Kani รองรับการตอบสนองการสตรีมจากรูปแบบภาษาพื้นฐานโทเค็น-โดยการเปิดตัวแม้ในที่ที่มีการเรียกใช้ฟังก์ชั่น สตรีมมิ่งได้รับการออกแบบให้เป็นวิธีการแบบเลื่อนลงของวิธี chat_round
และ full_round
ช่วยให้คุณค่อยๆ refactor รหัสของคุณโดยไม่ต้องทิ้งไว้ในสถานะที่เสีย
async def stream_chat ():
stream = ai . chat_round_stream ( "What does kani mean?" )
async for token in stream :
print ( token , end = "" )
print ()
msg = await stream . message () # or `await stream`
async def stream_with_function_calling ():
async for stream in ai . full_round_stream ( "What's the weather in Tokyo?" ):
async for token in stream :
print ( token , end = "" )
print ()
msg = await stream . message ()
เฟรมเวิร์กที่มีอยู่สำหรับโมเดลภาษาเช่น Langchain และ SimpleAichat มีความคิดเห็นและ/หรือเฮฟวี่เวท - พวกเขาแก้ไขพรอมต์ของนักพัฒนาภายใต้ประทุนมีความท้าทายในการเรียนรู้และยากที่จะปรับแต่งโดยไม่ต้องเพิ่มจำนวนมาก
เราสร้าง Kani เป็นทางเลือกที่ยืดหยุ่นเรียบง่ายและมีประสิทธิภาพมากขึ้น การเปรียบเทียบที่ดีระหว่างเฟรมเวิร์กคือการบอกว่า Kani คือ Langchain เป็นขวด (หรือ fastapi) คือ Django
Kani เหมาะสำหรับทุกคนตั้งแต่นักวิจัยเชิงวิชาการไปจนถึงมืออาชีพในอุตสาหกรรมไปจนถึงมือสมัครเล่นที่จะใช้โดยไม่ต้องกังวลเกี่ยวกับแฮ็คที่อยู่ภายใต้ฮูด
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับวิธีการปรับแต่ง Kani ด้วย wrappers พร้อมของคุณเองการโทรฟังก์ชั่นและอื่น ๆ อ่านเอกสาร!
หรือดูตัวอย่างที่ใช้ในการซื้อคืนนี้
ต้องการเห็น Kani ในการดำเนินการหรือไม่? การใช้ปริมาณ 4 บิตเพื่อลดขนาดโมเดลเราเรียกใช้ Llama v2 เป็นส่วนหนึ่งของชุดทดสอบของเราในการกระทำของ GitHub:
https://github.com/zhudotexe/kani/actions/workflows/pytest.yml?query=branch%3amain+is%3asuccess
เพียงคลิกที่งานสร้างล่าสุดเพื่อดูผลลัพธ์ของ Llama!
ทีมพัฒนาหลักทำจากนักศึกษาปริญญาเอกสามคนในภาควิชาคอมพิวเตอร์และวิทยาศาสตร์สารสนเทศที่มหาวิทยาลัยเพนซิลเวเนีย พวกเราทุกคนเป็นสมาชิกของห้องปฏิบัติการของศาสตราจารย์คริสคอลลิสัน-เบิร์ตเพื่อดำเนินการเพื่อก้าวไปสู่อนาคตของ NLP
เราใช้ Kani อย่างแข็งขันในการวิจัยของเราและมุ่งมั่นที่จะรักษาความทันสมัยด้วยการปฏิบัติ NLP ที่ทันสมัย
หากคุณใช้ Kani โปรดอ้างอิงเราเป็น:
@inproceedings{zhu-etal-2023-kani,
title = "Kani: A Lightweight and Highly Hackable Framework for Building Language Model Applications",
author = "Zhu, Andrew and
Dugan, Liam and
Hwang, Alyssa and
Callison-Burch, Chris",
editor = "Tan, Liling and
Milajevs, Dmitrijs and
Chauhan, Geeticka and
Gwinnup, Jeremy and
Rippeth, Elijah",
booktitle = "Proceedings of the 3rd Workshop for Natural Language Processing Open Source Software (NLP-OSS 2023)",
month = dec,
year = "2023",
address = "Singapore",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/2023.nlposs-1.8",
doi = "10.18653/v1/2023.nlposs-1.8",
pages = "65--77",
}
เราขอขอบคุณสมาชิกของห้องปฏิบัติการของ Chris Callison-Burch สำหรับการทดสอบและข้อเสนอแนะโดยละเอียดเกี่ยวกับเนื้อหาของทั้งกระดาษและที่เก็บ Kani นอกจากนี้เราขอขอบคุณ Henry Zhu (ไม่มีความสัมพันธ์กับผู้เขียนคนแรก) สำหรับการสนับสนุนโครงการต้นและกระตือรือร้นของโครงการ
งานวิจัยนี้ขึ้นอยู่กับงานที่ได้รับการสนับสนุนบางส่วนจากห้องปฏิบัติการวิจัยกองทัพอากาศ (สัญญา FA8750-23-C-0507) โครงการ IARPA Hiatus (สัญญา 2022-2207200005) และ NSF (Award 1928631) ได้รับการอนุมัติสำหรับการเปิดตัวสาธารณะ Distribution Unlimited มุมมองและข้อสรุปที่มีอยู่ในที่นี้เป็นของผู้เขียนและไม่ควรตีความว่าจำเป็นต้องเป็นตัวแทนของนโยบายอย่างเป็นทางการไม่ว่าจะเป็นการแสดงหรือโดยนัยของ IARPA, NSF หรือรัฐบาลสหรัฐฯ