Templat Penjejak Perbelanjaan Kontraktor Bebas untuk Freelancer AS
Bina penjejak perbelanjaan kontraktor bebas untuk kerja freelance AS, dengan kategori sedar IRS, rekod resit, kadar batu 2026, dan penanda semakan cukai.
Jika ejen LangChain terlupa butiran semasa perbualan panjang, betulkan seni bina sebelum meningkatkan tetingkap konteks model. Dalam ejen gaya LangChain v1 semasa, kesinambungan perbualan dibina daripada dua lapisan berasingan: penanda titik (checkpointer) untuk keadaan jangka pendek berskop benang dan stor untuk maklumat jangka panjang yang mesti kekal merentasi benang. Perbualan panjang kemudian memerlukan perhatian ketiga: pengurusan konteks, biasanya memangkas atau meringkaskan mesej lama sebelum ia membanjiri model.
Panduan ini mengikuti dokumentasi rasmi LangChain seperti yang disemak pada 11 September 2026. Dokumentasi semasa mengesyorkan langchain.agents.create_agent untuk ejen baharu dan menerangkan keteguhan LangGraph sebagai sistem memori asas. Contoh lama berdasarkan ConversationChain, ConversationBufferMemory, atau initialize_agent mungkin masih muncul dalam bahan warisan, tetapi panduan migrasi LangChain v1 telah memindahkan rantaian warisan dan fungsi lapuk lain ke langchain-classic. Lihat panduan migrasi rasmi LangChain v1.

Sebelum mengubah kod, pisahkan tiga masalah yang sering kelihatan sama dari sudut pandangan pengguna.
| Simptom | Punca yang mungkin | Lapisan betul untuk diperbaiki |
|---|---|---|
| Ejen terlupa selepas pelayan dimulakan semula | Keadaan disimpan hanya dalam memori proses | Penanda titik atau stor kekal |
| Ejen terlupa antara dua permintaan dalam sembang yang sama | Tiada penanda titik, atau thread_id berbeza digunakan | Keteguhan benang |
| Ejen mengingati giliran awal dalam storan tetapi berhenti menggunakannya dalam sembang yang sangat panjang | Konteks model menjadi terlalu besar atau bising | Peringkasan, pemangkasan, pengambilan semula |
| Ejen mengingati keutamaan dalam satu sembang tetapi tidak dalam sembang baharu | Fakta wujud hanya dalam keadaan benang | Stor jangka panjang |
Dokumentasi memori jangka pendek LangChain mendefinisikan memori jangka pendek sebagai keadaan dalam satu benang tunggal. Dokumentasi memori jangka panjangnya mendefinisikan memori jangka panjang sebagai maklumat yang kekal merentasi perbualan dan sesi yang berbeza.

Anda memerlukan aplikasi LangChain/LangGraph semasa, integrasi model, dan tempat untuk mengekalkan keadaan. Untuk eksperimen tempatan, InMemorySaver adalah mencukupi. Untuk pengeluaran, gunakan penanda titik berpangkalan pangkalan data. Dokumentasi rasmi LangChain menunjukkan PostgreSQL melalui pakej berasingan langgraph-checkpoint-postgres.
Kekalkan empat pengenal pasti dengan jelas:
thread_id: kunci keteguhan LangGraph yang digunakan untuk menyambung semula keadaan satu benang.Mereka tidak sepatutnya secara automatik menjadi nilai yang sama. Satu pengguna boleh mempunyai banyak benang, dan satu benang boleh mengandungi banyak fakta.
Mula dengan ujian sekecil mungkin. Minta ejen mengingati butiran unik, kemudian panggilnya sekali lagi dan minta butiran tersebut. Jangan uji memori dengan satu panggilan invoke() kerana model boleh melihat semuanya dalam satu permintaan itu walaupun keteguhan rosak.
config = {"configurable": {"thread_id": "debug-thread-001"}}
agent.invoke(
{"messages": [{"role": "user", "content": "Remember that my project codename is Juniper."}]},
config,
)
result = agent.invoke(
{"messages": [{"role": "user", "content": "What is my project codename?"}]},
config,
)
Jika permintaan kedua terlupa “Juniper,” periksa konfigurasi penanda titik dan thread_id sebenar sebelum mengubah prompt.
Penanda titik mengekalkan snapshot keadaan graf ejen. LangGraph menggunakannya untuk memori jangka pendek, pemulihan gangguan, aliran manusia-dalam-gelung, dan toleransi ralat. Panduan keteguhan semasa menerangkan penanda titik sebagai berskop benang dan menyatakan aplikasi mengakses keadaan dengan menghantar thread_id. Lihat panduan keteguhan rasmi LangGraph.
from langchain.agents import create_agent
from langgraph.checkpoint.memory import InMemorySaver
checkpointer = InMemorySaver()
agent = create_agent(
model="your-provider:your-model",
tools=[],
checkpointer=checkpointer,
)
config = {"configurable": {"thread_id": "customer-42:case-7"}}
InMemorySaver sangat baik untuk mengesahkan bahawa pendawaian benang anda berfungsi, tetapi ia menyimpan penanda titik dalam RAM. LangGraph secara jelas memberi amaran bahawa MemorySaver/InMemorySaver tidak kekal merentasi permulaan semula proses.
thread_id Yang Sama Untuk Perbualan Yang SamaRalat peringkat aplikasi yang paling biasa ialah mencipta thread_id baharu pada setiap permintaan HTTP. Pangkalan data mungkin berfungsi dengan sempurna sementara setiap permintaan memulakan benang LangGraph yang berbeza.
Sebagai contoh, anggap bahagian hadapan anda mempunyai ID sembang chat_8bf4. Petakan nilai itu secara deterministik ke benang LangGraph dan gunakan semula untuk setiap giliran dalam sembang itu. Sembang baharu sepatutnya menerima ID benang baharu.

