AI Engineering Academy · Pelajaran

Memori Ringkasan dan Pemotongan Sedar Token

Gunakan ConversationSummaryMemory untuk meringkaskan giliran lama secara automatik, mengekalkan perbualan yang padat sambil menyimpan fakta penting yang disebut pengguna sebelum ini.

Pelajaran 3 daripada 413 langkah

Memori Ringkasan dan Pemotongan Sedar Token ialah pelajaran AI Engineering Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran AI Engineering Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus AI Engineering Academy merangkumi sejumlah 4 pelajaran.

Kos Token bagi Sejarah Penuh

Conversation Buffer Memory menyimpan setiap mesej yang pernah ditukar, lalu menggunakan tetingkap konteks anda dengan cepat. Perbualan 100 giliran mungkin menggunakan 20,000 token hanya untuk sejarah, dan meninggalkan sedikit ruang untuk respons sebenar. Summary Memory menyelesaikan masalah ini dengan menggantikan giliran lama dengan ringkasan termampat.

Cara Memori Ringkasan Berfungsi

Apabila jumlah token melebihi ambang, ConversationSummaryMemory menghantar giliran perbualan yang paling lama kepada LLM dan memintanya meringkaskan perkara utama. Giliran penuh dibuang dan digantikan dengan ringkasan padat ini. Giliran seterusnya terkumpul di atas ringkasan tersebut.

  • Giliran lama: digantikan dengan ringkasan
  • Giliran terkini: dikekalkan secara verbatim
  • Hasil akhir: pemampatan bermakna dengan kehilangan maklumat yang minimum

LangChain ConversationSummaryMemory

LangChain menyediakan ConversationSummaryMemory yang meringkaskan secara automatik apabila penimbal menjadi terlalu besar. Anda menghantar LLM kepada objek memori supaya objek itu boleh memanggil model untuk menjana ringkasan apabila diperlukan.

from langchain.memory import ConversationSummaryMemory
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model='gpt-4o-mini')

memory = ConversationSummaryMemory(
    llm=llm,
    return_messages=True
)

# Add messages manually
memory.save_context(
    {'input': 'My name is Alice and I am building a RAG system.'},
    {'output': 'Great, I can help you build a RAG system, Alice.'}
)

print(memory.load_memory_variables({}))

Memori Penimbal Ringkasan: Gabungan Terbaik

ConversationSummaryBufferMemory ialah pendekatan hibrid: ia mengekalkan giliran terkini secara verbatim untuk ketepatan dan hanya meringkaskan giliran lama yang melebihi max_token_limit. Ini memberikan ingatan tepat bagi konteks terkini serta ingatan termampat bagi konteks lama.

from langchain.memory import ConversationSummaryBufferMemory
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model='gpt-4o-mini')

memory = ConversationSummaryBufferMemory(
    llm=llm,
    max_token_limit=500,  # Summarize when older turns exceed 500 tokens
    return_messages=True
)

# As the conversation grows, old turns get summarized automatically
print('Moving summary:', memory.moving_summary_buffer)

Mengira Token Sebelum Pemotongan

Untuk membuat keputusan pemotongan yang bijak, anda perlu mengetahui jumlah token yang digunakan oleh mesej anda. Pustaka tiktoken membolehkan anda mengira token untuk mana-mana model OpenAI. Ini membolehkan anda melaksanakan pemotongan yang peka token dan kekal dengan ketat di bawah belanjawan.

import tiktoken

def count_tokens(messages: list, model: str = 'gpt-4o') -> int:
    encoding = tiktoken.encoding_for_model(model)
    total = 0
    for msg in messages:
        # Each message has overhead tokens for role framing
        total += 4
        total += len(encoding.encode(msg.get('content', '')))
    total += 2  # Reply primer
    return total

messages = [
    {'role': 'user', 'content': 'Explain RAG to me.'},
    {'role': 'assistant', 'content': 'RAG stands for Retrieval-Augmented Generation...'}
]
print('Token count:', count_tokens(messages))

Pemotongan Manual yang Peka Token

Kadangkala anda mahukan kawalan penuh terhadap pemotongan tanpa kelas memori LangChain. Pendekatan mudah: simpan semua mesej, kemudian buang mesej bukan sistem yang paling lama satu demi satu sehingga jumlah token berada dalam belanjawan anda.

def truncate_to_budget(messages: list, budget: int, model: str = 'gpt-4o') -> list:
    '''Remove oldest non-system messages until under budget.'''
    import tiktoken
    encoding = tiktoken.encoding_for_model(model)

    def token_count(msgs):
        total = 2
        for m in msgs:
            total += 4 + len(encoding.encode(m.get('content', '')))
        return total

    result = list(messages)
    while token_count(result) > budget and len(result) > 1:
        # Never remove the system prompt at index 0
        if result[0]['role'] == 'system':
            del result[1]
        else:
            del result[0]
    return result

Menjana Gesaan Ringkasan

Apabila anda membina memori ringkasan sendiri, anda merangka gesaan yang meminta LLM mengekstrak fakta utama. Gesaan itu hendaklah mengarahkan model menangkap keutamaan pengguna, entiti bernama dan soalan yang belum diselesaikan — fakta yang paling berkemungkinan penting dalam giliran akan datang.

from openai import OpenAI

client = OpenAI()

