Framework ou SDK natif : le choix du projet
Le constat dans le code
Dans le pyproject.toml du projet : langchain-core seulement â pas de langchain, pas de langchain-anthropic. Le LLM est appelĂ© au SDK natif (module 4), l'orchestration est LangGraph pur (module 6), et langchain-core n'est lĂ que comme socle de LangGraph (les types de base, RunnableConfig).
Ce que le framework coûte (et qui a motivé le choix)
- Le contrĂŽle chirurgical du provider : les breakpoints de prompt caching,
output_config.effort, la gestion fine destop_reason=max_tokens, les Ă©vĂ©nements de streaminput_json_delta⊠sont des features Anthropic pointues. Ă travers l'abstraction multi-provider, elles arrivent tard, Ă moitiĂ©, ou pas du tout â et la latence/facture s'en ressentent directement ; - La profondeur de pile : un bug dans
prompt | llm | parsertraverse des dizaines de frames de Runnables ; l'équivalent SDK a une stack de trois niveaux, et le prompt exact envoyé se logge trivialement ; - La vélocité de l'écosystÚme : les versions bougent vite ; moins de couches = moins de migrations subies ;
- Le besoin rĂ©el : le projet n'a pas besoin de 50 intĂ©grations â il a UN provider principal, deux annexes (Cohere, Mistral), et ses propres abstractions fines (
LLMRuntime,ToolBus) taillées pour ses invariants (model_view/ui_events, idempotence).
Ce que le framework apporte (et quand le choisir)
Prototypage Ă©clair, intĂ©grations innombrables (vector stores, loaders, providers), standardisation d'Ă©quipe, et l'entrĂ©e naturelle vers LangGraph/LangSmith. L'arbre de dĂ©cision honnĂȘte :
- POC, exploration multi-providers, Ă©quipe junior, besoin d'intĂ©grations variĂ©es â LangChain complet ;
- produit mĂ»r, un provider dominant, exigences fines de coĂ»t/latence/privacy â SDK natif + LangGraph pour l'orchestration (le choix du projet) ;
- dans tous les cas : les concepts (messages, tools, structured output) sont les mĂȘmes â c'est l'Ă©paisseur de la couche qui change.
Pourquoi le projet garde-t-il langchain-core malgré son choix « SDK natif » ?