Jangan gunakan satu thread_id kekal untuk semua sembang yang milik pengguna yang sama. Itu menggabungkan perbualan tidak berkaitan ke dalam satu aliran keadaan. Jika anda menggunakan PostgreSQL, panduan penyelesaian masalah semasa LangGraph juga menyatakan thread_id harus kekal di bawah 255 aksara; UUID atau hash deterministik adalah lebih selamat daripada objek terserialisasi yang sangat besar.
Setelah ujian dua permintaan lulus, uji permulaan semula proses. Simpan fakta, hentikan aplikasi, mulakan semula, kemudian minta fakta itu dengan ID benang yang sama. Jika anda masih menggunakan InMemorySaver, terlupa adalah tingkah laku yang dijangkakan.
Dokumentasi memori jangka pendek rasmi menunjukkan persediaan pengeluaran berpangkalan PostgreSQL menggunakan PostgresSaver:
from langchain.agents import create_agent
from langgraph.checkpoint.postgres import PostgresSaver
DB_URI = "postgresql://user:password@db-host/app"
with PostgresSaver.from_conn_string(DB_URI) as checkpointer:
checkpointer.setup()
agent = create_agent(
model="your-provider:your-model",
tools=[],
checkpointer=checkpointer,
)
Untuk persediaan pakej yang didokumentasikan oleh LangChain pada masa ini, lihat Memori jangka pendek. Jangan letak kelayakan pangkalan data sebenar secara langsung dalam kod sumber; gunakan sistem pengurusan rahsia biasa anda.

Tetingkap konteks ialah jumlah konteks input dan output yang boleh ditangani oleh model dalam satu panggilan model. Penanda titik boleh mengekalkan perbualan yang sangat panjang dalam storan, tetapi itu tidak bermakna setiap mesej sejarah harus dihantar kembali ke model selama-lamanya.
Panduan memori jangka pendek LangChain menyatakan sejarah panjang boleh melebihi tetingkap konteks model dan bahawa walaupun model yang mampu menerima sejarah penuh boleh terganggu oleh kandungan lapuk atau di luar topik, dengan latensi dan kos yang lebih tinggi. Strategi yang didokumentasikan ialah memangkas, memadam, meringkaskan, atau mengenakan dasar tersuai.
SummarizationMiddleware ialah pilihan terbina dalam semasa untuk menggantikan sejarah lama dengan ringkasan padat sambil mengekalkan mesej terkini. Pencetusnya boleh berdasarkan kiraan token, kiraan mesej, atau pecahan konteks model.
from langchain.agents import create_agent
from langchain.agents.middleware import SummarizationMiddleware
agent = create_agent(
model="your-provider:your-model",
tools=[],
checkpointer=checkpointer,
middleware=[
SummarizationMiddleware(
model="your-provider:summary-model",
trigger=("fraction", 0.8),
keep=("fraction", 0.3),
)
],
)
Nombor di atas ialah contoh dasar, bukan tetapan sejagat. Pilih ambang selepas mengukur prompt anda sendiri, output alat, had konteks model, latensi, dan kualiti ringkasan. Lihat dokumentasi perantara terbina dalam LangChain untuk pilihan pencetus dan kekalkan yang disokong pada masa ini.