def summarize_history(old_summary: str, new_turns: list) -> str:
    turns_text = '\n'.join(
        f'{m["role"].capitalize()}: {m["content"]}' for m in new_turns
    )
    prompt = f'''Current summary:\n{old_summary}\n\nNew conversation turns:\n{turns_text}\n\nWrite an updated summary that captures key facts, user preferences, and open questions.'''

    resp = client.chat.completions.create(
        model='gpt-4o-mini',
        messages=[{'role': 'user', 'content': prompt}]
    )
    return resp.choices[0].message.content

Mengintegrasikan Ringkasan ke dalam Gesaan Sistem

Setelah mempunyai ringkasan, selitkannya ke dalam gesaan sistem supaya LLM sentiasa mempunyai konteks tentang sejarah perbualan. Letakkan ringkasan di hadapan sebagai blok konteks ringkas sebelum arahan persona utama.

def build_messages_with_summary(summary: str, recent_turns: list, user_input: str) -> list:
    system_content = (
        'You are a helpful AI assistant.'
        + ('\n\n[Conversation summary]\n' + summary if summary else '')
    )

    messages = [{'role': 'system', 'content': system_content}]
    messages.extend(recent_turns)
    messages.append({'role': 'user', 'content': user_input})
    return messages

Mencetuskan Peringkasan Secara Automatik

Corak yang lazim ialah mencetuskan peringkasan apabila perbualan melebihi ambang token — contohnya, apabila sejarah yang terkumpul melepasi 2,000 token. Pada ketika itu, ringkaskan semua kecuali dua giliran terakhir dan gantikannya dengan ringkasan.

class SummaryBufferChat:
    def __init__(self, max_tokens=2000):
        self.summary = ''
        self.recent_turns = []
        self.max_tokens = max_tokens

    def chat(self, user_message: str) -> str:
        from openai import OpenAI
        client = OpenAI()

        messages = build_messages_with_summary(self.summary, self.recent_turns, user_message)
        resp = client.chat.completions.create(model='gpt-4o', messages=messages)
        reply = resp.choices[0].message.content

        self.recent_turns.append({'role': 'user', 'content': user_message})
        self.recent_turns.append({'role': 'assistant', 'content': reply})

        if count_tokens(self.recent_turns) > self.max_tokens:
            to_summarize = self.recent_turns[:-2]
            self.recent_turns = self.recent_turns[-2:]
            self.summary = summarize_history(self.summary, to_summarize)

        return reply

Mengekalkan Entiti Bernama dalam Ringkasan

Kualiti ringkasan sangat bergantung pada gesaan peringkasan. Jika pengguna menyebut nama, lokasi, keutamaan atau tarikh akhir mereka, gesaan anda mesti mengarahkan model secara jelas untuk menyertakan fakta tersebut. Ringkasan umum sering menggugurkan kata nama khas yang paling penting untuk pemperibadian.

  • Sertakan: nama, tarikh, pilihan teknikal yang dibuat, soalan terbuka
  • Kecualikan: pertukaran kata pengisi, pengakuan, ucapan sopan yang berulang

Pertukaran: Memori Ringkasan berbanding Tetingkap

Pilihan antara memori ringkasan dan tetingkap bergantung pada kes penggunaan anda. Memori tetingkap mengekalkan kata-kata yang tepat, yang penting untuk ingatan semula yang tepat tetapi membazirkan token pada konteks yang tidak berkaitan. Memori ringkasan memampatkan secara agresif tetapi menambah satu lagi panggilan LLM dan mungkin kehilangan butiran kes terpencil. Kebanyakan bot sembang pengeluaran menggunakan pendekatan hibrid: giliran terkini yang tepat serta ringkasan bergulir bagi giliran lama.

Semakan pantas

Uji pemahaman anda tentang konsep memori ringkasan dan pemotongan yang peka token.

Ulang kaji pelajaran

Dalam pelajaran ini, anda telah mempelajari bahawa: memori ringkasan memampatkan giliran lama melalui panggilan LLM, ConversationSummaryBufferMemory menggabungkan giliran terkini yang tepat dengan giliran lama yang diringkaskan, dan tiktoken membolehkan pemotongan yang peka token untuk memastikan perbualan kekal dalam belanjawan. Seterusnya, kita akan meneroka penyimpanan sejarah sembang dalam Redis dan PostgreSQL untuk storan yang tahan lama dan boleh diskalakan.

Percuma untuk bermula

Pelajari Python dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
30
Pelajaran
120

Soalan Lazim

Adakah pelajaran “Memori Ringkasan dan Pemotongan Sedar Token” percuma?

Ya — teks penuh “Memori Ringkasan dan Pemotongan Sedar Token” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus AI Engineering Academy, tingkat taraf kepada CoddyKit PRO. Kursus AI Engineering Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Memori Ringkasan dan Pemotongan Sedar Token”?

Gunakan ConversationSummaryMemory untuk meringkaskan giliran lama secara automatik, mengekalkan perbualan yang padat sambil menyimpan fakta penting yang disebut pengguna sebelum ini. Anda berlatih AI Engineering Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan AI Engineering Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran AI Engineering Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Memori Ringkasan dan Pemotongan Sedar Token” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran AI Engineering Academy ini?

Ya. Setiap pelajaran AI Engineering Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Sebab LLM Tanpa Keadaan Memerlukan Memori Luaran
  2. Memori Penimbal dan Tetingkap
  3. Memori Ringkasan dan Pemotongan Sedar Token
  4. Mengekalkan Sejarah Sembang dalam Redis dan PostgreSQL
← Kembali ke AI Engineering Academy