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.
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 resultMenjana 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.contentMengintegrasikan 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 messagesMencetuskan 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 replyMengekalkan 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.
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
- Sebab LLM Tanpa Keadaan Memerlukan Memori Luaran
- Memori Penimbal dan Tetingkap
- Memori Ringkasan dan Pemotongan Sedar Token
- Mengekalkan Sejarah Sembang dalam Redis dan PostgreSQL