Jika anda melaksanakan pemadaman atau pemangkasan tersuai, kekalkan urutan mesej yang sah. LangChain memberi amaran bahawa banyak pembekal memerlukan mesej pembantu yang mengandungi panggilan alat diikuti oleh mesej hasil alat yang sepadan. Membuang satu separuh pasangan itu boleh menyebabkan ralat pembekal atau tingkah laku model yang mengelirukan.
Stor ialah lapisan keteguhan LangGraph untuk data ditakrifkan aplikasi di luar keadaan graf satu benang. Dokumentasi LangChain semasa menggunakan stor untuk maklumat yang sepatutnya tersedia merentasi perbualan, seperti keutamaan pengguna, fakta, atau pengetahuan aplikasi dikongsi.
Item stor jangka panjang ialah dokumen JSON disusun oleh ruang nama dan kunci. Ruang nama praktikal sering mengandungi pengenal pasti pengguna atau organisasi:
namespace = ("users", user_id, "preferences")
store.put(
namespace,
"response_style",
{"value": "concise", "source": "explicit_user_request"},
)
Inilah yang berbeza daripada menyimpan transkrip keseluruhan. Simpan maklumat yang produk anda sengaja layan sebagai kekal. Jika fakta itu peribadi atau dikawal selia, kenakan dasar pengekalan, kebenaran, penyulitan, dan pemadaman biasa anda dan bukan mengandaikan “memori ejen” dikecualikan daripadanya.

Panduan memori jangka panjang rasmi menunjukkan kedua-dua InMemoryStore dan PostgresStore, dan secara jelas menyatakan bahawa pelaksanaan dalam memori harus digantikan oleh stor berpangkalan pangkalan data untuk pengeluaran. Ia juga menyenaraikan integrasi stor di luar PostgreSQL. Gunakan backend yang sesuai dengan keperluan penyebaran dan operasi anda dan bukan memilih pangkalan data vektor semata-mata kerana perkataan “memori” terlibat.
Stor LangGraph boleh dikonfigurasi dengan indeks supaya store.search() boleh mengambil item mengikut kesamaan semantik. Itu berguna apabila anda mempunyai banyak memori dan tidak mengetahui kunci tepat. Untuk set kecil keutamaan berstruktur, carian langsung ruang nama/kunci sering lebih mudah dan deterministik.
Mengekalkan item jangka panjang tidak menjamin bahawa ejen akan menggunakannya. Aplikasi masih memerlukan laluan pengambilan. Ejen LangChain semasa membolehkan alat mengakses stor yang dibekalkan melalui ToolRuntime.
from dataclasses import dataclass
from langchain.tools import tool, ToolRuntime
@dataclass
class Context:
user_id: str
@tool
def get_response_style(runtime: ToolRuntime[Context]) -> str:
store = runtime.store
if store is None:
return "No memory store configured"
namespace = ("users", runtime.context.user_id, "preferences")
item = store.get(namespace, "response_style")
return item.value["value"] if item else "default"
Anda juga boleh membina prompt dinamik atau perantara yang membaca keadaan dan memori kekal sebelum panggilan model. Peraturan reka bentuk penting ialah laluan pengambilan harus boleh diperhatikan dan diuji. “Maklumat wujud di suatu tempat dalam pangkalan data” tidak mencukupi.

Suite ujian memori yang boleh dipercayai harus merangkumi lebih daripada “model mengingati nama saya sekali.” Gunakan sekurang-kurangnya empat kes ini:
| Ujian | Keputusan dijangka |
|---|---|
| Dua panggilan, ID benang sama | Maklumat berskop benang tersedia |
| Dua panggilan, ID benang berbeza | Sejarah benang jangka pendek tidak bocor |
| Permulaan semula aplikasi, ID benang sama dengan penanda titik kekal | Keadaan benang boleh disambung semula |
| Benang baharu, pengguna sama dengan stor jangka panjang | Hanya fakta kekal yang disimpan secara sengaja boleh diingati |
Kemudian tambah ujian perbualan panjang yang melebihi ambang peringkasan anda. Tegaskan bahawa fakta kekal penting bertahan, urutan panggilan alat terkini kekal sah, dan saiz prompt kekal dalam belanjawan sasaran anda.

Untuk banyak aplikasi ejen, reka bentuk kukuh kelihatan seperti ini:
user_id, conversation_id, dan mesej pengguna baharu.conversation_id ke thread_id LangGraph yang stabil.Jika anda menyebarkan melalui LangGraph Agent Server, panduan keteguhan semasa menyatakan pelayan mengendalikan infrastruktur keteguhan secara automatik, jadi jangan duplikasi lapisan itu tanpa memeriksa model penyebaran.
thread_id baharu untuk setiap permintaanIni mencipta keadaan perbualan baharu setiap giliran. Log ID benang bersebelahan dengan ID sembang aplikasi anda dan sahkan penggunaan semula.
InMemorySaver dalam perkhidmatan berbilang pekerja atau boleh dimulakan semulaKeadaan setempat RAM hilang bersama proses dan mungkin tidak dikongsi merentasi pekerja. Gunakan backend kekal untuk kesinambungan pengeluaran.
Penanda titik mengekalkan keadaan; ia tidak menjamin bahawa transkrip yang sentiasa berkembang berguna untuk model. Tambah dasar pengurusan konteks eksplisit.
Lebih banyak konteks tidak secara automatik lebih baik konteks. Ambil maklumat yang relevan dengan giliran semasa dan kekalkan kesinambungan perbualan terkini secara berasingan.
Ringkasan ialah representasi dijana model dimampatkan. Jika fakta mesti tepat—pengenal pasti akaun, kekangan kontrak, keutamaan diluluskan pengguna, atau keadaan aliran kerja—simpannya sebagai data berstruktur dan bukan berharap ia bertahan merentasi peringkasan berulang.
Sejarah benang tidak harus secara senyap menjadi profil pengguna global. Sebaliknya, keutamaan pengguna yang dimaksudkan untuk mengikuti pengguna merentasi sembang tidak harus hidup hanya dalam satu benang.
Jika contoh bermula daripada rantaian warisan atau kelas memori lama, bandingkannya dengan migrasi v1 semasa dan dokumentasi memori sebelum menggunakannya dalam aplikasi baharu.
thread_id merentasi permintaan berturutan.InMemorySaver dengan penanda titik kekal untuk pengeluaran.Kehilangan memori ejen LangChain jarang diselesaikan oleh satu tetingkap konteks lebih besar. Pertama, jadikan keadaan benang kekal dengan penanda titik dan thread_id yang stabil. Kemudian, kawal sejarah panjang dengan pemangkasan atau SummarizationMiddleware. Akhir sekali, letakkan fakta yang mesti kekal merentasi perbualan dalam stor jangka panjang bernama ruang dan ambilnya secara sengaja.
Pemisahan itu memberi anda sesuatu yang jauh lebih berguna daripada “memori”: sistem yang boleh anda mulakan semula, skala, uji, audit, dan fikirkan apabila pengguna bertanya, “Mengapa ejen terlupa?”
Bina penjejak perbelanjaan kontraktor bebas untuk kerja freelance AS, dengan kategori sedar IRS, rekod resit, kadar batu 2026, dan penanda semakan cukai.
Bina jadual syif pekerja percuma dalam Excel dengan kalkulator jam, formula syif malam, jumlah mingguan, semakan kualiti, dan had yang jelas.
Bina pengesan prospek Excel yang praktikal dengan jadual, senarai jatuh, amaran susulan, dan ringkasan saluran jualan mudah—serta tanda jelas bahawa sudah tiba masanya untuk beralih kepada CRM.
Bina log penyelenggaraan peralatan Excel yang praktikal untuk aset bengkel dengan sejarah perkhidmatan, tarikh luput, masa henti, kos, rekod pemeriksaan, dan sempadan keselamatan yang jelas.
Jalankan DeepSeek secara tempatan di Windows 11 dengan LM Studio. Ketahui model mana yang sesuai untuk PC biasa, cara memuat turun dan memuatnya, mengesahkan penggunaan luar talian, dan menyelesaikan masalah biasa.
Kurangkan kos API LLM dengan empat teknik pemampatan prompt yang praktikal, susun atur mesra cache, output berstruktur, dan pelan penilaian yang mengekalkan kualiti.
Bina saluran penyesuaian semula kandungan AI yang boleh dihoskan secara percuma dengan n8n versi kendiri dan Claude, dengan output berstruktur, pintu semakan, dan panduan kos API yang realistik.
Gunakan semak semakan perancangan acara boleh cetak yang praktikal dan templat belanjawan untuk Word, dengan garis masa, penjejakan vendor, kos anggaran vs. sebenar, pembayaran, dan tugas hari acara.
Sambungkan Ollama ke Obsidian untuk sembang AI tempatan dan PKM yang menyedari gudang nota. Ketahui penyediaan, pemeriksaan kualiti, penyematan tempatan, had privasi, dan bila perlu menukar model.
Bina aliran kerja pemantauan pesaing mingguan dengan ejen AI, carian web, pengesanan perubahan berasaskan bukti, penjadualan GitHub Actions, dan semakan manusia.